C/C++の宿題片付けます 126代目
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2009/05/18(月) 23:06:51【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・問題文やコードをリンクするときは、一言内容にについて説明をつけましょう。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはコラー!!です。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。
【質問テンプレ】
[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++の宿題片付けます 125代目
http://pc12.2ch.net/test/read.cgi/tech/1240226599/
0002デフォルトの名無しさん
2009/05/18(月) 23:19:03(・・)乙
0003デフォルトの名無しさん
2009/05/18(月) 23:37:58/´ ̄`ヽ /: : : \_____/: : : : ヽ、
,. -‐┴─‐- <^ヽ、: : : : : : : : : : : : : : : : : : : : : : }
/: : : : : : : : : : : : : :`.ヽl____: : : : : : : : : : : : : : : : : : /
,. -──「`: : : : : : : : : :ヽ: : : : : : : : :\ `ヽ ̄ ̄ ̄ フ: : : : :/
/: :.,.-ァ: : : |: : : : : : : : : :\: : : : :: : : :ヽ \ /: : : :/
 ̄ ̄/: : : : ヽ: : : . . . . . . . . . . .、 \=--: : : :.i / /: : : : :/
/: : ∧: \: : : : : : : : : : ヽ: :\: : : 〃}/ /: : : : :/ 、
. /: : / . : : :! ヽ: : l\_\/: : : : :\: ヽ彡: : | /: : : : :/ |\
/: : ィ: : : : :.i: : | \!___/ ヽ:: : : : : : :\|:.:.:.:/:! ,': : : : / |: : \
/ / !: : : : :.ト‐|- ヽ \: : : : : l::::__:' :/ i: : : : :{ |: : : :.ヽ
l/ |: : :!: : .l: :| \: : : l´r. Y {: : : : :丶_______.ノ: : : : : :}
l: : :l: : :ト、| 、___,ィ ヽ: :| ゝ ノ '.: : : : : : : : : : : : : : : : : : : : : : /
|: : :ト、: |: :ヽ ___,彡 ´ ̄´ ヽl-‐' \: : : : : : : : : : : : : : : : : : イ
!: :从ヽ!ヽ.ハ=≠' , ///// ///u /  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
V ヽ| }/// r‐'⌒ヽ イ〉、
ヽ、______ー‐‐' ィ´ /:/:7rt‐---、 こ、これは>>1乙じゃなくて
ィ幵ノ ./:/:./:.! !: : : : :!`ヽ ポニーテールなんだから
r‐'T¨「 |: | !:.∨:/:./: :| |: : : : .l: : : :\ 変な勘違いしないでよね!
/: : .|: :| !:.!ィ¨¨ヾ、:.:/ !: : : : l: : : : : :.\
0004デフォルトの名無しさん
2009/05/20(水) 12:45:44[2] 問題文(含コード&リンク):
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9209.zip
[3] 環境
[3.1] OS: ウィンドウズ
[3.2] コンパイラ名とバージョン: ビジュアルC++
[3.3] 言語: C++
[4] 期限: 2009年5月21日朝まで
[5] その他の制限:
「もともと」ディレクトリは提供されたオリジナルのファイルです。
(1)は自力で出来ましたので一応添付しています。わからないのは(2)以降です。
具体的にどのようなアウトプットを求めているのか、問題の意味もあまりよくわかりません。
(3)、(4)になるとますます何を求めているのかわからないのですが、とりあえずいつも
問題が曖昧な先生なのでそれっぽいことをコードで示せば許してもらえます。
という訳で適当な感じでも構わないので(2だけでも結構ですので)よろしくおねがいします
0005デフォルトの名無しさん
2009/05/20(水) 16:00:30[2] 問題文(含コード&リンク):
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9211.zip
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン: VisualC++2008 Express Edition
[3.3] 言語: C++
[4] 期限: 2009年5月21日朝8:00まで
[5] その他の制限: 難易度高いと思いますがどなたかお願いします
00066 ◆tr.t4dJfuU
2009/05/20(水) 18:06:23[1] 授業単元: プログラミング言語
[2] 問題文(含コード&リンク): http://d.pic.to/vrk8t
・2つの数xとyはint型で定義し、キーボードから入力すること。
・掛けられる数(*の左側)はx,…,x+3まで変化させること。
・掛ける数(*の右側)はy,…,y+14まで変化させること。
・出力形式は写真実行例をそっくり真似ること。
・xとyの値の範囲は−9以上9以下とする。
・どんな値を入力しても桁がそろうようにすること。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: VC++2008
[3.3] 言語: C++
[4] 期限: ([2009年5月20日23:59まで]
[5] その他の制限: scanf,printf,forを使ってやるようにとのことです
お願いします
0007デフォルトの名無しさん
2009/05/20(水) 18:14:48行頭の判定のやり方が微妙だが他に思いつかなかったので
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9213.txt
0008デフォルトの名無しさん
2009/05/20(水) 18:25:070009デフォルトの名無しさん
2009/05/20(水) 18:31:48#include <stdio.h>
int main(){
int x, y;
printf("x="); scanf("%d", &x);
printf("y="); scanf("%d", &y);
for(int i = y; i <= y+14; ++i){
for(int j = x; j <= x+3; ++j)
printf("[%2d]*[%2d]=[%4d],", j, i, i*j);
printf("\n");
} return 0;
}
0010デフォルトの名無しさん
2009/05/20(水) 19:44:36授業単元ソフトウェア製作実習
osソラリス
コンパイラgcc
言語c
高さhが2で上底aと下底bが次のような値の台形4つの面積の合計を求めるプログラムをfor文を使って作成せよ。
表示形式
台形(1)a=0、b=4、h=2 面積=
台形(2)a=4,b=16h=2面積=
台形(3)a=16、b=36、h=2面積=
台形(4)a=36、b=64 h=2 面積=
4つの台形の面積の合計=
0011デフォルトの名無しさん
2009/05/20(水) 20:27:22課題1
#include <stdio.h>
#include <unistd.h>
int rm(char *file)
{
int ret;
ret = unlink(file);
if (ret < 0){
perror(file);
}
return ret;
}
int main(int argc, char *argv[])
{
while (--argc > 0)
rm(*++argv);
return 0;
}
0012デフォルトの名無しさん
2009/05/20(水) 20:27:45int main(void)
{
int a, b, i, area, total_area = 0;
for(i=1; i<=4; i++) {
a = (i-1) * (i-1) * 4;
b = i * i * 4;
area = a + b;
printf("台形(%d)a=%2d、b=%2d、h=2 面積=%d\n", i, a, b, area);
total_area += area;
}
printf("4つの台形の面積の合計=%d\n", total_area);
return 0;
}
0013デフォルトの名無しさん
2009/05/20(水) 20:43:48// gcc --input-charset=cp932 --exec-charset=cp932
#include <stdio.h>
int main() {
int i;
float daikei[][3] = {
0,4,2,
4,16,2,
16,36,2,
36,64,2,
}, menseki, goukei = 0.0;
for(i=0; i<sizeof(daikei)/sizeof(daikei[0]); i++) {
menseki = (daikei[i][0] + daikei[i][1]) * daikei[i][2] / 2.0f;
goukei += menseki;
printf("a=%.0f b=%.0f h=%.0f 面積=%.0f\n",
daikei[i][0], daikei[i][1], daikei[i][2], menseki);
}
printf("合計面積=%.0f", goukei);
return 0;
}
0016デフォルトの名無しさん
2009/05/21(木) 08:31:11[2] 問題文(含コード&リンク):CRUD操作及びファイル入出力の出来るデータベースを作成せよ。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 2009年05月23日12:00まで
ソートする直前までは作ったのですが、正しく動きませんでした。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9214.c
0017デフォルトの名無しさん
2009/05/21(木) 08:55:1600184
2009/05/21(木) 09:56:520019デフォルトの名無しさん
2009/05/21(木) 10:53:31[2] 問題文(含コード&リンク):
整数を入力していき、「0」が入力されたらその1 つ前までに入力された数値の
平均値を求めるプログラムを、while 文を用いて作成せよ。
ここでは最低1 つの0 以外の数値が入力されるとしてよい。
平均値は小数点以下2 桁まで表示すること。
[3.1] OS: Windows XP
[3.2] コンパイラ名とバージョン: Visual Studio 2005
[3.3] 言語: C++
[4] 期限:2009/5/21
[5] その他の制限:
0020デフォルトの名無しさん
2009/05/21(木) 11:10:10[2] 問題文(含コード&リンク):
正の整数nを入力し、1 から100 までの間にあるnの倍数をすべて表示す
ると共に、それらnの倍数の和を表示するプログラムを作成せよ。
例えば25を入力したら,その倍数である25, 50, 75, 100とそれらの和で
ある250が表示されることになる。
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン gcc
[3.3] 言語:C
[4] 期限: 2009年5月22日0:00まで
[5] その他の制限:以前にも書き込んだのですが、私の書き込みにミスがありましたのでもう一度書きます。よろしくお願いします。
0021デフォルトの名無しさん
2009/05/21(木) 11:23:13#include <iostream>
#include <iomanip>
int main(void)
{
int i, n, sum;
n = sum = 0;
while(1)
{
std::cin >> i;
if (i == 0)
break;
sum += i;
n++;
}
std::cout << std::fixed << std::setprecision(2) <<
(double)sum / n << std::endl;
return 0;
}
0022デフォルトの名無しさん
2009/05/21(木) 11:26:13#include <stdio.h>
int main(void)
{
int n, i, sum;
printf("正の整数nを入力せよ: ");
scanf("%d", &n);
sum = 0;
for(i = 1; i <= 100; i++)
{
if (i % n == 0)
{
printf("%d\n", i);
sum += i;
}
}
printf("%d\n", sum);
return 0;
}
0023デフォルトの名無しさん
2009/05/21(木) 12:02:10[2] 問題文(含コード&リンク):
次の無限等比級数の和を、各項を順に加算していくことにより求めるプログラムを書け。
1+(1/3)+(1/9)+(1/27)+.....
ただし、0.00001以下となる項を加えた時点で加算を終了することとする。
[3] 環境
[3.1] OS:WindowsXP
[3.2] gcc
[3.3] 言語: C
[4] 期限: 2009年5月22日12:50まで
[5] その他の制限:なし
よろしくお願いします。
0024デフォルトの名無しさん
2009/05/21(木) 12:06:59相当直さないと動かないぞ。
createData()見ただけでも、メモリ確保とかポインタの使い方が変。
002519
2009/05/21(木) 12:08:08#include <iostream>
#include <iomanip>
std::cout << std::fixed << std::setprecision(2) <<
など習ってないことが多いのでもう少し簡単にできないでしょうか?
#include <stdio.h>で書いてもらえるとありがたいです
追記で
実行例
整数を入力: 9
整数を入力: 3
整数を入力: 8
整数を入力: 10
整数を入力: 7
整数を入力: 3
整数を入力: 0
平均値は 6.67
0026デフォルトの名無しさん
2009/05/21(木) 12:34:54後出し氏ね
0027デフォルトの名無しさん
2009/05/21(木) 12:54:48それはC言語というものなのだよ
0028デフォルトの名無しさん
2009/05/21(木) 13:06:59#include <stdio.h>
int main()
{
int d, count = 0, sum = 0;
while (1) {
printf("整数を入力:"); scanf("%d",&d);
if (d == 0) break;
sum += d; count++;
}
printf("平均値は%.2lf\n",(double)sum/count);
return 0;
}
>[3.3] 言語: C++
って書いたら、当然C++で回答が書かれます
回答者に無駄な作業をさせないように依頼して下さい。
0029デフォルトの名無しさん
2009/05/21(木) 13:08:35メモリ確保の仕方だけで構いませんので、教えていただけないでしょうか?
0030デフォルトの名無しさん
2009/05/21(木) 13:12:50[2]問題文:
C++コードではiostream、iomanipを必ず使わなければならないことを
示す例を作れ。無い場合はその旨50字以内に日本語仮名交じり文で
記述せよ
[3]OS:Windows/コンパイラ:GCC on CygWin/言語C++
[4]本日中
困ってます。よろしくです。
0031デフォルトの名無しさん
2009/05/21(木) 13:25:23確保の仕方だけ教えたところで
ポインタ理解してなきゃ結局全部聞く羽目になるぞ
つか今ソース見たが、確保というより格納の仕方と言ったほうが正しいのかもしれん
>>30
アバウトすぎ
前後に問題あればそれも出した方が
問題の意図がわかるかもしれんが
0032デフォルトの名無しさん
2009/05/21(木) 13:58:20Create *Data;
Data = (Create *)malloc(sizeof(Create));
for(i=0;;i++){
Data[i].id = ID;
ID++;
glob_DB[i] = Data[i];
free(Data);
}
これが変だという事が理解できないと、どこから説明したらいいのかなと思う。
動的に確保するのではなく、固定で大きな配列を用意し、
動くプログラムを書く位の力はあるかい?
0033デフォルトの名無しさん
2009/05/21(木) 14:12:36mallocをループの中に入れた後、stdlib.hをインクルードしたところ警告は消えたのですが、
やはりそんなレベルの問題ではないのでしょうか?
0034デフォルトの名無しさん
2009/05/21(木) 14:19:31ありがとうございます。
以後気をつけます
0035デフォルトの名無しさん
2009/05/21(木) 14:29:48実行してみ?
PCが壊れる、ってことはないとは思うが自己責任でw
0036デフォルトの名無しさん
2009/05/21(木) 15:38:36油外おいしいです^^
0037デフォルトの名無しさん
2009/05/21(木) 16:08:41>mallocをループの中に入れた後、stdlib.hをインクルードしたところ警告は消えたのですが、
警告が出ているうちは、間違いを指摘してくれているので良いが、
警告が消えたからって、正しく動く訳じゃない。正しいロジックで書いてないと動きません。
createData()を例にとれば、
Data[i].id = ID;←これはまずい。確保した領域は一つしかない。ワープします。
glob_DB[i] = Data[i];←これもまずい(左右とも)
free(Data); ←せっかく格納したデータは何処へ行くだろうか?
「添え字を使ってアクセス」が何を意味し、何処を指すのかを理解する必要があるよ。
入力したデータは何処に格納するのか。関数内の一時的格納か、それとも処理終了まで保持するのか。
格納領域はどのタイミングで確保するのか。確保した格納データはどうやって管理するのか。
確保した領域は、どのタイミングで解放するのか。この辺をちゃんと考えてみる必要がある。
動的に領域確保するのが難しいなら、glob_DBで1000件程度配列で確保し、
正常に動くプログラムをまず作ってみると良い。
0038デフォルトの名無しさん
2009/05/21(木) 16:13:070039デフォルトの名無しさん
2009/05/21(木) 16:18:31[1] 授業単元:Cの基礎
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9215.txt
[3] 環境
[3.1] OS:XP
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限: 一週間
[5] その他の制限: while文かdo-while文を使い、なるべく簡単にお願いします。
0040デフォルトの名無しさん
2009/05/21(木) 16:35:59#include<stdio.h>
#include<math.h>
int main(void)
{
double si_1, si, x;
printf("実数 x : ");
scanf("%lf", &x);
si_1=1;
do
{
si=si_1;
si_1=(si+x/si)/2;
}
while(fabs(si_1-si)>=0.00001);
printf("sqrt(%f)=%f\n", x, si);
return 0;
}
0041デフォルトの名無しさん
2009/05/21(木) 16:38:20#include <stdio.h>
int main()
{
double sum = 0.0;
double e = 0.00001;
int x = 1;
double a;
while (1) {
a = 1.0 / x; sum += a;
if (a < e) break;
x *= 3;
}
printf("%.15lf\n", sum);
return 0;
}
0042デフォルトの名無しさん
2009/05/21(木) 17:35:01Create Read Update Delete
0043デフォルトの名無しさん
2009/05/21(木) 19:41:13授業単元アルゴリズム実習
osソラリス
言語 c
コンパイラ gcc
高さhが2で上底aと下底bが次のような値の台形4つの合計を求めるプログラムをfor文を使って作成せよ。
表示形式
台形(1)a=0、b=2^2、h=2、面積=
台形(2)a=2^2、b=4^2、h=2 面積=
台形(3)a=4^2、b=6^2、h=2 ,面積=
台形(4)a=6^2、b=8^2 h=2 面積=
4つの台形の面積の合計=
0044デフォルトの名無しさん
2009/05/21(木) 19:47:27[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9217.txt
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:cc
[3.3] 言語:C
[4] 期限:[2009年5月22日19:00まで]
[5] その他の制限:問題文と共に記述してあります.
0045デフォルトの名無しさん
2009/05/21(木) 19:53:23>>10 >>12 >>13
0046デフォルトの名無しさん
2009/05/21(木) 20:06:44#include <stdio.h>
int main(void)
{
int i, temp, s = 0;
for(i=0; i<4; i++) {
temp = 4 * i * i + 4 * (i+1) * (i+1);
printf("台形(%d)a=%d%s,b=%d^2,h=2,面積=%d\n", i+1, i*2, i?"^2":"", 2*(i+1), temp);
s += temp;
}
printf("4つの台形の面積の合計=%d", s);
return 0;
}
0047デフォルトの名無しさん
2009/05/21(木) 20:29:37わかってます。今度のは二乗の計算をしなくてはいけないので。。。
0048デフォルトの名無しさん
2009/05/21(木) 20:44:010049デフォルトの名無しさん
2009/05/21(木) 20:49:13再び質問させていただきます。
以下のコードの流れについて知りたのですがよく分かりません。
行ごとに簡単に解説してくれると助かります。よろしくお願いします。
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
Animations:nil context:nil];
[UIView setAnimationDuration:0.7];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:selfcache:YES];
if ( enabled )
[[UIApplication sharedApplication] sendAction:@selector(buttonPushed:)
to:target from:self forEvent:event];
[UIView commitAnimations];
0050デフォルトの名無しさん
2009/05/21(木) 20:53:590051デフォルトの名無しさん
2009/05/21(木) 20:58:39Objective-Cはスレ違い
0052デフォルトの名無しさん
2009/05/21(木) 21:09:19確かにそうなのですが、マイナーなので他に聞く場所がありません。
ここなら分かる方もいるのではないかと思い質問させていただきました。
0053デフォルトの名無しさん
2009/05/21(木) 21:17:21お引き取り下さい
0054デフォルトの名無しさん
2009/05/21(木) 21:24:27Objective-C [ObjC part:4];
http://pc12.2ch.net/test/read.cgi/tech/1239721860/l50
スレ立てるまでもない質問はここで 97刷
http://pc12.2ch.net/test/read.cgi/tech/1240877154/l50
0055デフォルトの名無しさん
2009/05/21(木) 21:27:07してくれればObjective-C/C++でもある程度は答えてくれる奴が
居そうな感じだが読みにくいコードベタ張りは論外。基本的には
専用スレがありそこが過疎ってなければそちらのほうで聞くのが無難
0056デフォルトの名無しさん
2009/05/21(木) 21:58:110057デフォルトの名無しさん
2009/05/21(木) 21:59:170058デフォルトの名無しさん
2009/05/21(木) 22:04:49>>41
0059デフォルトの名無しさん
2009/05/21(木) 22:13:31[2] 問題文(含コード&リンク):
(1)キーボードから2整数を読み込んで読み込んだ順に標準出力にそれらの
値の10進数表現をスペース文字で区切って、1行に書き出し改行する。
読み込んだ1番目の整数の値が1000でなければ、次の2整数を読み込み
同様に書き出す。1番目の値が1000のときプログラムの実行を終了する。
このような仕様を満たすプログラムを作成せよ。(do-whileループで作成)
(2)キーボードから3整数を読み込み、小さい順に出力するようなプログラム
を作成せよ。(目的が達成されればどのようなプログラムでも構わない。)
[3] 環境
[3.1] OS:XP
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:5月22日 13:00まで
[5] (2)はなるべく簡単なものでお願いいたします。できたら数パターン
教えてくだされば幸いです。
0060デフォルトの名無しさん
2009/05/21(木) 22:23:490061デフォルトの名無しさん
2009/05/21(木) 22:39:40(2)
#include <stdio.h>
int main(void)
{
int a, b, c;
scanf("%d%d%d", &a, &b, &c);
if(a < b) {
if(c < a) printf("%d %d %d", c, a, b);
else {
if(b < c) printf("%d %d %d", a, b, c);
else printf("%d %d %d", a, c, b);
}}
else {
if(c < b) printf("%d %d %d", c, b, a);
else {
if(c < a) printf("%d %d %d", b, c, a);
else printf("%d %d %d", b, a, c);
}}
return 0;
}
0062この板でいいの?
2009/05/21(木) 22:39:58質問があります。
ある資格試験の自動学習ソフト(将来的には自動学習ホームページ)を
作りたいと思っています。
そのための資料は既にあります。
A4で300頁程度で表、図もあります。
これを、
(1)順々に質問文をユーザに見せてから、回答ボタンをクリックすると答画面を示すモード
(2)樹系図的に内容を表示するモード
(3)画面の印刷を行うモード
を有して学習するソフトを作りたいのですが、どうしたらよいでしょうか?
とりあえず、試行的にテキストを貼り付けるだけで、質問画面と回答画面を表示できるソフトを
簡単に作れるようなものはないでしょうか?
ソフトを作れる人に作成を依頼するとどのくらい費用はかかるでしょうか?
よろしくお願いします。
0063 ◆1xScF1fQr2
2009/05/21(木) 22:51:13[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9218.txt
[3] 環境
[3.1] OS:Windows XP
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語:C
[4] 期限:2009年05月25日まで。
[5] その他の制限:階乗(n!)の計算とべき乗(xn)の計算には、再帰処理を使用する。
よろしくお願いします。
0064デフォルトの名無しさん
2009/05/21(木) 23:08:33HTML+JavaScriptが一番簡単そう。
そしてもしそうするならスレ違い。
0065123to
2009/05/21(木) 23:10:53[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
課題
0〜100の範囲で画面から入力された複数の数値の中で、最大値と最小値を
表示するプログラムを作成する。
○ソフトウェア構成要求
最大値と最小値はmain関数以外の一つの関数の中で求める(サブルーチン化する)。
○動作要求仕様
-1が入力された場合は入力の終わりとする。
入力された数値を記憶する配列の要素数は10とし、
10個まで入力された場合は-1を入力されなくても最大値と最小値を出力する。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン:Borland C++ Compiler 5.5
[3.3] 言語: C
[4] 期限: 2009年5月25日12:00まで
[5] その他の制限:できるだけ簡単なもの
0066デフォルトの名無しさん
2009/05/21(木) 23:12:35もしかして、その課題の後に自由課題ある?
0067デフォルトの名無しさん
2009/05/21(木) 23:17:52有料なら考えてもいいが?
問題はどうやって連絡を取るかなんだが。
0068デフォルトの名無しさん
2009/05/21(木) 23:20:25>>63
#include <stdio.h>
#include <math.h>
#define PI 3.14159
double power(double x, long int n);
double sine(double x);
long int kaijou(long int n);
int main(void){
double sinx,sinf,x=0.0,dif;
printf("+-------------------------------------+\n");
printf("| x | sine(x) | sin(x) | dif |\n");
printf("+-------------------------------------+\n");
do{
sinx=sine(x);
sinf=sin(x);
dif=sinx-sinf;
printf("| %.4lf | % .4lf | % .4lf | %.4lf |\n",x,sinx,sin(x),dif);
x+=PI/8;
}while(x<2*PI);
printf("+-------------------------------------+\n");
}
0069デフォルトの名無しさん
2009/05/21(木) 23:21:12long int kaijyou(long int n){ //再帰処理
if(n==0){
return 1.0;
}
else{
return n*kaijyou(n-1); //再帰処理実行
}
}
double sine(double x){
long int i, n=5;
double ans=0.0;
for(i=0;i<n;++i){
ans+=power(-1,i)*power(x,2*i+1)/kaijyou(2*i+1);
}
return ans;
}
0070デフォルトの名無しさん
2009/05/21(木) 23:22:15dif=sinx-sinf;
printf("| %.4lf | % .4lf | % .4lf | %.4lf |\n",x,sinx,sin(x),dif);
x+=PI/8;
}while(x<2*PI);
printf("+-------------------------------------+\n");
}
long int kaijyou(long int n){ //再帰処理
if(n==0){
return 1.0;
}
else{
return n*kaijyou(n-1); //再帰処理実行
}
}
0071デフォルトの名無しさん
2009/05/21(木) 23:23:11double sine(double x){
long int i, n=5;
double ans=0.0;
for(i=0;i<n;++i){
ans+=power(-1,i)*power(x,2*i+1)/kaijyou(2*i+1);
}
return ans;
}
double power(double x, long int n){ //再帰処理
if(n==0){
return 1.0;
}
else{
return power(x,n-1)*x; //再帰処理実行
}
}
0072デフォルトの名無しさん
2009/05/21(木) 23:24:200073デフォルトの名無しさん
2009/05/21(木) 23:27:130074デフォルトの名無しさん
2009/05/21(木) 23:28:59#include <stdio.h>
#include <math.h>
int fac(int i) { return i == 1 ? 1 : i * fac(i-1); }
double mypow(double x, int n) { return n == 0 ? 1 : x * mypow(x, n-1); }
double sine(double x)
{
int i, flg = 1;
double ret = 0;
for(i=0; i<5; i++, flg *= -1) ret += mypow(x, i*2+1) / fac(i*2+1) * flg;
return ret;
}
int main(void)
{
int i;
puts("+----------+----------+----------+----------+----------+");
puts("|x(degree) |x(radian) | sine(x) | sin(x) | dif |");
puts("+----------+----------+----------+----------+----------+");
for(i=0; i<=360; i+=15) {
double r = i * M_PI / 180;
double s1 = sine(r), s2 = sin(r);
printf("|%-10d|%8.4f |%8.4f |%8.4f |%8.4f |\n", i, r, s1, s2, fabs(s1-s2));
}
puts("+----------+----------+----------+----------+----------+");
return 0;
}
0075デフォルトの名無しさん
2009/05/21(木) 23:31:41// gcc --input-charset=cp932 --exec-charset=cp932
#include <stdio.h>
int main() {
int i;
float daikei[][3] = {
0,2,2,
2,4,2,
4,6,2,
6,8,2,
}, menseki, goukei = 0.0;
for(i=0; i<sizeof(daikei)/sizeof(daikei[0]); i++) {
menseki = (daikei[i][0]*daikei[i][0] + daikei[i][1]*daikei[i][1]) * daikei[i][2] / 2.0f;
goukei += menseki;
printf("(%d)a=%.0f^2 b=%.0f^2 h=%.0f 面積=%.0f\n",
i, daikei[i][0], daikei[i][1], daikei[i][2], menseki);
}
printf("合計面積=%.0f", goukei);
return 0;
}
0077デフォルトの名無しさん
2009/05/21(木) 23:41:30http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9219.c
ついでに自由課題も。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9220.c
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9221.c
中部大学工学部情報工学科の岡崎明彦教授の講義ね。ぐぐったらすぐ出てきた。
0078デフォルトの名無しさん
2009/05/21(木) 23:46:59>>68->>71は19年度の同じような課題で教授が殆ど作ったやつ。
0079デフォルトの名無しさん
2009/05/21(木) 23:50:24ほんとだC言語応用 マクローリン展開でみつかった。
意外と簡単に見付かるんだね。
008079
2009/05/21(木) 23:58:130081デフォルトの名無しさん
2009/05/22(金) 00:00:12マクローリン展開って2radぐらいまでならそんなに誤差無いんだな
意外だった
0082デフォルトの名無しさん
2009/05/22(金) 00:09:130083デフォルトの名無しさん
2009/05/22(金) 00:10:09「sinxの近似値を5項程度によるマクローリン展開で求める関数」でぐぐったら
2つめに今年のが出てきた
0084デフォルトの名無しさん
2009/05/22(金) 00:13:21浮動小数点は積み残し誤差があるから計算して出たそれぞれの
項をソートして小さい方から順に足した方が誤差が少ないぞ
やってみ
0085デフォルトの名無しさん
2009/05/22(金) 00:16:01欲しいのは高速動作だ
0086デフォルトの名無しさん
2009/05/22(金) 00:19:28x86FPUにもFSINあるしな
ここは宿題スレだからマクローリン展開をコンピューターに
やらせてみましょうって事なんじゃない?
0087デフォルトの名無しさん
2009/05/22(金) 00:26:38自分としては>>77の方が分かりやすいけど。
0088デフォルトの名無しさん
2009/05/22(金) 02:37:41お手軽にするならゲームツクール系でいいと思う
0089デフォルトの名無しさん
2009/05/22(金) 02:53:17メイン関数のループが迂遠な感じだな、77のは。
0090デフォルトの名無しさん
2009/05/22(金) 03:02:10#include <stdio.h>
void max_min(int *data, int num, int *max, int *min){
int lmax = 0, lmin = 100;
for(num--; num >= 0; num--) {
if(data[num] > lmax) lmax = data[num];
if(data[num] < lmin) lmin = data[num];
}
*max = lmax;
*min = lmin;
}
int main() {
int i, max, min, data[10];
for(i=0; i<10; i++) {
printf("%d:",i+1);
if(scanf("%d", &data[i]) != 1) {
scanf("%*s"); i--; continue;
}
if(data[i] == -1) break;
if(data[i] < 0 || data[i] > 100) i--;
}
max_min(data, i, &max, &min);
printf("max=%d min=%d\n", max, min);
return 0;
}
0091kenco
2009/05/22(金) 03:06:33[2] 問題文(含コード&リンク):非線型方程式 f(x)=x^n-a=0 を考える。nは学生番号の下一桁の数字に2を加えたもの。aは誕生日の西暦の下2桁とする。
f(x)=0の実数解の近似値xを以下の条件を満足させる精度でニュートン法を用いて求めよ。
|f(x)-0|<1.0*10^(-8)
[3] 環境
[3.1] OS: Windows vista
[3.2] コンパイラ名とバージョン: C-Compiler
[3.3] 言語: どちらでも可
[4] 期限: 23日まで
[5] その他の制限: なるべく簡単なもので作ってください。
0092デフォルトの名無しさん
2009/05/22(金) 03:30:54http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9222.txt
0093デフォルトの名無しさん
2009/05/22(金) 04:21:56[2] 問題文(含コード&リンク):
行列A={{0,1,2},{3,4,5},{6,7,8}}
行列B={{100,200,300},{400,500,600},{700,800,900}}
のとき、A+Bを表示するプログラムを作れ
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン:visual studio
[3.3] 言語:C++
[4] 期限: 5月25日
[5] その他の制限: 初心者に分かりやすいようにお願いします
0094デフォルトの名無しさん
2009/05/22(金) 04:59:18#define N (8.0 + 2.0)
#define A 82.0
#define EPS 1e-08
#define LIMIT 50 /* 計算打ち切り回数 */
#include <stdio.h>
#include <math.h>
double f(double x)
{
return pow(x, N) - A;
}
double g(double x)
{
return N * pow(x, N - 1.0);
}
int main(void)
{
double x = 1.0, dx;
int i;
for (i = 0; i < LIMIT; i++) {
dx = x;
x -= f(x) / g(x);
if (fabs(x - dx) < fabs(dx) * EPS) {
printf("解 = %.8f\n", x);
break;
}
}
if (i == LIMIT)
printf("収束しませんでした\n");
return 0;
}
0095デフォルトの名無しさん
2009/05/22(金) 05:22:17http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9223.txt
0097デフォルトの名無しさん
2009/05/22(金) 14:46:03[2] 問題文:10以上の種類の品物(果物など)を、その数が多い順にソートするプログラムを
「バブルソート」を用いて作成せよ。
ソート結果の表示にはどの品物が何個かも表示させること。
品物の種類・個数は任意とするが、なるべくばらけさせること。
品物が同じ個数だった場合の順番は特に指定しない。
[3] 環境
[3.1] Linux
[3.2] gcc
[3.3] 言語:C
[4] 期限:2009/5/25まで
[5] その他の制限:特に無し
0098デフォルトの名無しさん
2009/05/22(金) 16:04:42#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define numberof(s) (sizeof(s) / sizeof(s[0]))
typedef struct { char *name; int number;} ITEM;
ITEM item[] = {
{"めんたい味", 0},{"コーンポタージュ味", 0},{"なっとう味", 0},{"チーズ味", 0},{"テリヤキバーガー味", 0},
{"サラミ味", 0},{"やさいサラダ味", 0},{"チキンカレー味", 0},{"とんかつソース味", 0},{"エビマヨネーズ味", 0},
{"たこ焼味", 0},{"チョコレート味", 0},{"キャラメル味", 0},{"ココア味", 0},{"ぶたキムチ味", 0},{"牛タン塩味", 0}
};
int main()
{
int i, j;
srand(time(NULL));
for (i = 0; i < numberof(item); i++) {
item[i].number = (int)((rand() / ((double)RAND_MAX+1.0f)) * 99) + 1; printf("%s, %d\n",item[i].name,item[i].number);}
printf("---------------------------------------------------\n");
for (i = 0; i < numberof(item) - 1; i++) {
for (j = numberof(item) - 1; j > i; j--) {
if (item[j].number > item[j - 1].number) {ITEM tmp = item[j]; item[j] = item[j - 1]; item[j - 1] = tmp;}
}
}
for (i = 0; i < numberof(item); i++) printf("%s, %d\n",item[i].name,item[i].number);
return 0;
}
0099デフォルトの名無しさん
2009/05/22(金) 17:57:00うまい棒?
0100デフォルトの名無しさん
2009/05/22(金) 19:30:110101デフォルトの名無しさん
2009/05/22(金) 19:35:54リンゴの品種名だけでおk
0102デフォルトの名無しさん
2009/05/22(金) 20:12:26ジョナゴールド,つがる,デリシャス,ふじ,旭,王林,紅玉,国光,秋映,祝,
世界一,千秋,北斗,陽光,陸奥
20種類、ごく一部を除いて、どんなリンゴかはわからないw
0103デフォルトの名無しさん
2009/05/22(金) 20:32:150104デフォルトの名無しさん
2009/05/22(金) 21:00:02見逃した。済まない。
ー1 +7
さんさ,高嶺,スターキングデリシャス,ハックナイン,新世界,藤牧,シナノレッド
0105デフォルトの名無しさん
2009/05/22(金) 21:27:110106デフォルトの名無しさん
2009/05/22(金) 21:30:45は?
0107デフォルトの名無しさん
2009/05/22(金) 21:36:31依頼はバブルソートとあるが、
>>98はクイックソートなのか?
0108デフォルトの名無しさん
2009/05/22(金) 21:37:18ttp://www.bohyoh.com/CandCPP/C/Library/qsort.html
0109デフォルトの名無しさん
2009/05/22(金) 22:25:48何を寝ぼけた事を言ってんの?
0110デフォルトの名無しさん
2009/05/22(金) 23:06:33ヒューマンインターフェースとプログラミング
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9224.txt
[3] 環境
[3.1] OS: (Windows/Linux/等々)
Windows
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
Visual C++ 2008 Express Edition
[3.3] 言語: (C/C++/どちらでも可 のいずれか)
C++
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
5/25
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
なし
よろしくおねがいします。具体的にあげられてる修正ポイントだけでもかまいません。
0111デフォルトの名無しさん
2009/05/22(金) 23:15:470112デフォルトの名無しさん
2009/05/22(金) 23:20:32気づいた一点だけ。
そこまでコンソールのgetsにこだわる必要は無いと思う。
たとえばトリガーキーを押すとモードメニューに入って、モードを選んで、開始。
そんな感じにならないかねぇ。
MYGETSがちょっと不細工に感じるのはまちがってるかなぁ。。。
あとプロポーショナルフォントを使うのは筋違いだと思う。
こんなとこかな。
0113デフォルトの名無しさん
2009/05/23(土) 00:03:44WM_DESTROYでfpのnullチェックしてないので、モードに入る前に終了すると例外。
WM_QUITを受け取ったGetMessageは0を返すので、MyGetsはTRUEを返し、再びメッセージ待機(Windowがないので終われない)。
基本的に待機するような処理は別スレッドに作るべき。
また待機スレッドのSleepは本物のSleepではなくEventをWaitし、終了要求などではそのEventをシグナル状態にする。
じゃないとSleepが完了するまで終われなくなる。
0114113
2009/05/23(土) 00:08:34ちょっと書き方おかしかったかも。要は反応待ちに入る以前のキー押下は棄てないかんってこと。
0115デフォルトの名無しさん
2009/05/23(土) 00:24:38[2] 問題文
今テキストファイルAが1つとBが10個あるとする。
Aには
haru
natsu
aki
fuyu
とかかれ
Bにはそれぞれのテキストに以下のような文字列がかかれている
wheiowfjhoiejwio2121oij3io12ji2oj3io2j3oijo
iouaiojoiajwioejio121j3oi1j2iojlajia
これらをまとめ
テキストCに
aki[tab]wheiowfjhoiejwio2121oij3io12ji2oj3io2j3oijo[改行]
natsu[tab]iouaiojoiajwioejio121j3oi1j2iojlajia[改行]
になるようなプログラムをかけ
ただし。Bのそれぞれのテキストは非常に長くても大丈夫にせよ。
[3] 環境 [3.1] OS:linux
[3.2] gcc
[3.3 C
[4] 期限: 5/23
0116デフォルトの名無しさん
2009/05/23(土) 00:27:50問題文が意味不明
まとめ方のルールを明確にしないと誰も解けないよ
0117デフォルトの名無しさん
2009/05/23(土) 00:46:41haru\tBのテキスト1つ目の中身\n
natsu\tBのテキスト2つ目の中身\n
aki\tBのテキスト3つ目の中身\n
のように書き込んでほしいのですが。
Bのテキストが非常に長いんです。1テキストファイル20kバイトくらいでして
0118デフォルトの名無しさん
2009/05/23(土) 00:55:31Bのテキストファイルが10個ある、と言うことなら、B01〜B10ってしていいかい?
Aのテキスト1行目と、B01の全体をタブで繋いで1行にし、Cに出力。
Aのテキスト2行目と、B02の全体をタブで繋いで1行にし、Cに追記。
これをB10まで繰り返す。これであってる?
0119デフォルトの名無しさん
2009/05/23(土) 00:59:320120デフォルトの名無しさん
2009/05/23(土) 01:02:08要は、何をして欲しいかを明確にする事。
0121デフォルトの名無しさん
2009/05/23(土) 01:05:28後、期限が今日なら、締切時間も書いておいた方が良いかな。
0122デフォルトの名無しさん
2009/05/23(土) 01:12:37だ〜か〜ら〜、〜のようにっていう表現は問題文にならないって。
テキストAとやらには4行しかないのにテキストBとやらは延べ10行あるんだろ?
5行目以降はどう纏めるんだい?
0123デフォルトの名無しさん
2009/05/23(土) 01:16:31精度を上げるには「timeBeginPeriod〜timeEndPeriod」や「QueryPerformanceCounter」を使う手がある。
ビジーループにしてGetAsyncKeyStateでキー状態を検知すればメッセージ処理のオーバーヘッドは避けられると思う。
スレッドの優先度を上げるという方法もあるといえばある。
0124デフォルトの名無しさん
2009/05/23(土) 01:18:33そうです。
Bのテキストは長いんですけど1行です。
一番最後に改行がはいるだけです。
0125デフォルトの名無しさん
2009/05/23(土) 01:25:41ファイル名は適当に決めておいていいかい?
>>122の指摘する危惧だけど、Aには10行データがある前提でいいかい?
0126デフォルトの名無しさん
2009/05/23(土) 01:45:56Bは1行に10行分くらい文字列がならんでるとおもってください。
で、Bは4ファイルあるとすればちょうどいいかと。
0127デフォルトの名無しさん
2009/05/23(土) 01:53:11なんというか、まあ、久しぶりに絶句させてもらったよ。
課題が出されたんだよな?
それを一字一句変えずに、「全部」書けよ。
お前の頭の中ではちょうどいいかも知れんが、
お前が今までのやり取りではっきりさせたのは
ファイルAとやらが4行あるってことだけだぞ?
0128デフォルトの名無しさん
2009/05/23(土) 01:55:020129デフォルトの名無しさん
2009/05/23(土) 01:56:48説明しにくい。
0130デフォルトの名無しさん
2009/05/23(土) 01:58:53そこを無視して説明しろよ氏ね。
0131デフォルトの名無しさん
2009/05/23(土) 01:59:100132デフォルトの名無しさん
2009/05/23(土) 02:03:59は?お前の説明は要らない。
課題をそのまま書き出せよ。
あとな、1行の長さなんてどうだって良いんだよ。
「一行の長さは不定です」
「あ、っそ」
で済むことなんだよ。
重要なのは、
「プログラムの実行前にどんなデータがあって」
「プログラムの実行後にどんなデータがあるか」
ってことなんだよ。
ファイルAには>>115にあるように4行分のデータがある。
これは分かった。
んでファイルBってのはなんだよ?
0133デフォルトの名無しさん
2009/05/23(土) 02:12:120134デフォルトの名無しさん
2009/05/23(土) 02:12:460135デフォルトの名無しさん
2009/05/23(土) 02:17:53>>126
1行に10行分文字列があるって意味がわからんが。
2000文字位あると勝手に理解するけどいいね。
ソースをコンパイルして実行する環境はあるのか?
0136132
2009/05/23(土) 02:19:24俺は>>133は>>115でないって信じたいw
>>133
とりあえず、問題を明らかにしようか。
ファイルBは何個か存在する。
だからここでは後ろに番号をつけるとする。
例えば、ファイルBが3つある場合、
ファイルBのそれぞれをB1,B2,B3としよう。
そして、ファイルBの行番号をアンダースコアの後に数字をつけることで表そう。
例えばB1の1行目はB1_1、2行目はB1_2となる。
ついでにファイルAの一行目はA_1と表すようにしよう。
んで、ここからが本題。
ファイルCを作るにあたって、
A_1と同じ行になるファイルBの行は何か?選択肢から選べ
選択肢1:
A_1 B1_1
A_1 B2_1
A_1 B3_1
・・・
A_1 Bi_1
選択肢2:
A_1 B1_1
A_1 B1_2
A_1 B1_3
・・・
A_1 B1_j
選択肢3:上二つは違います。
0137デフォルトの名無しさん
2009/05/23(土) 02:20:330138デフォルトの名無しさん
2009/05/23(土) 02:26:57今の内に課題の条件をキチンと説明しておかないと
誰かが早とちりしてプログラムを書いてしまって後出しで
条件を付けても誰も相手にしてくれないかもしれんぞ
今までそういう事が何回もあった
後出し条件というのは相当嫌われる
0139デフォルトの名無しさん
2009/05/23(土) 02:28:31http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9225.txt
0140デフォルトの名無しさん
2009/05/23(土) 02:30:44これが60kバイトくらいです
最大で778kバイトくらいまで
0141デフォルトの名無しさん
2009/05/23(土) 02:34:18だ〜か〜ら、長さはどうだっていい。
ファイルBは全部でいくつある?
ファイルB全ては1行しかないんだな?
0142デフォルトの名無しさん
2009/05/23(土) 02:34:520143デフォルトの名無しさん
2009/05/23(土) 02:36:160144デフォルトの名無しさん
2009/05/23(土) 02:37:17一致してるなら可変か固定か?
固定なら何個だ?
0145デフォルトの名無しさん
2009/05/23(土) 02:38:15>>124 >>126
0146デフォルトの名無しさん
2009/05/23(土) 02:40:17と、思いたい。割と本気で。
0147デフォルトの名無しさん
2009/05/23(土) 02:40:560148デフォルトの名無しさん
2009/05/23(土) 02:43:13Bが10個あると書いてあるのになんで一つだけなんだ?
10個ともまとめて貼れよ
Aはわかったらか
0149デフォルトの名無しさん
2009/05/23(土) 02:49:14Bは全て1行(改行一つ)だが、>>115主観で言うと通常の1行の10倍あるよ。
まぁ、エスパーするだけして違ってたらイヤだから手はつけんが。
0150デフォルトの名無しさん
2009/05/23(土) 02:52:37これを試してみてくれ。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9226.txt
ファイル名は"A","B01"〜"B04","C"としているが、適切な名前にするか、
実行時に対象ファイルをその名前にしてくれ。
で、要求とどう違うか書いてくれ。
0151デフォルトの名無しさん
2009/05/23(土) 02:57:170152デフォルトの名無しさん
2009/05/23(土) 02:59:48落ち着いて、相手に分かる言葉で頼む。
0153デフォルトの名無しさん
2009/05/23(土) 03:04:061つだけ聞かせてくれ。
これは、学校の講義で宿題として出されたものなのか?
自分がこういうことをやりたいだけなのか?
0154デフォルトの名無しさん
2009/05/23(土) 03:04:28を4回繰り返してテキストにとる
0155デフォルトの名無しさん
2009/05/23(土) 03:07:070156デフォルトの名無しさん
2009/05/23(土) 03:14:53もうあれだ、system関数でシェルスクリプト呼んじゃえ。
cat B0[1-4] | paste A - > C
でお望みのものができるから。
0157デフォルトの名無しさん
2009/05/23(土) 04:03:230158デフォルトの名無しさん
2009/05/23(土) 04:06:05この問題もわからないので教えてください
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
(1)[0,1]の一様乱数x,yを発生させるプログラムを作れ
(2)[0,1]の一様乱数x,yを発生させ、x^2+y^2<1となる確立を求めろ
(一様乱数を発生させる試行を繰り返し、(上式を満たす回数)/(試行回数)から確立を求める)
またπの数値を求めろ
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン:visual studio
[3.3] 言語:C++
[4] 期限: 5月25日
宜しくお願いします
0159デフォルトの名無しさん
2009/05/23(土) 08:37:50http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9227.txt
標準関数std::rand()はやや性能が悪いため
コンピュータ・アルゴリズム事典(奥村晴彦著)より乱数の改良を
行うようにした
0160デフォルトの名無しさん
2009/05/23(土) 12:02:48#include <stdio.h>
int main() {
int n, c;
printf("2進数を1つ以上入力してください:最後は1000\n");
do {
for(n = 0; ;) {
c = getchar();
if (c == '0' || c == '1') {
n <<= 1;
n |= (c == '1') ? 1 : 0; /* 1/0 を入力 */
} else if (c == EOF)
return 1;
else
break;
}
printf("%d ", n);
if(c == '\n') puts("");
} while(n != 0x8); /* 1000 (binary) */
return 0;
}
0161デフォルトの名無しさん
2009/05/23(土) 12:13:320162デフォルトの名無しさん
2009/05/23(土) 12:19:46[2] 問題文: 10から110までの乱数を100個作り、
同時ににアスキーコードで文字に変換して小文字だけを大文字にせよ
[3] 環境
[3.1] OS:Windows XP
[3.2] コンパイラ名とバージョン: 富士通
[3.3] 言語:C言語
[4] 期限:[2009年05月26日h:16:30まで]
[5] その他の制限: アスキーコードやら何やら今一良く分かりません。
よろしくお願いします。
0163デフォルトの名無しさん
2009/05/23(土) 12:44:55#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
int main(void)
{
int i, x;
int max=110, min=10;
for(i=0;i<100;i++)
{
x=rand()%(max-min+1)+min;
if(islower(x)) x=toupper(x);
printf("%c", x);
}
return 0;
}
0164デフォルトの名無しさん
2009/05/23(土) 12:53:400165デフォルトの名無しさん
2009/05/23(土) 13:00:49>>163
種蒔かんで良いのか?
0166110
2009/05/23(土) 13:05:38>>113
>>123
アドバイスありがとうございます。
課題中で具体的に示されてある修正点だけでいいので、どなたかプログラムを修正してもらえないでしょうか?
提出期限は明後日なのですが、実際にプログラムを動かして色々と考察を書かないといけないので・・
よろしくお願いしますm( _ _)m
0167デフォルトの名無しさん
2009/05/23(土) 13:20:58x=rand()/(RAND_MAX+1.0)*(max-min+1)+min;
0168デフォルトの名無しさん
2009/05/23(土) 17:07:20// Usage: my_paste a1 b1 b2 b3 b4 ... > c1
// a: 行数はb(max)行 bの数と一致しない場合は途中まで処理する。
// b: 行数は1行のみ。改行で終わる。サイズは大きくても良い。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[]) {
FILE *inA, *inB, *outC = stdout;
char bufA[80]; // ファイルA読込用(1行を読込めるサイズが必要)
char bufB[256]; // ファイルB読込用(複数回に分けて読み込むので適当で良い)
int i, readsize;
if(argc < 3) return -1;
inA = fopen(argv[1], "r");
if (inA == NULL) { fprintf(stderr, "Can't open %s\n", argv[1]); exit(1); }
for (i = 0; i < argc-2; i++) {
inB = fopen(argv[i+2], "r");
if (inB == NULL) { fprintf(stderr, "Can't open %s\n", argv[i+2]); break; }
// Aを1行読込み、改行を取り除き、末尾にTabをつけてCに出力
if(fgets(bufA, sizeof(bufA), inA) == NULL) { fclose(inB); break; }
bufA[strlen(bufA) - 1] = 0;
fprintf(outC, "%s\t", bufA);
// Bをバッファサイズ単位で読込み、Cに追記する(必要な回数繰返す)
while ((readsize = fread(bufB, 1, sizeof(bufB), inB)) > 0) {
fwrite(bufB, 1, readsize, outC);
}
fclose(inB);
}
fclose(inA);
return 0;
}
0169デフォルトの名無しさん
2009/05/23(土) 17:18:34[3] 環境
[3.1] OS: (Windows/Linux/等々) linux
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) gcc
[3.3] 言語: (C/C++/どちらでも可 のいずれか) C
[5] その他の制限
問題文のプログラムはls -aslを実行するプログラムである。これを参考にオプション -a -F -l -dを引数とした場合に
lsコマンドと同じ動作をするようなプログラムmylsを作れ。
・statシステムコールではなくlstatシステムコールを用いる
・オプションは-aといった引数に続けて指定、-aFl、-laといった複数オプションにも順不同に対応
・myls - aといった場合にはUsageを表示する
・UID、GIDは数字のままでいい
オプション指定にgetopt関数を使って
while((option = getopt(argc, argv, "aFld")) != -1){
switch (option){
case...
って書こうとしてるんだけど、case 'a':を書こうとした時に下にあるvoid関数のどの部分で
ls -aと同じ動作をしているのかが分からない。どなたかお願いします。
0170デフォルトの名無しさん
2009/05/23(土) 17:40:37http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9210.txt
0172デフォルトの名無しさん
2009/05/23(土) 18:58:19[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9229.txt
[3] 環境
[3.1] OS:Windows XP
[3.2] コンパイラ名とバージョン:visual studio
[3.3] 言語:C++
[4] 期限: 5月25日
[5] その他の制限:条件の判定にif(1.0!=(1.0+e))のようなif文を用いる
eはεのこと
よろしくお願いします。
0173デフォルトの名無しさん
2009/05/23(土) 19:13:25[2]問題文(含コード&リンク)
問7-6
12x12のセルを持つ迷路がある。
スタートからゴールまでの最短経路を探したい。
(1)フローチャートを書け。
(2)実際に最短経路を調べ、表示するプログラムを書け。
ヒント
迷路は二次元配列で出来ている。
スタートやゴールのセル、壁のセルは最初は分からないようになっている。
手順としてはスタート地点の探索→経路の探索→バックトレースによる最短経路の探索、と行えばいい。
[3]:環境
[3.1]OS:XPsp2
[3.2]コンパイラ名とバージョン:gcc
[3.3]言語:C
[4]期限:5月26日8:00
[5]その他の制限:ソースコードにはしっかりコメントを記述すること、と言われました。
また迷路を生成するプログラムは無くても良いそうです。
C言語に関しては配列を学んだ所までです。(構造体やポインタはまだやってません。)
最悪フローチャートだけでも構いません。よろしくお願いします。
0174デフォルトの名無しさん
2009/05/23(土) 19:19:430175デフォルトの名無しさん
2009/05/23(土) 19:20:11#include <stdio.h>
#include <float.h>
#include <math.h>
int main() {
double e1, e2;
unsigned int n;
e1 = 1.0;
printf("%.15e %.15e\n", DBL_MIN, DBL_EPSILON);
for(n=1; n<4294967295u; n++) {
e2 = e1 / 10.0;
if(1.0 == (1.0 + e2)) break;
e1 = e2;
}
printf("%.15e %d\n", e1, n-1);
}
0176173
2009/05/23(土) 19:35:12言葉足らずで申し訳ありません……
迷路探索のソースはいくつか探すことが出来たのですが、
更に最短経路を探すものが見つからなくて今回お願いしました……
0177デフォルトの名無しさん
2009/05/23(土) 19:45:01普通の迷路なら経路はただ一つなんじゃない?
経路が複数あるって、巡回路の最適解を求めるような問題?
0178173
2009/05/23(土) 19:57:20上手く言えませんが壁の配置によっては経路が複数あります
袋小路とかも含めて総当たりで経路を調べる、のだとしたら巡回路の問題なのかもしれません
すみません、あまりよくわかってません……
0179デフォルトの名無しさん
2009/05/23(土) 20:01:59再起関数で、深さをカウントしていって、144段(縦*横)以上になったら打ち切れば良いよ。
で手数をへらして検索。
0180デフォルトの名無しさん
2009/05/23(土) 20:48:53最短経路が必要な場合は、2DRPGの最短移動アルゴリズムを使えばいいよ。
12x12の配列Aをワークとして用意する。型はintでいいや。
Aはすべて-1で初期化しておく。
まずスタート地点の決定。これは総当たりだから省略。
現在の探索深度を示すワーク int depth を用意して0に初期化する。
さて探索だけど、
1.スタート地点を現在値nowPositionに設定して、それに対応するAに0を代入する。
2.Aを全探索して、値がdepthになっているものがあれば、
その上下左右(斜めも移動できるなら斜めも)に移動可能かどうかを
調べる。移動可能で、かつその位置に対応するAが-1なら、その位置に
depth+1を書き込む。
移動可能な位置がゴールなら終了。4へ。
3.A全体を操作し終わるまで調べて、ひとつもdepthがなければ終了。ゴールには到達できない。
1つでもdepthがあれば、++depthして、2を繰り返す。
4.ここからが最短経路探索。
まずゴールには到達しているから、ゴールのdepthは分かってる。
そこから 上下左右のAの値が depth-1 になっている位置が最短経路。
複数ある場合の処理は好きなようにすればいいが、今回は単純に最初に
みつかった場所へ移動すればいいだろう。
5.これを繰り返してスタートに到達するまで続ける。なおスタートには必ず到達できる。
0181デフォルトの名無しさん
2009/05/23(土) 20:51:41すまん
×1.スタート地点を現在値nowPositionに設定して、それに対応するAに0を代入する。
○1.スタート地点に対応するAに0を代入する。
0182デフォルトの名無しさん
2009/05/23(土) 20:55:26犬を生きたまま仰向けで四肢を固定し、毛を剃って電気メスで腹を切る。
肋骨をノコギリで切って、心臓にいろいろな電気信号を与えて生体の反応を調べる。
もちろん全身麻酔はしてるけど、生体の反応を損ねないようにギリギリの量にしてるから、ピクピク動いてた。
0183デフォルトの名無しさん
2009/05/23(土) 21:12:16>>173
>手順としてはスタート地点の探索→経路の探索→バックトレースによる最短経路の探索、と行えばいい。
を満たせなくね?
0184デフォルトの名無しさん
2009/05/23(土) 21:21:39予め指定がないと、何処から始めたら良いものやら。
0185デフォルトの名無しさん
2009/05/23(土) 21:34:530186デフォルトの名無しさん
2009/05/23(土) 21:35:20そうでなかったらうーん
0187デフォルトの名無しさん
2009/05/23(土) 21:53:30やってみた
基本的に >>180 の内容
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9230.c
0188デフォルトの名無しさん
2009/05/23(土) 22:19:36「構造体やポインタはやってない」の制限にひっかかってるよw
0190187
2009/05/23(土) 22:24:36>>188 の指摘を受けて >>187 の修正版
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9231.c
0192175
2009/05/24(日) 01:02:49#include <stdio.h>
#include <float.h>
#include <math.h>
int main() {
double e1, e2;
unsigned int n;
e1 = DBL_MIN;
printf("%.15e %.15e\n", DBL_MIN, DBL_EPSILON);
for(n=1; n<4294967295u; n++) {
e2 = e1 * 10;
if(1.0 != (1.0 + e2)) break;
e1 = e2;
}
printf("%.15e %d\n", e1, n-1);
}
0194デフォルトの名無しさん
2009/05/24(日) 13:51:50[2] 問題文(含コード&リンク):
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9232.txt
[3] 環境
[3.1] OS:Windows XP
[3.2] コンパイラ名とバージョン:visual studio
[3.3] 言語:C++
[4] 期限: 5月26日朝
[5] その他の制限:よろしくおねがいします
0195デフォルトの名無しさん
2009/05/24(日) 15:46:05ありがとうございます。
0196デフォルトの名無しさん
2009/05/24(日) 16:44:53なんでうpろだ使ったんだwwwww
0197デフォルトの名無しさん
2009/05/24(日) 16:57:13うけたwwwww
0198デフォルトの名無しさん
2009/05/24(日) 17:51:420199デフォルトの名無しさん
2009/05/24(日) 18:47:24あったのであれば、教えてもらいたいです。
0200194 の心の声
2009/05/24(日) 19:38:49ろだにあげておくとweb検索で引っかかりにくいし、
どういう問題を依頼したかスレのログに残らないから。
そんな事も分からないのに問題解けるのかよw
0201デフォルトの名無しさん
2009/05/24(日) 19:41:44[2] 問題文(含コード&リンク):
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9233.txt
[3] 環境
[3.1] OS: (Windows/Linux/等々)
Linux
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
gcc
[3.3] 言語: (C/C++/どちらでも可 のいずれか)
C言語
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
5/26日午前9時
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
ポインタ配列まで習ってます
PCで規制が掛かっていたので携帯からの書き込みで申し訳ありません
0202デフォルトの名無しさん
2009/05/24(日) 19:57:33課題1
my_sort_strings()は、どうやって並べ替える文字列を取得すれば良いですか?
0203デフォルトの名無しさん
2009/05/24(日) 20:08:030204デフォルトの名無しさん
2009/05/24(日) 20:16:14並べ替えの対象となるポインタ配列はmainのローカル変数
my_sort_strings()は引数なし
0205デフォルトの名無しさん
2009/05/24(日) 20:19:37なんでそうなるんだ?
> 課題1
> 文字配列のソートを行って出力する以下のプログラムを完成させよ
> ただし、my_sort_stringsはポインタ配列とそのよう素数を因数として、
> 登録されている文字配列を昇順に並べ替える関数である。
因数は引数の間違いで
関数プロトタイプはこうなるだろ
void my_sort_strings(char **p,int n);
0206デフォルトの名無しさん
2009/05/24(日) 20:20:250207デフォルトの名無しさん
2009/05/24(日) 20:21:230208デフォルトの名無しさん
2009/05/24(日) 20:28:14私なら、まず確認のためにどうするか聞くが。
0209デフォルトの名無しさん
2009/05/24(日) 20:38:21課題1は先頭の一文字だけでソートするべきなのか?
0210デフォルトの名無しさん
2009/05/24(日) 20:39:242見る前に書いたらmin_index()がまんま2の仕様になってたw
0211デフォルトの名無しさん
2009/05/24(日) 21:36:02「数直線上で4つの整数を入力して二種類の区画を指定し、その区画が重なるか否かを
判定するプログラム」
【出力結果例
区画A:2 5
区画B:1 3
重なる 】
となるプログラムを作成してみたんですが、↓のでいいでしょうか?
正確な問題文や細かい所は都合により今は見れないので、不明瞭な点もあるかと思いますが、
よければ添削お願いします。あと、使うのはIf文のみでお願いします。
0212デフォルトの名無しさん
2009/05/24(日) 21:36:47using namespace std;
int main()
{
int x1,x2,x3,x4;
cout << "区画A:”;
cin >> x1 >> x2;
cout <<"区画B:”;
cin >> x3 >> x4;
If(x4<x1 && x3<x1 && x4<x2 && x3<x2){
cout<<"重ならない”<<endl;
If(x2<x3 && x1<x3 && x2<x4 && x1<x4){
cout<<"重ならない”<<endl;
}
else{
cout<<"重なる”<<endl;
}
return 0;
}
0213デフォルトの名無しさん
2009/05/24(日) 21:40:57オブジェクション。
これは断じてC言語やC++言語の問題ぢゃなく、論理(ロジック)
の問題。
0214デフォルトの名無しさん
2009/05/24(日) 21:51:310215デフォルトの名無しさん
2009/05/24(日) 21:53:12授業単元:基本プログラミング
問題文:>>211
OS:Windows
コンパイラ名:g++
言語:C++
期限:明日の午後6時まで
その他の制限:If文のみ使用
です!
ロジックも含めて、文法が合ってるかや無駄な部分がないかなどの意見も頂けたらと思い
質問させて頂きました、スレ違いでしたら申し訳ないありませんでしたorz
0216デフォルトの名無しさん
2009/05/24(日) 21:57:580217デフォルトの名無しさん
2009/05/24(日) 22:13:18あと、本当にx1<x2,x3<x4になってるか入力値のチェックも欲しい
0218211
2009/05/24(日) 22:30:14なるほど…
そっちのやり方も今試してみたんですが、x1x2x3x4の値はそれぞれ自由なので、
例えば出力結果
区画A:15 6
区画B:7 −8
重なる
にもなるようにしないといけないので、整数の入力値の場合分けがかなり面倒になって
プログラムが>>211より長くなってしまうかなと思ってるんんですがどうでしょう…
といっても、>>211のプログラムとロジックで矛盾や穴などが無いかも自分では自信が無いのですが…
なにぶん今はプログラムを実行できる環境にいないので机上の空論状態なんですorz
0219デフォルトの名無しさん
2009/05/24(日) 22:36:28区間の両端の数値は区間の中なのか外なのかが決まってないと
区間A:1 4
区間B:4 6
のとき重なっていると見なすかどうかが決められない。
区間A:1 1
区間B:1 6
も同様。両端の値は区間の中なの?外なの?
0220デフォルトの名無しさん
2009/05/24(日) 22:38:07>>212だとどちらも重なるだろ
0221デフォルトの名無しさん
2009/05/24(日) 22:41:38x1,x2とx3,x4をそれぞれ小さい順に並べ替える
if ((x3 < x1 && x1 < x4 || x3 < x2 && x2 < x4) ||
(x1 < x3 && x3 < x2 || x1 < x4 && x4 < x2)) {
重なっている
}
0222デフォルトの名無しさん
2009/05/24(日) 22:46:00先に大小みて入れ替えるほうが簡潔でわかりやすいと思うが
if(x1 > x2) { int temp = x1; x1 = x2; x2 = temp;}
if(x3 > x4) { int temp = x3; x3 = x4; x4 = temp;}
if(x1 < x4 && x2 > x3) cout << "重なる";
else cout << "重ならない";
0223デフォルトの名無しさん
2009/05/24(日) 22:51:40あ、言葉足らずでごめんなさい、端が点と点で重なってる場合も重なってるとみなされます
>>221
おお、なるほど
それだとif文も一つで済んでいいですね!
参考になりました、ありがとうございます!
0224デフォルトの名無しさん
2009/05/24(日) 22:56:53ごめんなさい、まだ授業でtempを習ってないもので…
でも後学のためになりました、ありがとうございます
0225デフォルトの名無しさん
2009/05/24(日) 22:56:56最大の元が属する区画名をA,最小の元が属する区画名をBとする。
A=Bの時は重なる
A<>Bの場合、区画Aで4数最大のものでないものをy
区画Bの元で4数最小でないものをzとする。
重なるのはy<zの場合のみ
上のことをコーディングすれば良いんぢゃ?
(変数は常に値渡しされるとは限らないから関数内で
勝手に変更することはC++では許されない。念の為)
0226デフォルトの名無しさん
2009/05/24(日) 23:01:01#include <iostream>
template <class T> class Range {
public:
Range() {}
Range(const T& v0, const T& v1) { create(v0, v1); }
Range(const Range<T>& s) { *this = s; }
virtual ~Range() {}
const Range<T>& operator=(const Range<T>& s) { min_ = s.min_; max_ = s.max_; return *this; }
void create(const T& v0, const T& v1) { if(v0 < v1) { min_ = v0; max_ = v1; } else { min_ = v1; max_ = v0; } }
bool isIntersect(const Range<T>& s) const {
if(min_ <= s.min_) {
return max_ >= s.min_; // 接するのも交わりと見なす
//return max_ > s.min_; // 接するものは交わりとは見なさない
} else {
return s.isIntersect(*this);
}
}
private:
T min_;
T max_;
};
int main()
{
Range<int> r0(2,5);
Range<int> r1(1,3);
if(r0.isIntersect(r1)) {
cout << "重なる" << endl;
} else {
cout << "重ならない" << endl;
}
}
0227デフォルトの名無しさん
2009/05/24(日) 23:04:34色々と参考になりました
お陰様でいっぱしの形になって提出できそうです
これからも精進します(`・ω・´)
0228デフォルトの名無しさん
2009/05/24(日) 23:07:15>>222
うっ、if文のみ使用って、判定にswitchとかを使うなという意味じゃないのか・・・
ごめん。
0229デフォルトの名無しさん
2009/05/24(日) 23:09:150230デフォルトの名無しさん
2009/05/25(月) 00:18:47課題1
void my_sort_strings(char **p,int n)
{
int i, j;
for(i=0;i<n;i++)
{
for(j=0;j+1<n-i;j++)
{
if(*p[j]>*p[j+1]) swap_strings(p, j, j+1);
}
}
}
課題2
void lexicograhic_sort(char **p,int n)
{
int i, j;
for(i=0;i<n;i++)
{
for(j=0;j+1<n-i;j++)
{
if(my_strcmp(p[j], p[j+1])>0) swap_strings(p, j, j+1);
}
}
}
0231デフォルトの名無しさん
2009/05/25(月) 01:09:020232デフォルトの名無しさん
2009/05/25(月) 01:12:14[1] テキストファイル
[2]Write a program to parse words onto separate lines; that is, locate
and write each word to its own line.(課題文は英文で与えられている)
[3] 環境
[3.1] OSWindows
[3.2]VisualC++
[3.3] 言語:C
[4] 期限: (2009年5月26日9:30)
[5] 制限はなし
0233デフォルトの名無しさん
2009/05/25(月) 01:26:18#include<stdio.h>
int main(void){
char buf[100+1];
while(scanf("%100s", buf)==1){
puts(buf);
}
return 0;
}
0234デフォルトの名無しさん
2009/05/25(月) 01:42:400235デフォルトの名無しさん
2009/05/25(月) 02:56:36444 sss ddddd ccc -
ddd rrrr345 333 444. >>232
#include <stdio.h>
int main(){
int c, cr = 1, minus = 0;
while( (c = getchar()) != EOF ){
if(c == ' ' || c == '\t') {
if(minus == 1) ; /* minus_space_return */
else if(cr != 0) putchar('\n'); /* space_minus_return */
cr = 0;
} else if(c == '\n') {
if(minus == 1) ; /* minus_return */
else if(cr != 0) putchar('\n');
cr = 0;
minus = 0;
} else if(c == ',' || c == '.') {
if(minus == 1) putchar('-');
if(cr != 0) putchar('\n');
cr = 0;
minus = 0;
} else if(c == '-') {
minus = 1;
} else {
if(minus == 1) putchar('-'); /* minus_not return */
putchar(c);
cr = 1;
minus = 0;
}
}
}
0236デフォルトの名無しさん
2009/05/25(月) 13:12:58[2]問題文:
ルジャンドル多項式のゼロ点(Pn(x)=0を満たすx)を求めたい。
�@ n=4 の時 (解析解あり。)
�A n=10の時 (解析解なし。)
の2つの場合についてニュートン法または2分法を用いて求めよ。
ttp://www.mns.kyutech.ac.jp/~kamada/suuributuri/sub2.html
[3]OS:Linux/コンパイラ:わかんね/言語C
[4]5/26まで
お願いします。
0237194
2009/05/25(月) 17:15:46ぐぐっても日本語の文献がほとんどヒットしません。英語のは見つかりますがどれも例がめちゃ難しいのしかないです
問題の意味は、このファセットを使って230764530を出力すると1000単位でコンマをつけて出力するようにしろとのことです
なので「230,764,530」になるといいです よろしこおねがいします
0238デフォルトの名無しさん
2009/05/25(月) 17:53:00OutIt outit;
std::ios_base& format = ;
std::num_put<charT, OutIt>& hoge = std::use_faset<std::num_put<charT, OutIt>(locale_);
hoge.put(outit, format, char, value);
こんな感じで後は自分で設定すればいいよ
0239デフォルトの名無しさん
2009/05/25(月) 18:23:52MSDNに載ってるじゃないか。英語だけど、丸写しでもうごいたぞ??
#include <iostream>
//ttp://msdn.microsoft.com/ja-jp/library/31fhezza.aspx
//230764530
int main(){
long Val = 230764530;
std::locale Loc("japanese");
std::cout.imbue(Loc);
std::use_facet<std::num_put<char>>(Loc).put(std::basic_ostream<char>::_Iter(std::cout.rdbuf()),std::cout,' ',Val);
return 0;
}
0240194
2009/05/25(月) 18:33:33すみません
エラー: ‘_Iter’は‘std::basic_ostream<char, std::char_traits<char> >’のメンバではありませんという
コンパイルエラーになるのですが何かわかりますでしょうか
0241デフォルトの名無しさん
2009/05/25(月) 18:53:40_Iterはイテレータをtypedefしたものだと思うのだが、最初にアンダースコアが入ってるからベンダ定数かもしれん。
俺の使ってるコンパイラはVC9EE(VC2008)なんだが、おまいさんはなにをつかってるんだい?
うちではちゃんと通るし230,764,530とでる。
で、ちょっと改変してみた。これで動かなかったら俺の範疇外だ。
#include <iostream>
//ttp://msdn.microsoft.com/ja-jp/library/31fhezza.aspx
//230764530
int main(){
long Val = 230764530;
std::locale Loc("japanese");
//std::locale::global(std::locale("japanese"));
std::cout.imbue(Loc);
//std::use_facet<std::num_put<char>>(Loc).put(std::basic_ostream<char>::_Iter(std::cout.rdbuf()),std::cout,' ',Val);
std::use_facet<std::num_put<char>>(Loc).put(std::ostreambuf_iterator<char>(std::cout.rdbuf()),std::cout,' ',Val);
return 0;
}
0242194
2009/05/25(月) 19:13:16大変失礼しました。
最初にVisualStudioを使っていますと書いておきながらg++でコンパイルしていました。
上記のコードも試したのですが
terminate called after throwing an instance of 'std::runtime_error'
what(): locale::facet::_S_create_c_locale name not valid
Abort trap
というエラーになりました。しかし、VC++2008で試したところ問題なく動いたので、これで十分です。
ありがとうございました。
0243デフォルトの名無しさん
2009/05/25(月) 19:27:47[2] 問題文(含コード&リンク):
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9234.txt
[3] 環境
[3.1] OS: ウィンドウズXP
[3.2] コンパイラ名とバージョン: VisualC++2008
[3.3] 言語: C++
[4] 期限: 2009年5月28日朝まで
[5] その他の制限: 難しいですが何卒よろしくおねがいします
0244デフォルトの名無しさん
2009/05/25(月) 20:05:55[2] 問題文(含コード&リンク): ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9235.txt
[3] 環境
[3.1] OS: windows XP
[3.2] コンパイラ名とバージョン: g++
[3.3] 言語: C++
[4] 期限: 5月27日12:00
[5] その他の制限: 是非、よろしくお願いします
0245デフォルトの名無しさん
2009/05/25(月) 20:22:061 http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9236.txt
0246デフォルトの名無しさん
2009/05/25(月) 20:32:182 http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9237.txt
0247デフォルトの名無しさん
2009/05/25(月) 21:21:23(1) http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9239.txt
(2) http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9240.txt
0248デフォルトの名無しさん
2009/05/25(月) 21:21:24[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9238.txt
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C/C++
[4] 期限: 明日5月26日 23:30まで
[5] その他の制限: 特にありません。
問題数が多いです。
お手数ですがどうかよろしくお願いいたします。
0249デフォルトの名無しさん
2009/05/25(月) 21:36:120250デフォルトの名無しさん
2009/05/25(月) 22:21:20ただ、(2)のプログラムの
#include <iterator>
#include <algorithm>
という2つのインクルードを初めてみました。これはどういう場合に使うのでしょうか?
やはりこれを使わないとプログラムは難しくなってしまうんですか?
0251デフォルトの名無しさん
2009/05/25(月) 22:23:310252デフォルトの名無しさん
2009/05/25(月) 22:26:41ソート処理をstd::sort、出力をstd::ostream_iteratorに丸投げしているため。
これらを見たことないとなるとソートは自分で書きなさいってことなのかね
0253デフォルトの名無しさん
2009/05/25(月) 22:57:48http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9243.txt
0254デフォルトの名無しさん
2009/05/25(月) 23:16:31[2] 問題文
以下のプログラムをもとに、入力された文字列に!があったら!?に置き換えよ
(ヒント s.insert(i,t)を用いよ)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9244.txt
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:VC
[3.3] 言語:C++
[4] 期限:明日まで
プログラムを習い始めたばかりで、
よくわかってないのですがよろしくお願いします。
0255デフォルトの名無しさん
2009/05/25(月) 23:24:45[2] 問題文
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9245.txt
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:VisualC++
[3.3] 言語:C
[4] 期限:明後日までにおねがいします。
0257デフォルトの名無しさん
2009/05/26(火) 00:15:55ありがとうございます。調べてみたんですが、便利ですね・・・
今までこんな話は聞いたことなかったし、ソートの問題は自分で書いてました。
今回の問題でもソート・出力は自分でやったほうがいいかと思ってます。
でも、ひとつ勉強になりました。ありがとうございました。
0258デフォルトの名無しさん
2009/05/26(火) 00:20:19http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9247.c
0259デフォルトの名無しさん
2009/05/26(火) 00:36:48ありがとうございます
もしまた頼る時があったらよろしくお願いします
0260デフォルトの名無しさん
2009/05/26(火) 01:03:31姑息な最適化なら任せてくれ
0261デフォルトの名無しさん
2009/05/26(火) 01:17:020262デフォルトの名無しさん
2009/05/26(火) 02:14:14http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9248.c
0263248
2009/05/26(火) 09:30:23フィボナッチは解決いたしました。
(5_1)も出来そうなので、(5_3)以降をお願いいたします。
問題文(含コードンク)http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9238.txt
0264デフォルトの名無しさん
2009/05/26(火) 09:56:01void binary(int n)
{
if(n>1) binary(n>>1);
printf("%d", n & 1);
}
0265デフォルトの名無しさん
2009/05/26(火) 10:13:22[2] 問題文(含コード&リンク):ゼロで初期化したint型変数,float型変数,double型変数をそれぞれ3個ずつ用意し,それぞれに1,0.1,0.01を1000回加えてそれぞれの結果を画面に出力するアルゴリズムを考え,それにしたがってプログラムを作成せよ.
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:秀丸
[3.3] 言語:C言語
[4] 期限:5月28日
[5] その他の制限: 関数はまだ習っていません。本当に基礎をやっています。
0266デフォルトの名無しさん
2009/05/26(火) 10:46:06int main(void)
{
int i, a = 0, b = 0, c = 0;
float fa = 0, fb = 0, fc = 0;
double da = 0, db = 0, dc = 0;
for(i=0; i<1000; i++) {
a += 1;
b += 0.1;
c += 0.01;
fa += 1;
fb += 0.1;
fc += 0.01;
da += 1;
db += 0.1;
dc += 0.01;
}
printf("%d %d %d\n", a, b, c);
printf("%f %f %f\n", fa, fb, fc);
printf("%f %f %f\n", da, db, dc);
return 0;
}
0267デフォルトの名無しさん
2009/05/26(火) 11:47:50ありがとうございます。
非常に助かりました。
0268デフォルトの名無しさん
2009/05/26(火) 15:20:55(5_4)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9249.txt
(5_5)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9250.txt
(5_6)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9251.txt
(5_7)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9252.txt
円盤の数は任意だが、ここでは5にしてある。
0269デフォルトの名無しさん
2009/05/26(火) 15:35:04[2] 問題文
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9254.txt
文字列を入力し空行が入力されたら、今まで入力されたものを表示する。
[3] 環境
[3.1] OSWindows
[3.2]VisualC++
[3.3] 言語:C++
[4] 期限: 今日中
[5] 制限はなし
途中までやっていたんですが、空行の時の条件がうまくできません。
よろしくお願いします。
0270デフォルトの名無しさん
2009/05/26(火) 16:09:24getline(cin,s)使ってみたら?
0271デフォルトの名無しさん
2009/05/26(火) 16:46:56ありがとうございました
できました
簡単なトコでのミスだったんですね
0272デフォルトの名無しさん
2009/05/26(火) 16:49:570273daigaku1nen
2009/05/26(火) 18:26:48a,b,c,d,eを cin でキーボードから読み取り
{a÷(b×c)+d×(b+3)}÷(e×2) の計算の答えを出力するプログラミングをつくる課題が出たのですが、
演算子の優先順を考慮すると、どう変換して書けばいいのか全く分かりません。
助けてください。
提出期限は今日の0時までです。。。
0274デフォルトの名無しさん
2009/05/26(火) 18:50:32#include <iostream>
int main()
{
double a,b,c,d,e;
std::cout << "a:"; std::cin >> a;
std::cout << "b:"; std::cin >> b;
std::cout << "c:"; std::cin >> c;
std::cout << "d:"; std::cin >> d;
std::cout << "e:"; std::cin >> e;
std::cout << (a/(b*c)+d*(b+3))/(e*2) << std::endl;
return 0;
}
0275棚大生
2009/05/26(火) 18:51:13提出期限は 5/28午前0時 です。
昨日、一昨日と2日間粘りましたがチンプンカンプンです。
問題は下記の通りです。
�@
int i=99;と設定されていたら、
i/3 と i/3. では結果が異なる。
プログラミングを作成することによって、i/3 と i/3.を評価せよ。
(a,bを実数としてi/3 と i/3.をa,bに代入することとする。)
�A
a=10, b=3, c=2 として
!aかつb>cの戻り値、!aまたはb>cの戻り値を求めるプログラムを作成せよ。
�B
a=1,b=10,c=100のとき
c<b && b<a と c<b<a は同じものではない。
上記のことをプログラム化して確かめよ。
�C
i=100で a=i++, a=++iの値を確かめるプログラムを作成せよ。
�D
1から10までの和を計算するプログラムをインクリメント演算子を用いて、作成せよ。
デクリメント演算子を用いて、nCmを計算するプログラムを作成せよ。但し、n,mは cin を使って
キーボードから読み取ること。
お願いします!!!
0276daigaku1nen
2009/05/26(火) 18:59:50本っっっっ当にありがとうございます。
また分からない課題が来たらここで質問しにきていいですか??
0277デフォルトの名無しさん
2009/05/26(火) 19:07:16次からは質問テンプレ使ったほうがいいよ
cinというキーワードがあったからC++とわかったけど
ぜんぜん違う回答になってた可能性があるからね
0278デフォルトの名無しさん
2009/05/26(火) 19:09:12丁寧に質問すれば、誰かが答えてくれる。
0279デフォルトの名無しさん
2009/05/26(火) 19:30:18�@の99って、問題文あってる?
0280棚大生
2009/05/26(火) 19:37:04101でした。
0281デフォルトの名無しさん
2009/05/26(火) 19:55:52ありがとうございました。
0282デフォルトの名無しさん
2009/05/26(火) 20:46:43#include <iostream>
int main()
{
int i = 101;
double a = i / 3;
double b = i / 3.;
std::cout << "101 / 3 = " << a << std::endl;
std::cout << "101 / 3. = " << b << std::endl;
return 0;
}
0283デフォルトの名無しさん
2009/05/26(火) 20:47:43#include <iostream>
int main()
{
// �A
int a=10,b=3,c=2;
std::cout << "\"!a && b > c\"=" << (!a && b > c) << std::endl;
std::cout << "\"!a || b > c\"=" << (!a || b > c) << std::endl;
// �B
a=1;b=10;c=100;
std::cout << "\"c<b && b<a\"=" << (c<b && b<a) << std::endl;
std::cout << "\"c<b<a\"=" << (c<b<a) << std::endl;
// �C
int i=100; a=i++;
std::cout << "a=i++:" << a << std::endl;
i=100; a=++i;
std::cout << "a=++i:" << a << std::endl;
return 0;
}
0284デフォルトの名無しさん
2009/05/26(火) 20:48:51#include <iostream>
int main()
{
int i =1, sum = 0;
for (i = 1; i <= 10; i++) // インクリメント演算子
sum += i;
std::cout << "sum:" << sum << std::endl;
return 0;
}
0285デフォルトの名無しさん
2009/05/26(火) 20:49:50#include <iostream>
int comb(int n, int r)
{
if (r == 0 || r == n) return 1;
n--; // デクリメント演算子
return comb(n, r - 1) + comb(n, r);
}
int main()
{
int i, n, r;
long x;
std::cout << "n:"; std::cin >> n;
std::cout << "r:"; std::cin >> r;
std::cout << "nCr=" << comb(n, r) << std::endl;
return 0;
}
こんなんで良いのかな。違うような気もするが。
0286棚大生
2009/05/26(火) 20:55:34ありがとうございます!!!
面倒だと思いますが、�A〜�Dもお願いします。
0288棚大生
2009/05/26(火) 21:10:12重ね重ねすいません。
�D-2で、できれば combを使わない方法でお願いしたいのですが。。。
0289デフォルトの名無しさん
2009/05/26(火) 21:15:450290デフォルトの名無しさん
2009/05/26(火) 21:56:26#include <iostream>
int main()
{
int i, n, r;
int x = 1;
std::cout << "n:"; std::cin >> n;
std::cout << "r:"; std::cin >> r;
for (i = n; i >= n - r + 1; i--) //デクリメント演算子
x *= i;
for (i = r; i >= 1; i--) //デクリメント演算子
x /= i;
std::cout << "nCr=" << x << std::endl;
return 0;
}
オーバーフローは全く考慮してないので注意。
0291デフォルトの名無しさん
2009/05/26(火) 22:01:42[2] 問題文(含コード&リンク):
1!〜53!を計算して、それらの計算結果の一の位、十の位、…をそろえて(つまり右揃えで)
出力するプログラムを作成せよ。但し、その際
・適切にモジュール化、機能分割する
・53!≒4.27*10^69であることを考慮して階上値を入れる配列の大きさを決める
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語: C
[4] 期限: あさって
[5] その他の制限:
・配列の添え字がメモリ確保した配列要素の範囲を超えてはならない
・乗算を上の桁から行ってはいけない。
・53!の計算、出力の際に最初から1*2*3*...*53という風に、極端に
処理効率を悪くしてはいけない。
0292デフォルトの名無しさん
2009/05/26(火) 22:10:34むずいな
0293デフォルトの名無しさん
2009/05/26(火) 22:14:500294デフォルトの名無しさん
2009/05/26(火) 22:39:56多倍長整数の乗算の実装をしろってことでおk?
制限の2つ目からもそんなニオイが感じられるし
3つ目の制限は 53!=52!(直前に計算済み)x53をしろってことかな
0295真面目に質問!
2009/05/26(火) 22:41:55【問題文】:
�@以下のプログラムを実行した際,戻り値として何が表示されるか。
#include <iostream>
int main()
{
int a,d,e;
a = 10;
d = a ==10;
e = a < 10;
cout << e <<"\t"<< d <<endl;
}
�Aa=10,b=3,c=4とすると、c>aかつc>bの戻り値、c>aまたはc>bの戻り値を出力するプログラムを作成せよ。
�B�Aのプログラムを実行した際,戻り値として何が表示されるか。
【期限】:09.05.27 12:00
何の事を言っているのかサッパリです。。。
よろしくお願いします。
0296棚大生
2009/05/26(火) 22:45:00どうもありがとうございました。
なんとかなりそうです。
0297デフォルトの名無しさん
2009/05/26(火) 22:56:50#include<stdio.h>
#define MB_UNIT 10000
#define MB_SIZE 18
typedef struct tag_mb_t{ long data[MB_SIZE]; }mb_t;
mb_t mb_mul(mb_t a, int n){
long i, tmp, carry=0;
for(i=0;i<MB_SIZE;i++){
tmp=a.data[i]*n+carry;
a.data[i]=tmp%MB_UNIT;
carry=tmp/MB_UNIT;
}
return a;
}
int mb_sprint(char buf[MB_SIZE*4+1], mb_t a){
char i, *p=buf;
for(i=MB_SIZE-1;i>0 && a.data[i]==0;i--);
p+=sprintf(p, "%ld", a.data[i]);
for(i--;i>=0;i--) p+=sprintf(p, "%04ld", a.data[i]);
return p-buf;
}
int main(void){
char buf[MB_SIZE*4+1], i, len53;
mb_t x[54]={{{1}}};
for(i=1;i<=53;i++) x[i]=mb_mul(x[i-1], i);
len53=mb_sprint(buf, x[53]);
for(i=1;i<=53;i++){
mb_sprint(buf, x[i]);
printf("%*s\n", len53, buf);
}
return 0;
}
0298 ◆XjTlXLIlH2
2009/05/26(火) 23:10:11[2] 問題文(含コード&リンク):
めもりのついていない4リットルの容器と、3リットルの容器があり、これらを使って4リットルの容器に2リットルをはかるプログラムをC言語で書く。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:明日まで
[5] その他の制限:
forやwhileなどを主に使ったプログラムにしたいのですがよくわからなかったのでよろしくお願いします。
0299デフォルトの名無しさん
2009/05/26(火) 23:14:514 0
1 3
1 0
0 1
4 1
2 3
0300デフォルトの名無しさん
2009/05/26(火) 23:21:160 3
3 0
3 3
4 2
0 2
2 0
0301デフォルトの名無しさん
2009/05/26(火) 23:35:34(1) 0 1
(2)
#include <iostream>
int main()
{
int a,b,c,d,e;
a = 10; b = 3; c = 4;
d = c>a && c>b;
e = c>a || c>b;
cout << e <<"\t"<< d <<endl;
}
(3) 1 0
よほどおかしな環境でない限りはこうなるとは思うが、
コンパイラ/OSが書いてない以上実行結果は妄想。
0302デフォルトの名無しさん
2009/05/26(火) 23:42:15#include <stdio.h>
#include <stdlib.h>
typedef struct tag_LINT{
int sz_array;
int* value;
} LINT;
LINT* create_lint(int keta){ // size:桁
LINT* lint = (LINT*)malloc(sizeof(LINT));
lint->sz_array = keta / 4 + 1;
lint->value = (int*)calloc( sizeof(int), lint->sz_array);
return lint;
}
LINT* copy_lint(LINT* lint){
LINT* copy = (LINT*)malloc(sizeof(LINT));
copy->sz_array = lint->sz_array;
copy->value = (int*)calloc( sizeof(int), lint->sz_array);
return copy;
}
LINT* mul_lint_int(LINT* l_num, int r_num){
int carry = 0;
//for (int i=l_num->sz_array-1; i>=0; i--){
for (int i=0; i < l_num->sz_array; i++){
int tmp = l_num->value[i] * r_num + carry;
l_num->value[i] = tmp % 10000;
carry = tmp / 10000;
}
return l_num;
}
>>303に続く
0303デフォルトの名無しさん
2009/05/26(火) 23:44:20void print_lint(LINT* l_num){
for (int i=l_num->sz_array-1; i>=0; i--){
printf("%04d", l_num->value[i]);
}
printf("\n");
}
int main(void){
LINT* n = create_lint(70); // 53!≒4.27*10^69
n->value[0] = 1;
for (int i=1; i<=53; i++){
mul_lint_int(n, i);
printf("%2d!= ", i);
print_lint(n);
}
return 0;
}
リロード忘れてて>>297で答えてたなorz
でもとりあえずw
0304デフォルトの名無しさん
2009/05/26(火) 23:50:43* ☆_+
: , xヾ:、__,..-‐‐:、、,へ.........._
く '´::::::::::::::::ヽ
/0:::::::::::::::::::::::', free議論が始まる前にf逃げて〜!!!
= {o:::::::::(;´Д`):::}
':,:::::::::::つ:::::::つ
= ヽ、__;;;;::/
し"~(__)
0305294=302=303
2009/05/27(水) 00:09:48>>302-303の修正
1. // size:桁 -> 消し忘れ
2. copy_lint関数 -> 使ってないから消して
3. 追加
LINT* delete_lint(LINT* lint){
free(lint->value);
free(lint);
}
4. 変更
main関数のreturn前に
delete_lint(n);
を追加
5. 出力部分で先頭部分を空白にするならfor文を
bool f=true;
for (int i=l_num->sz_array-1; i>=0; i--){
if (f && (0!=l_num->value[i])) f=false;
printf( (f? " ": "%04d"), l_num->value[i]);
}
に変更
0306デフォルトの名無しさん
2009/05/27(水) 00:13:43[1] 授業単元:C言語
[2]問題1 テキストファイルにある文字列を空白で区切って一行ごとに表示する
例 I have a pen とテキストファイルにかかれていたらほかのファイルに
I
have
a
pen
と表示する
問題2 問題1で1行ごとに表示した文字列の4行目の文字列をほかのファイルにコピーする
例の場合はpenをコピーし、また別のファイルにpenと出力させる。
問題3 問題1で作った文字列で区切る物を利用してアルファベット、スペース、数字の数を数えるプログラム
例 as 123 rtd xxとファイルに入力されていたらアルファベットは3こ、数字は2こ、スペースは3個と表示
1,2,3はそれぞれ別のプログラムですが2,3では1のものを利用します。
[3] 環境
[3.1] OS: Windows
[3.2] VisualC++
[3.3] 言語: C
[4] 期限:5月29日まで
0307デフォルトの名無しさん
2009/05/27(水) 01:23:07[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9234.txt
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: Visual C++
[3.3] 言語: C++
[4] 期限: 27日まで
[5] その他の制限:vectorを習ったばかりです
0308デフォルトの名無しさん
2009/05/27(水) 01:53:29問題1--------------------
#include <stdio.h>
int main(void)
{
int c, last;
for (; (c = getchar()) != EOF; ) {
if (c == ' ')
if (last == ' ') ;
else putchar('\n');
else
putchar(c);
last = c;
}
return 0;
}
0309デフォルトの名無しさん
2009/05/27(水) 01:54:38問題2--------------------
#include <stdio.h>
#include <string.h>
#define MAXBUF 1000
int main(void)
{
unsigned char buf[MAXBUF];
int count = 0, continued = 0;
while (fgets(buf, sizeof(buf), stdin) != NULL) {
if (!continued) count++;
if (count == 4)
fputs(buf, stdout);
if (strlen(buf) == MAXBUF - 1 && buf[MAXBUF - 2] != '\n')
continued = 1;
else
continued = 0;
}
return 0;
}
0310デフォルトの名無しさん
2009/05/27(水) 01:55:22問題3--------------------
#include <stdio.h>
#include <ctype.h>
int main(void)
{
int c;
int found_digit = 0, found_alpha = 0;
int numeric_count = 0, alpha_count = 0, line_count = 0;
while((c = getchar()) != EOF) {
if (c == '\n') {
line_count++;
if (found_digit) numeric_count++;
if (found_alpha) alpha_count++;
found_digit = 0;
found_alpha = 0;
}
if (isdigit(c)) found_digit = 1;
if (isalpha(c)) found_alpha = 1;
}
printf("アルファベットは%d個、数字は%d個、空白は%d個です\n",
alpha_count, numeric_count, line_count - 1);
return 0;
}
0311307の間違い
2009/05/27(水) 01:56:200312デフォルトの名無しさん
2009/05/27(水) 02:00:58[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9259.txt
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 6月初旬
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9260.c
現在できているプログラムですが、ツーペアの判定が上手くいきません。どなたか改善をお願いします。
0313デフォルトの名無しさん
2009/05/27(水) 02:07:23http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9256.c
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9257.c
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9261.c
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9262.txt
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9263.txt
[3] 環境
[3.1] OS:XP
[3.2] textpad
[3.3] 言語: C++
[4] 期限: 5月末
よろしくお願いします。
0315馬路
2009/05/27(水) 03:30:09【授業】:プログラミング(C++)
【問題文】:
�@以下のプログラムを実行した際,戻り値として何が表示されるか。
#include <iostream>
int main()
{
int a,d,e;
a = 10;
d = a ==10;
e = a < 10;
cout << e <<"\t"<< d <<endl;
}
�Aa=10,b=3,c=4とすると、c>aかつc>bの戻り値、c>aまたはc>bの戻り値を出力するプログラムを作成せよ。
�B�Aのプログラムを実行した際,戻り値として何が表示されるか。
【期限】:09.05.27 12:00
0316デフォルトの名無しさん
2009/05/27(水) 04:11:24>>301
0317デフォルトの名無しさん
2009/05/27(水) 04:23:45http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9265.cpp
問題文以上に余計な関数とか書いたから邪魔なら省いてくれ
0318307の間違い
2009/05/27(水) 04:36:18http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9266.txt
0319デフォルトの名無しさん
2009/05/27(水) 05:32:23[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9267.txt
[3] 環境
[3.1] OS:XP
[3.2] Turbo C++
[3.3] 言語: C++
[4] 期限: 今日18時まで
かなり初歩だと思いますがよろしくお願いいたします。
0320デフォルトの名無しさん
2009/05/27(水) 07:17:32#include <iostream>
using namespace std;
int passMinutes(const int start, const int end) { return end - start; }
int main()
{
const int MIN_INADAY = 24*60;
int h1, m1, h2, m2;
cout << "開始時間(0-23):"; cin >> h1;
cout << "開始分(0-59):"; cin >> m1;
cout << "終了時間(0-23):"; cin >> h2;
cout << "終了時間(0-59):"; cin >> m2;
// 入力は省略。h1:m2 > h2:m2 の場合、h2:m2は翌日の時間だと判断する
// endは27:00等の入力も受け付けるが、startは、00:00〜23:59の範囲に丸められる
int start = h1*60+m1;
int end = h2*60+m2;
if(start < 0) {
start = 0;
h1 = 0;
m1 = 0;
} else if(start >= MIN_INADAY) {
start = MIN_INADAY - 1;
h1 = 23;
m1 = 59;
}
int tm = (start <= end) ? passMinutes(start, end) : passMinutes(start, MIN_INADAY) + passMinutes(0, end);
cout << h1 << "時" << m1 << "分から" << h2 << "時" << m2 << "分までの時間" << endl;
cout << (tm / 60) << "時間" << (tm % 60) << "分です" << endl;
return 0;
}
0321デフォルトの名無しさん
2009/05/27(水) 07:24:17#include <iostream>
using namespace std;
int passMinutes(const int start, const int end) { return end - start; }
int main()
{
const int MIN_INADAY = 24*60;
int h1, m1, h2, m2;
cout << "開始時間(0-23):"; cin >> h1;
cout << "開始分(0-59):"; cin >> m1;
cout << "終了時間(0-23):"; cin >> h2;
cout << "終了時間(0-59):"; cin >> m2;
// 入力は省略。h1:m2 > h2:m2 の場合、h2:m2は翌日の時間だと判断する
// startは、00:00〜23:59の範囲に丸められるがendは最小値だけが00:00に丸められる。
int start = h1*60+m1;
int end = h2*60+m2;
if(start < 0) {
start = h1 = m1 = 0;
} else if(start >= MIN_INADAY) {
start = MIN_INADAY - 1;
h1 = 23;
m1 = 59;
}
if(end < 0) { end = h2 = m2 = 0; }
int tm = (start <= end) ? passMinutes(start, end) : passMinutes(start, MIN_INADAY) + passMinutes(0, end);
cout << h1 << "時" << m1 << "分から" << h2 << "時" << m2 << "分までの時間" << endl;
cout << (tm / 60) << "時間" << (tm % 60) << "分です" << endl;
return 0;
}
0322デフォルトの名無しさん
2009/05/27(水) 07:51:14>>313 訂正
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9256.c
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9257.c
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9268.c
0〜9、A〜Z、a〜z以外の ( # ! などの対策を追加
0323デフォルトの名無しさん
2009/05/27(水) 09:18:12ワンペアの判定結果を使う。
ツーペア判定関数の引数に、最初に見つけたワンペアカードを追加する。
ツーペア判定関数は、ワンペア以降から二組目のセットを見つけ、あればそのカード番号を返す。
ワンペアがなければ、そもそも呼ぶ必要もなさそう。
0324 ◆UlBEcxSSxE
2009/05/27(水) 09:58:29[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9269.txt
[3] 環境
[3.1] OS:Ubuntu Linux 8.
[3.2] コンパイラ名とバージョン: gcc 4.2
[3.3] 言語: C
[4] 期限: 5月29日17:00
[5] その他の制限: アップしたファイルに詳しく書いてあります。
いろいろやってみたのですが難しいです。再帰版はいろいろ調べてみて
何とかなるような気もするのですが、非再帰版はどうやったらいいのか
見当がつかず、あと2日で両方は無理そうです。よろしくお願いします。
0325デフォルトの名無しさん
2009/05/27(水) 10:04:19unsigned int 型の数字が、ランダムで生成されて
すでに生成済みか、未生成かを知りたいです。
高速で省メモリにするにはどうしたらいいですか?
0326デフォルトの名無しさん
2009/05/27(水) 10:14:29ことができて、さらにrの逆関数が作れれば簡単。でもそんな乱数列は
あるのかなあ。
そうでなければ、生成した乱数を適当な集合を表すデータ構造(ハッシュか
何か)に突っ込んでおくという愚直な方法しか思いつかないや。でもこれだと
省メモリにはならないかも。
0327325
2009/05/27(水) 10:15:59メモリはたかだか30Mの使用で処理したいです。
0328デフォルトの名無しさん
2009/05/27(水) 10:16:03スレ違い
ダブらない乱数を発生させたい(それはもう乱数じゃない)なら
つttp://pc12.2ch.net/test/read.cgi/tech/1192628099/l50
そうでないなら
【初心者歓迎】C/C++室 Ver.65【環境依存OK】
つttp://pc12.2ch.net/test/read.cgi/tech/1239326399/l50
0329デフォルトの名無しさん
2009/05/27(水) 10:35:1030M*8bit=240M=240,000,000 MAX
0330デフォルトの名無しさん
2009/05/27(水) 10:37:29ランダムの数字って言うのは、すでにハッシュ値(CRC,SHA)のことなんです。
質問のため言い換えました。
重複ファイルや重複URLを検出したいのですがいい方法ないかなとおもいました。
ググたところ、パトリシア トライ、ダブル配列あたりが使えそうなのでこのあたりでいってみます。
0331デフォルトの名無しさん
2009/05/27(水) 11:41:58一次元の配列に格納したらデータの更新が難しいが。 追加する部分以降を移動しなければいけない。
0332デフォルトの名無しさん
2009/05/27(水) 14:07:44授業単元ソフトウェア製作実習
osソラリス
コンパイラ gcc
言語 c
制限 台形の面積を求めるのに(上底+下底)*高さ/2を使ってください
。できればいかにも初心者が書いたようなプログラムにしてくれる
と助かります。
高さhが2で上底aと下底bが次のような4つの合計を求めるプログラムをfor文をつかって作成せよ。
台形(1)a=0b=2^2h=2面積=
台形(2)a=2^2b=4^2h=2面積=
台形(3)a=4^2b=6^2h=2面積=
台形(4)a=6^2b=8^2h=2面積=
四つの台形の面積の合計=
以上でお願いします。
0333デフォルトの名無しさん
2009/05/27(水) 15:01:300334デフォルトの名無しさん
2009/05/27(水) 15:22:54ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9270.txt
こんなんで良い? ちなみに解の妥当性までは確認してない
0335デフォルトの名無しさん
2009/05/27(水) 15:46:51ありがとうございました!
0336初心者
2009/05/27(水) 15:48:34#include <iostream.h>
main()
{
int a=10,b=3,c=2,d=0,e=0;
d = !a && b>c;
e = !a || b>c;
cout << d <<"\t"<< e <<endl;
}
を実行した結果はどうなりますか?
0337デフォルトの名無しさん
2009/05/27(水) 15:53:050338デフォルトの名無しさん
2009/05/27(水) 15:58:59どっちも結果はbool型だと思うぞ。
0339初心者
2009/05/27(水) 16:00:09いま環境が悪くて実行できないので、すいません。
お願いします。
0340デフォルトの名無しさん
2009/05/27(水) 16:02:100341デフォルトの名無しさん
2009/05/27(水) 16:04:43iostream.hとか存在しないからコンパイルエラー
0342デフォルトの名無しさん
2009/05/27(水) 16:07:41いたた
0343デフォルトの名無しさん
2009/05/27(水) 16:09:36それはない
環境依存ではあるが古い記述方法であることであるのは事実
intに対して論理否定やboolをintに入れているのはいががなモノかと
main()のintは省略してはならない、ゆえにnon-void関数である
cout, endlは、このスコープで定義されていない
0344初心者
2009/05/27(水) 16:19:06int main()
{
int a=10,b=3,c=2,d=0,e=0;
d = !a && b>c;
e = !a || b>c;
cout << d <<"\t"<< e <<endl;
}
となればいいんですか?
結果はどうなるんですか??
0345デフォルトの名無しさん
2009/05/27(水) 16:22:45ネームスペースがおかしいから、コンパイルエラー。
0346初心者
2009/05/27(水) 16:26:15int main()
{
int a=10,b=3,c=2,d=0,e=0;
d = !a && b>c;
e = !a || b>c;
cout << d << e <<endl;
}
ですか?
締切が18:00までなので結果だけでも教えてください。
0347デフォルトの名無しさん
2009/05/27(水) 16:26:400348デフォルトの名無しさん
2009/05/27(水) 16:38:01レスありがとうございます。申し訳ありませんが
台形(1)a=0,b=2^2,h=2面積=
台形(2)a=2^2,b=4^2,h=2面積=
台形(3)a=4^2,b=6^2h=2面積=
台形(4)a=6^2,b=8^2h=2面積=
四つの台形の面積の合計=
という表示形式でお願いできないでしょうか?
0349デフォルトの名無しさん
2009/05/27(水) 16:45:410350 ◆XjTlXLIlH2
2009/05/27(水) 16:46:03すごく助かりました、ありがとうございました!!
0351334
2009/05/27(水) 16:54:43ほらよ
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9272.txt
0352デフォルトの名無しさん
2009/05/27(水) 17:26:58ありがとうございます。
0353デフォルトの名無しさん
2009/05/27(水) 18:04:250354デフォルトの名無しさん
2009/05/27(水) 18:27:30[2] 問題文(含コード&リンク):
[3] 環境
[3.1] Windows
[3.2] すみません、わかりません
[3.3] C
[4] 明日まで
入力された文字列をリストに格納し、
そのリスト自体を入れ替えて辞書順に並べる関数を作っています。
その際先頭・最後尾・次のリストのアドレスを変えなくては
ならないのですが、その処理をどうやったらいいか悩んでいます。
(strcmpの下の行からがよくわかりません)
void jisyo(struct B *fp, struct B *ep, int list_sum){
//前からリストの先頭アドレス、リストの最後尾アドレス、リストの数
です。main関数でjisyo(a.front_p, a.back_p, a.list_sum)と
呼び出しています。
int n, i, m;
struct B *p;
0355デフォルトの名無しさん
2009/05/27(水) 18:28:50for(n = 1; n < list_sum; n++){
pb = fp;
pb_b = ep;
for(i = 0; i < list_sum-1; i++){
if(strcmp(pb->str_p, pb->next_p->str_p) >= 1){
p = pb;
pb = pb->next-_p;
pb->next_p = p;
0356デフォルトの名無しさん
2009/05/27(水) 18:29:31if(fp != pb){
fp = fp->next_p->next_p;
fp->next_p->next_p = fp->next_p;
fp->next_p = fp->next_p->next_p->next_p;
}else if(ep != pb_b){
ep = ep->next_p;
ep->next_p = ep->next_p->next_p->next_p;
ep->next_p->next_p->next_p = ep->next_p;
}else{
pb = pb->next_p->next_p;
pb->next_p = pb;
pb->next_p->next_p = pb->next_p;
}
}
pb = pb->next_p;
}
}
for(m = 0; m < list_sum; m++){
printf("%s\n", pb->str_p);
pb = pb->next_p;
}
}
0357307の間違い
2009/05/27(水) 19:14:21#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <time.h>
using namespace std;
struct student {
string name;
int score;
};
bool operator<(const student& x, const student& y) {
return x.score < y.score;
}
int main(void) {
int i;
char buf[50];
student s, t;
vector<student> vecStudent;
vector<student>::iterator theIterator;
srand((unsigned)time(0));
for(i=0; i<20; i++) {
sprintf(buf, "名前.%02d.名前", i+1); s.name = buf; s.score = rand() % 101;
vecStudent.push_back(s);
}
for (theIterator = vecStudent.begin(); theIterator != vecStudent.end(); theIterator++)
cout << theIterator->name << ":" << theIterator->score << endl;
cout<<endl; sort(vecStudent.begin(), vecStudent.end());
for(i=0; i<20; i++)
t = vecStudent[i], cout<<t.name<<":"<<t.score<<endl;
return 0;
}
0358デフォルトの名無しさん
2009/05/27(水) 20:04:04どのような構造体かわからなかったので妄想してコーディングした。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9273.c
兄ぃそこはらめぇー、とか。あぁ、酔ってるわ。
0359デフォルトの名無しさん
2009/05/27(水) 20:32:00ありがとうございます。
でもコメントが文字化けしていて
どんな処理をしているのかわかりませんでしたorz
構造体は
struct A a{
struct B *front_p;
struct B *back_p;
int list_sum;
}
struct B b{
char *str_p;
struct B *next_p
}
です。
書き忘れすみません。
よろしくお願いします。
0360デフォルトの名無しさん
2009/05/27(水) 20:43:14構造体は予想どおりだったか。
コメントの文字化けは知らんがな。
UTF-8だから、nkfかiconvでSJISにでもしてみてね。
それか、サクラエディタかnotepad++で読み込むとか。
私の考えでは、別にリストのポインタを入れ替えていく必要はないと。
つまり、文字列(char *)だけ入れ替えてやるだけで済むと。
ソートしたい対象が文字列(char *)なのにリストのポインタを替えていくなんて無駄な処理でしょ。
だから、文字列(char *)だけソートしたものが>>358なのよ。
0361307の間違い
2009/05/27(水) 20:44:16>どんな処理をしているのかわかりませんでしたorz
(9273)右クリックでファイルをダウンロードすれば読めるはず。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
0362デフォルトの名無しさん
2009/05/27(水) 21:11:55文字列のみの入れ替えは完成していたのですが、
講師からリスト自体を入れ替えろと言われました…。
あとコメント見れました。
0363デフォルトの名無しさん
2009/05/27(水) 22:35:50[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9274.txt
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: [2009年06月03日24:00まで]
[5] その他の制限: 特になし。
よろしくお願いします
0364デフォルトの名無しさん
2009/05/28(木) 00:25:36[2] 問題文(含コード&リンク):1!〜53!を計算して、それらを右揃えで出力するプログラムを
作成せよ
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: Visual C++
[3.3] 言語: C言語
[4] 期限: [2009年6月2日17:00まで]
[5] その他の制限:・プログラムを幾つかの関数に分割する
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9275.txt
↑途中まで作ったのですが空白にしたいところが0で埋まってしまって困っています。
よろしくお願いします
0365デフォルトの名無しさん
2009/05/28(木) 00:25:55具体的にどこがわからんの?
0366デフォルトの名無しさん
2009/05/28(木) 00:39:17print関数だけ。
void print(int a[],int N,int n)
{
int i;
int head;
printf("%2d! = ",n);
head = 0;
for(i=N-1; i>=0; i--) {
if (head)
printf("%07d",a[i]);
else if (a[i]) {
printf("%7d",a[i]);
head = 1;
}
else
printf(" ");
}
printf("\n");
}
0367デフォルトの名無しさん
2009/05/28(木) 00:45:29[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9276.txt
[3] 環境
[3.1] OS: windows
[3.2] コンパイラ名とバージョン: visual c++
[3.3] 言語: C++
[4] 期限: 朝までに。すごく困っています
[5] その他の制限: 特になし
よろしくお願いします
0368デフォルトの名無しさん
2009/05/28(木) 00:52:30ありがとうございます。
0は消えたんですが右揃えになりません。
0369デフォルトの名無しさん
2009/05/28(木) 00:56:08すいません。なりました。本当にありがとうございました
0370デフォルトの名無しさん
2009/05/28(木) 01:01:49greater()をstructの後に移動
if(a.point>b.point)
0371デフォルトの名無しさん
2009/05/28(木) 01:05:09[2] 問題文(含コード&リンク):線形検索を使用して配列内の最大の要素を検索せよ。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:来週火曜日
[5] その他の制限:制限はありません
まずアルゴリズムが全く思いつきません。
よろしくお願いします。
0372デフォルトの名無しさん
2009/05/28(木) 01:06:17ありがとうございました。
昨日から悩んでいたのがやっと解決しました
0373デフォルトの名無しさん
2009/05/28(木) 01:19:43[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9277.txt
[3] 環境
[3.1] OS: windows
[3.2] コンパイラ名とバージョン: Visual C++
[3.3] 言語: C++
[4] 期限:できるだけ早く
お願いします
0374デフォルトの名無しさん
2009/05/28(木) 01:39:22[2] 問題文(含コード&リンク):
(1)1からn番目までの奇数2n-1までの和をn=1からn=50まで求め、n,和(sum),
n~2の値を出力せよ。また、プログラムの中でsum=0;およびn--;が
必要な理由を答えよ。
(2)原点を中心とした半径2の円を描くプログラムを作成せよ。
[3] 環境
[3.1] OS:XP
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:今週金曜日
[5] (2)についての条件
�@半径2の値はconst型で初期化しておき、実数型とする。
�A円の方程式は平面極座標(r,φ)を用いてforループでφを0から
2πまで変化させてガウス座標(x,y)を出力する。
�Bforループの制御変数はint型とする。
長くなってしまいすいません。よろしくお願いいたします。
0375デフォルトの名無しさん
2009/05/28(木) 01:46:08[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9278.txt
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: Visual C++
[3.3] 言語: C++
[4] 期限: 5月30日
ランダム関数を使うらしいのですが全く分かりません。
よろしくお願いします。
0376デフォルトの名無しさん
2009/05/28(木) 02:10:13http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9279.cpp
0377デフォルトの名無しさん
2009/05/28(木) 02:36:04http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9280.c
0378デフォルトの名無しさん
2009/05/28(木) 02:37:09[2] 問題文(含コード&リンク):
キーボードから実数 x を入力し、ニュートン法と呼ばれる次のような反
復の式を用いて、近似的に x の平方根を求めるプログラムを作成せよ。
--
xの平方根は、次の計算を| s(i+1)-s(i) | < ε, i=1,2,...となるまで繰
り返すことによって求めることができる。εは収束判定数である。
s(i+1) = ( s(i) + x / s(i)) / 2
ただし、s(1) = 1 とする。
なお、ε=0.00001として計算すること。
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 2009年5月29日00:00まで
[5] その他の制限: なし
よろしくお願いします。
0379デフォルトの名無しさん
2009/05/28(木) 02:50:29http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9281.txt
0380デフォルトの名無しさん
2009/05/28(木) 06:16:47void print(int a[],int N,int n) {
int i;
printf("%2d! = ",n);
for(i=N-1; i>=0&&a[i]==0; i--) printf("%7c",' ');
printf("%7d",a[i]);
for(i--; i>=0; i--) printf("%07d",a[i]);
printf("\n");
}
0381243
2009/05/28(木) 06:36:52先週は助けていただき有難うございました。
関連する問題になるのですが、以前複素数のクラスを作成しました。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9282.zip
このクラスもPass_Betterを使って値渡しにするよう言われたのですが、
どなたか分かる方いたらお願いします。
[1] 授業単元: C++
[2] 問題文(含コード&リンク):
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: Visual C++
[3.3] 言語: C++
[4] 期限: 5月30日
0382デフォルトの名無しさん
2009/05/28(木) 09:26:42問題文(1)の中の「n~2の値」、何を出力すればいい?
0383sage
2009/05/28(木) 10:11:18[2] 問題文(含コード&リンク):番兵を利用して配列内の最大の要素を検索するプログラムを作りなさい
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C言語
[4] 期限:6月2日
[5] その他の制限:制限はありません
お願いします
0384デフォルトの名無しさん
2009/05/28(木) 10:34:58さらに,浮動小数点数yと正の整数mを引数とし,yの小数点m桁より下を切り捨てて出力する関数trunc(y, m)をつくりなさい。
次に,これらの2つの関数を用いて,e^xの近似値を小数点以下の桁数を指定して出力するプログラムをつくりなさい。
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
指数関数e^xの近似値を返す関数expon(x, n)をつくります。第1引数は浮動小数点数xで,第2引数はexをTaylor展開で展開する際の最大次数nになります。n次項までのTaylor展開の式は下に示す通りです。
さらに,浮動小数点数yと正の整数mを引数とし,yの小数点m桁より下を切り捨てて出力する関数trunc(y, m)をつくりなさい。
次に,これらの2つの関数を用いて,e^xの近似値を小数点以下の桁数を指定して出力するプログラムをつくりなさい
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:5月30日
[5] その他の制限:なし
0385デフォルトの名無しさん
2009/05/28(木) 10:39:59[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
指数関数e^xの近似値を返す関数expon(x, n)をつくります。第1引数は浮動小数点数xで,第2引数はexをTaylor展開で展開する際の最大次数nになります。n次項までのTaylor展開の式は下に示す通りです。
さらに,浮動小数点数yと正の整数mを引数とし,yの小数点m桁より下を切り捨てて出力する関数trunc(y, m)をつくりなさい。
次に,これらの2つの関数を用いて,e^xの近似値を小数点以下の桁数を指定して出力するプログラムをつくりなさい
関数truncは,trunc(-3.141593, 3) と呼び出すと,-3.141のように画面に出力する。但し,printf("%.*f", m, y); は用いないで定義すること。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:5月30日
[5] その他の制限:なし
0386デフォルトの名無しさん
2009/05/28(木) 10:55:54[2] 問題文(含コード&リンク):
4桁の10進数の各桁を千の位からd3,d2,d1,d0で表すと、
((d3*10+d2)*10+d1)*10+d0という計算をすることにより、元の10進数を得ることができる。
4桁の10進数の各桁を、まず、大きさ4のint型配列に1桁ずつに入力し、
その後、上記の計算法により、元の10進数にして表示するプログラムを書け。
ただし、上記の計算部分はfor文による繰り返しにより記述すること。
例;入力が4536ならば、((4*10+5)*10+3)*10+6=4536の計算をして表示する。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 2009年5月29日12:50まで
[5] その他の制限:特になし
お願いします。
0387デフォルトの名無しさん
2009/05/28(木) 11:17:17ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9283.c
表示周り適当に修正してちょ
0388デフォルトの名無しさん
2009/05/28(木) 11:27:02ありがとうございました。
0389デフォルトの名無しさん
2009/05/28(木) 11:47:240390デフォルトの名無しさん
2009/05/28(木) 12:09:18ありがとうございます
0391デフォルトの名無しさん
2009/05/28(木) 12:10:02オナニーは楽しいかい?
0392デフォルトの名無しさん
2009/05/28(木) 14:13:57Windowsのフリーセルの最小手順検索はいかが?
ここで最小手順とは人間が操作を行う回数のこと
列移動も一回として数える
0393デフォルトの名無しさん
2009/05/28(木) 14:40:16入力した内容を暗号化(置き換え)してファイルに保存する方法が分からないです
よろしくお願いします
0394joyful_age
2009/05/28(木) 14:44:16http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9284.txt
0395joyful_age
2009/05/28(木) 15:04:34void angouka(char *s) {
for(; *s != '\0'; s++)
if(*s < '0' || *s > '9') (*s)++;
}
0396デフォルトの名無しさん
2009/05/28(木) 15:14:18難易度が高くて未回答の問題が幾つもあるだろ。解いてみろ。
0397デフォルトの名無しさん
2009/05/28(木) 17:40:06迅速な回答ありがとうございます!
0398デフォルトの名無しさん
2009/05/28(木) 18:26:11[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9287.txt
[3] 環境
[3.1] OS: Windows XP
[3.3] 言語: C言語
[4] 期限:
5/29日午前10時まで
[5] 一応c言語は習ってます。簡単かもしれませんがよろしくお願いします。
0399デフォルトの名無しさん
2009/05/28(木) 19:23:16スタック
#include <stdio.h>
#include <stdlib.h>
#define n 100 /* nは外部変数でなく定義とした */
/* スタック処理の関数,外部変数の定義*/
char stack[n];
int size;
void push(char c){
stack[size++] = c;
}
char pop(){
return stack[--size];
}
/*main*/
main(){
char buf[n+1], *pbuf;
/* scanfで文字列取得(略)*/
scanf("%s", buf);
/*スタック初期化(略)*/
size = 0;
for(pbuf=buf; *pbuf !='\0'; pbuf++){
/*1文字ごとの処理(略)*/
if(*pbuf == '/') printf("%c", pop());
else push(*pbuf);
}
printf("\n");
}
0400デフォルトの名無しさん
2009/05/28(木) 19:24:23キュー。実行結果は自分で出してくれ。
#include <stdio.h>
#include <stdlib.h>
#define n 100 /* nは外部変数でなく定義とした */
/* キュー処理の関数,外部変数の定義*/
char queue[n];
int size;
int head;
void push(char c){
queue[size++] = c;
}
char pop(){
return queue[head++];
}
/*main*/
main(){
char buf[n+1], *pbuf;
/* scanfで文字列取得(略)*/
scanf("%s", buf);
/*キュー初期化(略)*/
size = 0;
head = 0;
for(pbuf=buf; *pbuf !='\0'; pbuf++){
/*1文字ごとの処理(略)*/
if(*pbuf == '/') printf("%c", pop());
else push(*pbuf);
}
printf("\n");
}
0401デフォルトの名無しさん
2009/05/28(木) 19:54:12> �U,キューによる処理順序を確認する
>
> �@入力はn文字以下の長さの文字列とする
> �A文字列の先頭から1字すつ処理を行う
> 文字が'/'なら取り出し
> その他の文字はその文字を追加
> �B入出力例 こうならなければ修正する
> EX/AMP//LE////
> EXAMP
これって入出力例がおかしくない?
EXAMPLEって出力されるのが正しいんじゃ
課題1
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9288.c
課題2
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9289.c
0402デフォルトの名無しさん
2009/05/28(木) 20:08:199287.txtの10行目のが正しいようだね
[1] 授業単元:Cプログラムの基礎
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9290.txt
[3] 環境
[3.1] OS: (WindowsXP
[3.2] コンパイラ名とバージョン:borland C++
[3.3] 言語: (C言語】
[4] 期限: ([2009年05月29日00:00:00まで]
[5] その他の制限: 一通り習っていますが、リンク先にある書きかけのソースを
補完して、完成したいです。
今は解らなくても、理解できるようになりたいです。
その為にも、一度正常に動くソースを見てみたいです。
みなさんの力を貸してください、お願いします!
0405デフォルトの名無しさん
2009/05/28(木) 21:45:420406デフォルトの名無しさん
2009/05/28(木) 22:12:49(1)sum=0 は初期化する必要があるが、n-- は必要な理由が見あたらない
#include <stdio.h>
int main()
{
int n, sum;
sum = 0; // 集計のため0に初期化する
for (n = 1; n <= 50; n++) {
sum += (2 * n - 1);
printf("n = %3d sum = %4d n^2 = %5d\n", n, sum, n*n);
}
return 0;
}
(2)
#include <stdio.h>
#include <math.h>
const double r = 2.0;
const double PI = 3.14159;
int main()
{
int i; double rad;
for (i = 0; i <= 100; i++) {
rad = PI * 2 / 100 * i;
printf("φ=%.6f x=%.6f y=%.6f\n", rad, r * cos(rad), r * sin(rad));
}
return 0;
}
0407デフォルトの名無しさん
2009/05/28(木) 22:18:59#include <stdio.h>
#include <math.h>
int main(void) {
double x, s, t;
double eps = 0.00001;
scanf("%lf", &x);
s = 1.0; /* 初期値 */
do {
t = s; /* 前回の値 */
s = (s + x / s) / 2; /* 反復式 */
} while (fabs(s - t) >= eps);
printf("%f\n", s);
return 0;
}
0408デフォルトの名無しさん
2009/05/28(木) 22:47:50[2]
1.英数字からなる文字列内の全ての数字文字を削除する。
2.文字列Aの中に文字列Bがいくつ含まれているかカウントする。
3.配列中の10個のデータを降順に並べ替える。
[3] 環境
[3.1] Windows
[3.2] わかりません
[3.3] C
[4] 明日
[5] 3問あります。よろしくお願いします。
0409デフォルトの名無しさん
2009/05/28(木) 22:59:483の問題、もう少し詳しく書いて。
配列は文字列?それとも数字?例題があればそれを。
0411デフォルトの名無しさん
2009/05/28(木) 23:15:27特に指定はないのでとりあえず文字列にしようかなと思っています。
0412デフォルトの名無しさん
2009/05/29(金) 00:03:40[1] 授業単元: 制御工学
[2] 問題文: ルンゲクッタ法を用いて
微分方程式 dy/sx=(1-y)/15を初期条件x0=0,y0=0でxmax=100まで解く
[3] 環境
[3.1] OS: OS: WindowsXP
[3.2] コンパイラ名とバージョン: 解かりません
[3.3] 言語: C++
[4] 期限: 2009年05月29日午前09:00まで
[5] その他の制限:
プログラミングと言う物を今まで使った事が無かったので正直お手上げです
どうかご助力お願いします
0413デフォルトの名無しさん
2009/05/29(金) 00:09:31ルンゲクッタ法に限らず刻み値も条件として与えられているはずだが。
h=0.01ほど?
0414デフォルトの名無しさん
2009/05/29(金) 00:16:14h=5、h=1とh=0.5です
0415398
2009/05/29(金) 00:17:42>>401すみません,Eを書くのを忘れてしまいました。ご指摘ありがとうございます
またお聞きするかもしれませんが,よろしくお願いします。」
0416デフォルトの名無しさん
2009/05/29(金) 01:35:50http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9291.txt
0417デフォルトの名無しさん
2009/05/29(金) 01:39:28[2] 問題文(含コード&リンク):
仕様書
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9292.txt
ソースコード(.txtですみません)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9293.txt
[3] 環境
[3.1] OS: Windows2000 SP4
[3.2] コンパイラ名とバージョン: ビジュアルC++6.0
[3.3] 言語: C言語
[4] 期限: 2009年6月一週目ぐらいまで
[5] その他の制限: File構造体を使用
制限が非常に多いです。
上記の仕様書にあるように、作成してみたのですが、
エラー等は特にないのですが、自信がないです。
おそらくいらない記述や、変えた方が良いコード
または、違う表現が出来る処理などございましたら、
ご指摘を頂きたいと思います。
どうぞ、宜しくお願いします。
0418デフォルトの名無しさん
2009/05/29(金) 01:40:14http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9294.txt
0419デフォルトの名無しさん
2009/05/29(金) 01:59:35厳密解 1.0-exp(-x/15.0)と較べた結果ほぼあってるね
信じておk
0420デフォルトの名無しさん
2009/05/29(金) 02:08:01>>419
有難うございます
ちなみに刻み値が1つでh=0.01だった場合
double h[3]を1に、{5.0,1.0,0.5}を0.01にすればいいんですか?
差し出がましくてすいません
0421デフォルトの名無しさん
2009/05/29(金) 02:34:41http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9295.txt
0422デフォルトの名無しさん
2009/05/29(金) 02:35:12いくつか修正しなければならないが
h[3]をh=0.01に、h[i]をhに、それからfor文でiを0から2まで
回す必要なし
このプログラムがややこしい配列を使っているのは汎用の
ルンゲ=クッタ法のプログラムを流用したためで、n階微分
方程式も解けるようになっているため
1階専用ならもっと単純に書ける
0423デフォルトの名無しさん
2009/05/29(金) 02:52:04エッチなのは(ry
0424デフォルトの名無しさん
2009/05/29(金) 03:05:59Input_Data関数が糞すぎる。。変更不可なのか。。
だいたい
void Input_Data(char *InputKey){
int Cnt = 0;
while( InputKey[ Cnt - 1] != '\n'){
引数の配列のインデックス値が負数になるなんて(ry
0425デフォルトの名無しさん
2009/05/29(金) 03:22:10なるほど凡庸をを流用してn階微
分も解ける用にしてるんですか凄いですね。
お手数で無ければ、今後の為に一階専用
も見てみたいですが駄目でしょうか?
0426デフォルトの名無しさん
2009/05/29(金) 03:49:39途中までだけど一応
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9296.txt
追記したとこや修正したとこ、その他気になったところは「////」でコメントアウトしておいたから
エディタで「////」を検索するといいよ
配列とポインタの関係がまだあやうい感じだったね
疲れた・・・もう寝る
0427デフォルトの名無しさん
2009/05/29(金) 04:03:59http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9297.txt
汎用のプログラムは科学技術計算の本のプログラムを若干改良しただけだよ
1階専用だとこのように配列が大幅に減る
しかしこれでは単振動の問題(2階)も解けない
0428デフォルトの名無しさん
2009/05/29(金) 04:16:16なるほど重ね重ね有難う御座いましす
ありがとうございます!
0430デフォルトの名無しさん
2009/05/29(金) 07:24:08麻呂のクソースが発動しかけたでおじゃるが、却下でおじゃる
0431デフォルトの名無しさん
2009/05/29(金) 09:55:16間違いがあったので、訂正して上げ直した。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9298.txt
0432デフォルトの名無しさん
2009/05/29(金) 11:29:48そうなんです、仕様の制限が厳しくて
>>426
お疲れ様です。
ありがとうございます、参考にさせて頂きます。
0433joyful_age
2009/05/29(金) 15:04:28http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9299.txt
0434デフォルトの名無しさん
2009/05/29(金) 15:49:190435デフォルトの名無しさん
2009/05/29(金) 15:53:26どのような配列か(何を最大とするか)、また、番兵は何かがわからないから無理だよもん。
0436デフォルトの名無しさん
2009/05/29(金) 15:59:33説明不足ですいません。int型の配列で単純に数値比較をして最大のものということです。
申し訳ありませんが「番兵は何かがわからない」という意味が私にはわからないのですが。
0437デフォルトの名無しさん
2009/05/29(金) 16:07:25番兵って要するに余分な配列って事でしょ
何に使うの?
0438デフォルトの名無しさん
2009/05/29(金) 16:20:22データが正数なら、マイナス1とかね。
特に指示がなければ、そういう配列を用意しておいて、最大数を表示するプログラムを書けばいいのではないかな。
0439436
2009/05/29(金) 16:45:38そこでループを終了させる、といった類で使うものです
この番兵を利用しての最大数を検索するうまい書き方がわからなかったので書き込みをしました
色々説明不足ですみません。
0440デフォルトの名無しさん
2009/05/29(金) 16:50:54/*
ここを埋めて引数配列mの要素の最大値(複数の場合は一番若いもの)
を求めるコードを書けm[0]は自由に番兵として使用して良い
*/
}
ってことだね。優秀なここの回答者なら必ず回答してくれる筈
0441デフォルトの名無しさん
2009/05/29(金) 16:56:20m[0]じゃまずいだろ
要するに配列の大きさを渡さずに最大の要素を探せというわけだから
配列の最後が番兵の方が良い
ところで型はint?double?それとも他の型?問題に何も書いて
ないから答えようがないんだけど
それから配列の中身は乱数で初期化するの?どっかから読み込むの?
0442デフォルトの名無しさん
2009/05/29(金) 17:00:45m[0] にかかれている値が番兵であり
m[1] 〜 m[i] までアクセス可能で m[i] == m[0] で終端 という意ではなかろうかと
0443デフォルトの名無しさん
2009/05/29(金) 17:03:00>ここでいう番兵は配列の末尾に自分で設定した値を入れて
>そこでループを終了させる、といった類で使うものです
とあるから配列の末尾が番兵だろ
0444デフォルトの名無しさん
2009/05/29(金) 17:06:53それで配列の大きさはどうやって与えるのですか?
配列の大きさがわからなければ番兵もまた配列の終端に
置く事が不可能なんですけど
0445デフォルトの名無しさん
2009/05/29(金) 17:06:58そうなると、「何の値をもって番兵とするか?」 はコード上で知っていないといけない形なわけだね
で >>440 出題では無理な話になっちゃう
0446436
2009/05/29(金) 17:08:11>>441
intです。
配列の中身はどこからか読み込んでもいいし乱数で初期化してくださっても結構です。
0447デフォルトの名無しさん
2009/05/29(金) 17:10:48配列の取りえる値の範囲が int の取りえる値の範囲 と同じ場合 には番兵使えないよ?
配列終端を意味する値 なのか 正規の値 なのか 区別つかないもの…
0448デフォルトの名無しさん
2009/05/29(金) 17:12:26#include <stdio.h>
#define Banpei -1
#define Max(A,B) (((A)>(B))? A:B)
int GetMax(int* Array){
int max= *Array;
while(1){
if(*Array == Banpei) return max;
max=Max(max,*Array);
Array++;
}
}
int main(){
int Ary[]={8,3,8,8,6,1,Banpei};
int result=0;
result = GetMax(Ary);
printf("Max = %d\n", result);
return 0;
}
0449デフォルトの名無しさん
2009/05/29(金) 17:20:57配列の中身に拘らないのであれば、
「0から100までの乱数を生成する。0が生成されたら、生成を打ちきる。」
というのでどうかね。
番兵は0となる。
0450デフォルトの名無しさん
2009/05/29(金) 18:48:38番兵は何かがわからないとは、番兵をどのように定義していくかってことね。
番兵自体知ってるよん。
intなら、INT_MAXとかINT_MINにでもしておけばいいかしら。
正数しか扱わないのなら、負数(-1)にでもするとかとか。
非ゼロの整数しか扱わないのなら、ゼロ(0)にするとかとか。
使われない値にしないといけないけどよん、
大抵番兵を使うときは、ポインタの配列で最後をNULLとかとか。
envpは、これだよもん。exec*()でも使われてるよん。
文字列終端のNUL('\0')くらいのモノだよもん。
0451残問題
2009/05/29(金) 19:08:14>>381(9282) 複素数のクラス(>>243) 5月30日
期限が過ぎてるもの
>>254(9244) String.insert(i,t) 5月26日
>>016(9214)>>029>>033 CRUD操作のデータベース 5月23日
>>110(9224)>>166 (WinMain)キー入力 5月25日
>>004(9209) ArithmeticPromotionクラス 5月21日
0452デフォルトの名無しさん
2009/05/29(金) 19:11:20珍しいところで 文字列ペアを指し示す都合 \0\0 で終端 ってのが WinAPI にはあるな
"hoge\0pair\0" って渡す変則番兵
0453デフォルトの名無しさん
2009/05/29(金) 19:39:39[2] 問題文(含コード&リンク):�@for文を用いてある元金を預けた時の元利合計を算出するプログラムを作成し、
プログラムを作成しなさい。入力するデータは、元金、金利、年数である。(結果に「元金は〜」というように表示させること。)
�A9個ずつ改行する以下のような九九の表のプログラムを作成しなさい。
1*1=1 1*2=2・・・・・1*9=9
2*1=2 ・・・・
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン:わかりません
[3.3] 言語:C++
[4] 期限:2009年05月31日まで
[5] その他の制限:特になし
よろしくお願いします。
0454デフォルトの名無しさん
2009/05/29(金) 19:52:10>>254には類似が>>373
回答が>>376
0455デフォルトの名無しさん
2009/05/29(金) 19:54:12問題文:プログラムを実行すると「何人ぶんのデータですか?」と表示されるので人数を入力、すると「一人目の国語の点数は?」
と表示されるので一人目の国語の点数を入力
次に「一人目の英語の点数は?」と表示されるので一人目の英語の点数を入力、算数も同様に入力
この手順が人数分繰り返され、全員の国語、英語、算数
の得点を入力し終えると各科目の最高得点とその得点をとった学生が何人目だったか、また合格者の人数と各科目合格者平均点を表示する
ただし三科目の内二科目以上で80点以上のときに合格とする
また人数が0のときは「ただしい人数を入力してください」と表示する
0456デフォルトの名無しさん
2009/05/29(金) 19:59:40環境
OS:windowsvista
コンパイラ名 VisualC++2008
言語 C++
期限:2009 6月 6日
その他の制限
プログラムの流れの繰り返しまで習いました
配列はならっていません
よろしくお願いします
0457デフォルトの名無しさん
2009/05/29(金) 23:13:15[2](1) 学生の体重データweight(小数第1位)を一件ずつ入力し、人数n
と体重の合計kei,heikin,max,minを求め。空欄をうめよ、ただし人数は不明としデータが
なくなった場合0を入力し終了する。また1件目のデータをmax,minの初期値とする
int main(void)
{
float weight, kei=(�@), n=0, heikin, max, min;
while(�A){
printf("体重データを入力して下さい:");
scanf("%f",&weight);
if(�B)break;
(�C);
n++;
if(n==1){
�D;
�E;
}
if(�F)
max=weight;
if(min>weight)
�G;
}
�H;
printf("合計:%6.1f\n人数:%6.0f\n平均:%6.1f\n最大:%6.1f\n最小:%6.1f\n",
kei,n,heikin,max,min);
return 0;
}
0458デフォルトの名無しさん
2009/05/29(金) 23:15:50(2)正の整数nを入力し1〜nの階乗kaijo表示するプログラムを空欄をうめて完成させよ。
int main(void)
{
int kaijo=�@, i=1, n;
printf("n!を求めます.nを入力して下さい:");
scanf("%d", &n);
while(�A)
�B;
printf("%d! = %d\n" ,i, kaijo);
�C;
}
return 0;
}
[3.1] OS:XP
[3.2] コンパイラ名とバージョン: turbo c 5.01
[3.3] 言語: c++
[4] 期限:今週の日曜日まで
[5] その他の制
0459デフォルトの名無しさん
2009/05/29(金) 23:33:02http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9300.txt
0460デフォルトの名無しさん
2009/05/30(土) 00:01:10ありがとうございます!
0461デフォルトの名無しさん
2009/05/30(土) 00:05:26[2] 問題文(含コード&リンク)
木の幅優先探索について考える。
以下の?に何かをいれればプログラムは完成する。
なお、以下のコードはあくまでも参考として使用してよい
(?以外の場所を書き換えて動作させてもよい)
ただし、キューはリングバッファにしなければならない。
#include <stdio.h>
#include <stdlib.h>
#define QUEUE ?
typedef struct{
int child_left;
int child_right;
} NODE;
int left = ? /* RING */
int right = ? /* RING */
void enqueue (int queue[], int d){
queue[right] = d;
right++;
if(?){
printf("Over flow: Queue is full\n");
exit(1);
}
?
}
0462デフォルトの名無しさん
2009/05/30(土) 00:06:39int dequeue(int queue[]){
int x;
if(?){
printf("Underflow: Queue is empty\n");
exit(1);
}
else ?
}
int main(){
int queue[QUEUE]; /*キュー*/
int visit; /* 探索対象ノードnumber */
NODE node[] = { {1,3}, {2,4}, {-1,-1}, {7,5}, {8,10}, {6,9},
{-1,-1}, {-1,-1}, {-1,-1}, {-1,-1}, {-1,-1} };
visit = 0;
enqueue(queue, visit);
while(?){
visit = dequeue(queue);
printf("%d -> ", visit);
if( ? ) /*右の子をキューへ */
if( ? ) /* 左の子をキューへ */
}
printf ("END\n");
return 0;
}
[3] 環境
Linux、gcc、言語はC
[4] 期限: 2009/06/01(月)
おねがいします
0463デフォルトの名無しさん
2009/05/30(土) 00:12:120464デフォルトの名無しさん
2009/05/30(土) 02:51:37http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9301.c
0465デフォルトの名無しさん
2009/05/30(土) 09:21:21(1) http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9302.txt
(2)
#include <iostream>
#include <iomanip>
int main(){
using namespace std;
for(int i = 1; i <= 9; ++i){
for(int j = 1; j <= 9; ++j){
if( j != 1){
cout <<" ";
}
cout <<i <<"*" <<j <<"=" <<setw(2) <<i*j;
}
cout <<endl;
}
return 0;
}
0466デフォルトの名無しさん
2009/05/30(土) 11:25:11ありがとうございます!
0467デフォルトの名無しさん
2009/05/30(土) 12:24:47(1)
�@0
�A1
�Bweight==0
�Ckei+=weight
�Dmax=weight
�Emin=weight
�Fmax<weight
�Gmin=weight
�Hheikin=kei/n
(2)
�@1
�Ai<=n
�Bkaijo*=i
�Ci++
(2)while(�A)の行末に、"{"がもれてない?
0468#
2009/05/30(土) 13:01:22ありがとうございました。
0469デフォルトの名無しさん
2009/05/30(土) 13:40:05ありがとうございます。
0470デフォルトの名無しさん
2009/05/30(土) 15:41:31[2] 以下の雛型、資料を参考にマージソートを行う関数テンプレートを作り、適当な main 関数でテストせよ。
template < typename Itr >
void merge_sort( Itr begin, Itr end )
{
typedef typename iterator_traits<Itr>::value_type VT;
int const cutoff = 1; // データ数が cutoff 以下の時は再帰呼出をやめる。
int n = end - begin; // これでデータ数がわかる。
if ( n <= cutoff ) {
...
}
else {
// 入力データ列を適当に2つに区切って、それぞれをソート
...
merge_sort( .... );
merge_sort( .... );
// 作業用にベクターを用意し、そこに2つのソートされた列をマージする。
vector<VT> x(n);
...
// 最後に x から入力データ領域にコピーする。
...
// vector x は「局所変数」なので、自動的に破棄される。
}
}
[3] Linux gcc C++
[4] 2009年6月1日
[5] insartion_sortを途中で呼び出す
よろしくおねがいします
0471デフォルトの名無しさん
2009/05/30(土) 16:50:22[2] 問題文(含コード&リンク):
char x1,x2;としてこれをwhileで繰り返し、if文でx1==x2 or x1!=x2の判定を
しながら、文字列のランレングス符号化をせよ。出力はaaaであれば、a3とせよ。
[3] 環境
[3.1] OS:UNIX
[3.2] コンパイラ名とバージョン: g++でバージョンはわかりません。
[3.3] 言語: C++
[4] 期限:2009年6月1日
[5] その他の制限: 繰り返し文(for,while)、if文、変数、インクリメント、デクリメント
で書くよう制限されました。
お手数おかけしますが、よろしくお願いします。
0472デフォルトの名無しさん
2009/05/30(土) 17:43:42http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9303.txt
0473デフォルトの名無しさん
2009/05/30(土) 18:06:26472は間違い。直した
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9304.txt
0474デフォルトの名無しさん
2009/05/30(土) 18:51:55#include<stdio.h>
int main(void){
char x1=0, x2=0;
int x, count=0;
while((x=getchar())!=EOF){
x2=x1;
x1=x;
if(x1==x2){
count++;
}else{
if(count>1) printf("%d", count);
printf("%c", x1);
count=1;
}
}
return 0;
}
0475474
2009/05/30(土) 18:53:49#include<stdio.h>
int main(void){
char x1=0, x2=0;
int x, count=0;
while((x=getchar())!=EOF){
x2=x1;
x1=x;
if(x1==x2){
count++;
}else{
if(count>1) printf("%d", count);
printf("%c", x1);
count=1;
}
}
if(count>1) printf("%d", count); // >>474 にこの行を追加した
return 0;
}
0476デフォルトの名無しさん
2009/05/30(土) 19:02:15ありがとございます。
複合の件は
一応、問題文にあったんで出題者の間違いだと思います。
すいません。
0477デフォルトの名無しさん
2009/05/31(日) 00:06:07[2] 問題文: http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9306.txt
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9307.txt
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン:?
[3.3] 言語:C++
[4] 期限:6月3日まで
ほぼプログラム初心者です…
画像処理に詳しい方、おねがい致します。
0478デフォルトの名無しさん
2009/05/31(日) 00:10:57[2] 問題文(含コード&リンク)
ノードの中身を表示しながらトラバースする関数
void preorder(NodePointer node);
void inorder(NodePointer node);
void postorder(NodePointer node);
を再帰を使って書きなさい 。以下のプログラムの関数部分を作れ。
実行例:
% ./a.out
preorder: + 1 * 2 3
inorder: 1 + 2 * 3
postorder: 1 2 3 * +
#include <stdio.h>
#include <stdlib.h>
struct node {
struct node *right;
char key;
struct node *left;
};
typedef struct node * NodePointer;
void treeinitialize(void);
NodePointer makenode(char c);
void preorder(NodePointer node);
void inorder(NodePointer node);
void postorder(NodePointer node);
NodePointer head, tail;
0479デフォルトの名無しさん
2009/05/31(日) 00:13:18int main(){
treeinitialize();
/* テスト用の木を作成 */
head->right=makenode('+');
head->right->left=makenode('1');
head->right->right=makenode('*');
head->right->right->left=makenode('2');
head->right->right->right=makenode('3');
/* トラバース */
printf("preorder: ");
preorder(head->right);
printf("\n");
printf("inorder: ");
inorder(head->right);
printf("\n");
printf("postorder: ");
postorder(head->right);
printf("\n");
return 0;
}
0480デフォルトの名無しさん
2009/05/31(日) 00:14:55void treeinitialize(void){
head=makenode(-1);
tail=makenode(-1);
head->right=tail;
head->left=tail;
}
/*
* ノードを作成し、そのノードへのポインタを返す。
*/
NodePointer makenode(char c){
NodePointer x;
x=malloc(sizeof(struct node));
x->key=c;
x->right=tail;
x->left=tail;
return x;
}
0481デフォルトの名無しさん
2009/05/31(日) 00:15:51}
void inorder(NodePointer node){
}
void postorder(NodePointer node){
}
:
[3] 環境
[3.1] Solaris:
[3.2] gcc バージョンはわかりません
[3.3] C
[4] 期限:2009年6月3日9:00まで
おねがいします
0482デフォルトの名無しさん
2009/05/31(日) 00:54:55ソースでCommonImageIO.hていうのをインクルードしてるけど、
提供されているなら、よろしく
0483デフォルトの名無しさん
2009/05/31(日) 07:02:10全くの初心者で申し訳ないのですが、回答いただいたものをビルドしてもエラーとなってしまいます。
何が問題なのかご教授願えないでしょうか?
0484デフォルトの名無しさん
2009/05/31(日) 09:22:18拡張子を".cpp"にしる
0485デフォルトの名無しさん
2009/05/31(日) 09:37:58"cpp"や"c"にしてみましたがやはりエラーが出ます。
scanfの宣言を確認してください、構文エラーとでているのですがどうすればいいのでしょうか?
よろしければご教授お願いいたします。
コンパイラはvisual C++ 2008 Express Editionというものを使用しました。
0486デフォルトの名無しさん
2009/05/31(日) 09:44:46本当に>>465か?
(1)も(2)もscanf()なんて使ってないわけだが
0487デフォルトの名無しさん
2009/05/31(日) 09:51:39(2)の所でエラーになるならば、全角スペースでエラー出してると思われ
全角スペースを全部半角スペースに置き換えてビルドしてみてください
0488デフォルトの名無しさん
2009/05/31(日) 10:02:101も2も置換してみましたが、今度は全て
構文エラー : '{' が ':' の前にありません
といった内容になってしまいます。
今回はscanfとは出ませんでした。
0489デフォルトの名無しさん
2009/05/31(日) 10:05:58つ 修正したヤツ
拡張子cpp にしてコンパイルしれ
#include <iostream>
#include <iomanip>
using namespace std;
int main(){
for(int i = 1; i <= 9; ++i){
for(int j = 1; j <= 9; ++j){
if( j != 1){
cout <<" ";
}
cout <<i <<"*" <<j <<"=" <<setw(2) <<i*j;
}
cout <<endl;
}
return 0;
}
0490デフォルトの名無しさん
2009/05/31(日) 10:36:06何とか無事にできました。(1)の方はもうよくわからないのでこのまま提出しようと思います。
お手間を取らせてしまい申し訳ありませんでした。ありがとうございました。
0491デフォルトの名無しさん
2009/05/31(日) 15:02:51[2] 問題文:
以下の実行結果を元に、float型変数 f に与えた実数の、
実際に格納されているビット列を表示するプログラムを作成してください。
実行結果:
Size of Float : 4 byte
Size of Int : 4 byte
f=0.500000000000000
00111111000000000000000000000000
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン:VC 6.0
[3.3] 言語: C/C++
[4] 期限: 2009年06月01日まで
お願いします。
0492465
2009/05/31(日) 15:30:28(1)はWin2000のVC6のソースをそのまま上げたんだけどなんだろ?
489で直ったってことは、「using namespace std;」をmainの外に出したらいいのかな?
試そうと思ったら、VC2008は2000じゃ無理と言われてインストールできなかったw
0493デフォルトの名無しさん
2009/05/31(日) 15:35:02#include <stdio.h>
int main()
{
float a = 0;
int i, *b = (int*)&a;
scanf("%f", &a);
for (i = sizeof(a) * 8 - 1; i >= 0; --i) {
printf("%d", *b & (1 << i) ? 1 : 0);
}
printf("\n");
return 0;
}
aに何かを入れとかんと浮動小数点を扱うライブラリがリンクされないらしい。
0494デフォルトの名無しさん
2009/05/31(日) 17:18:00早い対応ありがとうございます
0495デフォルトの名無しさん
2009/05/31(日) 17:45:56[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9308.txt
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン: visual C++
[3.3] 言語: C++
[4] 期限: 火曜日まで
よろしくお願いします
0496デフォルトの名無しさん
2009/05/31(日) 17:57:02ファイル名とキーワードはコマンドライン引数にしたほうがいいの?
0497デフォルトの名無しさん
2009/05/31(日) 19:19:13だから、cinで良いんじゃないの?
0498デフォルトの名無しさん
2009/05/31(日) 19:24:41>>496-497 以前にこれ、行番号っていうからにはテキストファイルなのか?
もしそうなら文字コードは?
0499デフォルトの名無しさん
2009/05/31(日) 19:40:27Windows標準入力で入力可能な文字コードを想定すれば、足りるんじゃ。
0500デフォルトの名無しさん
2009/05/31(日) 19:56:38[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9305.txt
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン:visual studio
[3.3] 言語:C
[4] 期限: 5月31日
0501デフォルトの名無しさん
2009/05/31(日) 20:01:35>>493
0502デフォルトの名無しさん
2009/05/31(日) 20:17:09文字コードはUnicodeでお願いします
0503162
2009/05/31(日) 20:20:32[2] 問題文(含コード&リンク): 林檎が10個以下だと100円。
11個〜100個まで90円。100個以上だと70円。で、買いたい個数を入力して計算せよ。
[3] 環境
[3.1] OS: (Windows/Linux/等々) XP
[3.2] コンパイラ名とバージョン: 不明
[3.3] 言語: C言語
[4] 期限: 6月2日まで
[5] その他:ここまで出来ました。
#include <stdio.h>
int main()
{
int nedan;
printf("林檎を何個買いますか?\n");
scanf("%d", &nedan);
if(nedan<10)nedan=100*nedan;
{
printf("林檎の値段は%d円です。\n");
} if (11<nedan<100)nedan=1000+90*(nedan-10);{
printf("林檎の値段は%d円です。\n");
} if(101<nedan)nedan=9100+70*(nedan-100); {
printf("林檎の値段は%d円です。\n");
}
}
条件の変え方が今一分かりませんでした。
よろしくお願いします。
0504デフォルトの名無しさん
2009/05/31(日) 20:26:5810個で100円=1000円
11個で90円=990円
こうなって良いかい?
0505504
2009/05/31(日) 20:28:250506504
2009/05/31(日) 20:48:22#include <stdio.h>
int main()
{
int kosuu,nedan;
printf("林檎を何個買いますか?\n"); scanf("%d", &kosuu);
if(kosuu<=10) {
nedan=100*kosuu; printf("林檎の値段は%d円です。\n",nedan);
} else if (10<kosuu && kosuu<=100) {
nedan=1000+90*(kosuu-10); printf("林檎の値段は%d円です。\n",nedan);
} else if(100<kosuu) {
nedan=9100+70*(kosuu-100); printf("林檎の値段は%d円です。\n",nedan);
}
return 0;
}
何個買うかの個数と、値段は別の変数にした方が良い。
「11個〜100個まで」の様に範囲を指定する時の比較式に注意
セミコロン";"が変なところにあった。
0508デフォルトの名無しさん
2009/05/31(日) 23:05:40http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9309.cpp
0509デフォルトの名無しさん
2009/05/31(日) 23:29:040511デフォルトの名無しさん
2009/05/31(日) 23:36:04メモリ使用量は30Mバイトまで。 高速な方がよい。
0512デフォルトの名無しさん
2009/05/31(日) 23:37:11以下のプログラムの◆の部分を埋めて完成させてください
掛け算の九九の偶数の段を表示するプログラム
#include<stdio.h>
int main(void)
{
int i, j;
for(i = 2; ◆; i ◆ 2)
{
for(j = 1; j <= 9; ◆)
printf("%d*%d=%2d ", ◆, ◆, i * j);
putchar('\n');
}
return 0;
}
足し算、引き算、掛け算、割り算、余りの計算、表示するプログラム
#include<stdio.h>
int main(void)
{
printf("100 + 200 = %3d\n", ◆);
printf(" 35 - 24 = %3d\n", ◆);
printf(" 10 * 7 = %3d\n", ◆);
printf(" 72 / 8 = %3d\n", ◆);
printf("127 %% 17 = %3d\n", ◆);
return 0;
}
0513デフォルトの名無しさん
2009/05/31(日) 23:47:51#include<stdio.h>
int main(void)
{
int i, j;
for(i = 2; i<=9; i += 2)
{
for(j = 1; j <= 9; j++)
printf("%d*%d=%2d ", i, j, i * j);
putchar('\n');
}
return 0;
}
足し算、引き算、掛け算、割り算、余りの計算、表示するプログラム
#include<stdio.h>
int main(void)
{
printf("100 + 200 = %3d\n", 100+200);
printf(" 35 - 24 = %3d\n", 35-24);
printf(" 10 * 7 = %3d\n", 10*7);
printf(" 72 / 8 = %3d\n", 72/8);
printf("127 %% 17 = %3d\n", 127%17);
return 0;
}
0514デフォルトの名無しさん
2009/05/31(日) 23:49:120515デフォルトの名無しさん
2009/06/01(月) 00:11:07ありがとうございます!本当に助かりました:;
あとすみません、2つ目の問題間違いました・・・
確認せずに書き込んじゃってすみません
変数に代入したデータを計算、表示するプログラム
#include<stdio.h>
int main(void)
{
int a = 10, b = 20, ◆;
kotae = ◆ + ◆;
printf("%d + ◆ = %d\n", ◆, b, kotae);
return 0;
}
ちゃんと勉強しないと・・・
0516デフォルトの名無しさん
2009/06/01(月) 00:17:46面白そうだね。ああっ、興奮しちゃうね、これは。
もう少し詳しく聞かせてもらえないだろうか。
そのテキストファイルが、どのようなモノなのか。ファイルをheadした結果を貼ってもらってもいい。
比較関数は用意されているのか。それともこちらが用意するのか。
用意する場合は、どのような条件で大小あるいは等しいを決めるのか。
サンプルとして、1000MBのテキストファイルを提供していただけるのか。
言語は、C言語(ANSI X3.159 1989, ISO/IEC 9899 : 1999 (E)のいずれか準拠)が良いのか。C++が良いのか。
私は、C言語でないとやる気はしないけどね。
0517デフォルトの名無しさん
2009/06/01(月) 00:42:26途中まで一致する場合。 たとえば XとXYZならば、X00とXYZの比較をします。足らない桁は数字の0で埋めます。
言語はCでもC++でも可です。
テキストはうpは無理なので改行(\n)区切りのどんなテキストでも読み込め速いほど良いです。
0518デフォルトの名無しさん
2009/06/01(月) 01:05:53X一文字の行とX000の行は区別が必要ですよね。
この辺はどうしますか?
strcmpに準じた比較にしますか?
0519デフォルトの名無しさん
2009/06/01(月) 01:17:57つ「足らない桁は数字の0で埋めます。 」
0520デフォルトの名無しさん
2009/06/01(月) 01:38:33スタックがあふれそうだ。
0521デフォルトの名無しさん
2009/06/01(月) 01:39:070522デフォルトの名無しさん
2009/06/01(月) 05:19:46[1] 授業単元:C演習
[2] 問題文(含コード&リンク):
(1) 適当な初期値を代入した整数型の5行5列の行列 A に対して、その転置行列
(行と列を入れ替えたもの)を B とする時,AB を求めよ。
但し、A の初期値を変えた場合も利用できる汎用的なプログラムであること。
(転置行列の各要素・ABの結果の値を直接代入するのはダメという意味)
(2) 大きさ 5 の文字列配列を定義して、適当な文字列5つを代入し、代入した全ての
文字を1文字ずつ表示せよ。全ての文字とは、例えば、"Sunday" と "Monday" を代入した時は、
'S', 'u', 'n', 'd', 'a', 'y', 'M', 'o', 'n', 'd', 'a', 'y' をさす。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語: C
[4] 期限: 6/1 17:00
[5] その他の制限: 配列、ポインタのところでのレポートでした。多分配列とかポインタを使うんだと思います。
基本的な事は一通り習いました、特に制限は無いです。よろしくお願いします
0523デフォルトの名無しさん
2009/06/01(月) 06:29:25変数に代入したデータを計算、表示するプログラム
#include<stdio.h>
int main(void)
{
int a = 10, b = 20, kotae;
kotae = a + b;
printf("%d + %d = %d\n", a, b, kotae);
return 0;
}
0524デフォルトの名無しさん
2009/06/01(月) 07:44:110525デフォルトの名無しさん
2009/06/01(月) 09:35:28(1)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9310.txt
0526デフォルトの名無しさん
2009/06/01(月) 09:45:21(2)
#include <stdio.h>
#include <string.h>
#define N 5
#define MAXLEN 128
int main(void)
{
char str[N][MAXLEN];
int i, j;
puts("文字列を5つ入力して下さい");
for (i = 0; i < N; i++) {
fgets(str[i], MAXLEN, stdin);
str[i][strlen(str[i]) - 1] = '\0'; /* 改行文字を取る */
}
for (i = 0; i < N; i++) {
for (j = 0; j < strlen(str[i]) - 1; j++)
printf("'%c', ", str[i][j]);
printf("'%c'\n", str[i][j]);
}
return 0;
}
0527デフォルトの名無しさん
2009/06/01(月) 12:56:42[2] 問題文(含コード&リンク):正の整数を入力させその整数以下の偶数を昇順で表示するプログラム
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: 不明
[3.3] 言語: C言語
[4] 期限: 6月1日24時まで
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
#include <stdio.h>
int main(void)
{
int i,no;
printf("正の整数を入力してください:");
scanf("%d",&no);
i=0;
while(i<=no);
printf("%d",i++);
putchar('\n');
return 0;
}
偶数ではなくすべての正の整数のところまではやったのですが
偶数限定にする方法がわかりません。
0528デフォルトの名無しさん
2009/06/01(月) 13:02:51奇数だったら printf しない
もしくは
偶数だったら printf する
をループの中に埋め込むだけだが…
>>527 while 直後にセミコロンいて 正常に動作しないコードだぞw
極力元コードを保存した書き方だと
while (i<=no) {
if ((i%2) == 0) printf("%d", i);
i++;
}
こんなもん
# なお 0は偶数に含まれる としている
0529デフォルトの名無しさん
2009/06/01(月) 13:18:54なぜかwhile文から書き込みがあったように変えたのですが
i++の列で不正な文字’ ’と表示されてしまいます;;
0530デフォルトの名無しさん
2009/06/01(月) 13:23:00全角スペース使ってるから 半角スペースとかTABとかにおきかえれ
0531デフォルトの名無しさん
2009/06/01(月) 13:32:080532デフォルトの名無しさん
2009/06/01(月) 13:36:03#include <stdio.h>
int main(void)
{
int i,no;
printf("正の整数を入力してください:");
scanf("%d",&no);
for(i=1;i<=no;i++){
if(!(i%2))
printf("%d \n",i);
}
return 0;
}
0533デフォルトの名無しさん
2009/06/01(月) 13:38:5420 dim i,no
30 input "正の整数を入力して下さい",no
40 for i=1 to no
50 if( i mod 2<>0)then print i
60 next i
0534デフォルトの名無しさん
2009/06/01(月) 13:40:34すごく単純なことでした
それなのに丁寧なレスありがとうございした!
>>532さんもありがとうございました!
このスレは連続で他の課題も聞いていいんですかね?
0535デフォルトの名無しさん
2009/06/01(月) 13:46:460536デフォルトの名無しさん
2009/06/01(月) 13:57:54[2] 問題文(含コード&リンク):整数値を入力して,その整数回「私の名前は○○です(1 回目) として,改行するプログラム.1回
目の1 は,2回目,3 回目と増やし,名前の部分は自分の名前にすること
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: 不明
[3.3] 言語: C言語
[4] 期限: 6月1日24時まで
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
#include <stdio.h>
int main(void)
{
int no;
printf("正の整数を入力してください:");
scanf("%d",&no);
while(no-->0)
putchar('*');
putchar('\n');
return (0);
}
※印を整数文表示させるプログラムまではできましたが
文字列をいれると「文字列定数は 1 文字か 2 文字でなければならない」とでてしまうことと
改行ができません;;
0537デフォルトの名無しさん
2009/06/01(月) 14:29:42[2] 問題文(含コード&リンク):http://www.mns.kyutech.ac.jp/~kamada/suuributuri/sub6.html
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:やっぱりよく分からん
[3.3] 言語:どちらでも可
[4] 期限:6/5
[5] その他の制限:特になし
オイラー法と台形法のプログラムの違いも教えてもらうと助かります。
0538デフォルトの名無しさん
2009/06/01(月) 14:31:21#include <stdio.h>
int main(void)
{
int no,count=0;
printf("正の整数を入力してください:");
scanf("%d",&no);
while(count++<no)
printf("私の名前は○○です(%d回目)\n",count);
return (0);
}
0539デフォルトの名無しさん
2009/06/01(月) 14:47:17[2] 問題文(含コード&リンク): 一人のデータが
学番 名前 国語 数学 英語
であるとき、不特定多数のデータを入力して、
各教科ごとの平均値、各人の成績計、その平均値を表示する。
入力データもまとめて後で表示する。
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン:TurboC++
[3.3] 言語: C++
[4] 期限: 2009年6月3日
[5] その他の制限:カウンターなるもの
0540デフォルトの名無しさん
2009/06/01(月) 14:48:35#include<stdio.h>
#include<conio.h>
void main(void)
{ float x, s=0.0, aver;
int i, z, c=0;
for(i=0;i<100;i++)
{ z=scanf("%f",&x);
if(z==EOF)goto flag1;
s=s+x;
c=c+1;
}
flag1:
printf("データの個数は%d個",c);
printf("\nデータの合計は%f",s);
aver=s/(float)c; // この方法は一時的に型を変更する手法でキャストという
printf("\nデータの平均値は%f",aver);
getchar();
getchar();
}
このような形にして提出させるのが教授の意図のようです。
よろしくお願いします。
0541デフォルトの名無しさん
2009/06/01(月) 17:00:54[2] 問題文(含コード&リンク):
課題は2問になります。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9312.zip
[3] 環境
[3.1] OS:Windows XP
[3.2] コンパイラ名とバージョン:Visual Studio 2005
[3.3] 言語:C++
[4] 期限:6/3
[5] その他の制限:
お手数かけますが、宜しくお願いします。
[2] 問題文(含コード&リンク):http://www.dotup.org/uploda/www.dotup.org85093.zip.html
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:VC 6.0
[3.3] 言語:C
[4] 期限:2009/06/12
[5] その他の制限:ポインタ・構造体まで使用可
パスワードは「c」です,お手数をおかけしてすみません.
課題内容についてはダウンロードしたファイルを見てください.
課題は全3題で,自分なりに考えてはみたのですが(やったところまでのファイルも入ってます),結局何をすればいいのか分からずに全くダメでした.
かなり面倒な課題だと思うのですが,よろしければお願いします.
0543デフォルトの名無しさん
2009/06/01(月) 18:20:21#include <iostream>
using namespace std;
#define N_INPUT 5
int main()
{
int id;
int height;
int maxHeight = 0;
int maxHeightId = 0;
for(int i=0; i<N_INPUT; i++) {
cout << i+1 << "人目の学籍番号を入力:"; cin >> id;
cout << "身長を入力(cm):"; cin >> height;
if(maxHeight < height) {
maxHeight = height;
maxHeightId = id;
}
}
cout << endl;
cout << "一番背が高いのは" << maxHeightId << endl;
return 0;
}
0544デフォルトの名無しさん
2009/06/01(月) 18:25:57でもこれじゃ配列意味ないね。
#include <iostream>
using namespace std;
#define N_INPUT 5
int main()
{
int data[N_INPUT][2];
int maxHeight = 0;
int maxHeightId = 0;
for(int i=0; i<N_INPUT; i++) {
cout << i+1 << "人目の学籍番号を入力:"; cin >> data[i][0];
cout << "身長を入力(cm):"; cin >> data[i][1];
if(maxHeight < data[i][1]) {
maxHeight = data[i][1];
maxHeightId = data[i][0];
}
}
cout << endl;
cout << "一番背が高いのは" << maxHeightId << endl;
return 0;
}
0545デフォルトの名無しさん
2009/06/01(月) 19:00:44#include <iostream>
#include <iomanip>
using namespace std;
#define N_INPUT 3
int main()
{
int data[N_INPUT][2];
float BMI[N_INPUT];
int i=0;
for(i=0; i<N_INPUT; i++) {
cout << i+1 << "人目の身長を入力(cm):"; cin >> data[i][0];
cout << "体重を入力(kg):"; cin >> data[i][1];
BMI[i] = ((float)data[i][1] * 10000) / (data[i][0] * data[i][0]);
}
cout << endl;
cout.width(6); cout << "番号";
cout.width(6); cout << "身長";
cout.width(6); cout << "体重";
cout.width(8); cout << "BMI" << endl;
cout.setf(ios::right, ios::adjustfield);
cout.setf(ios::showpoint);
for(i=0; i<N_INPUT; i++) {
cout.width(6); cout << i;
cout.width(6); cout << data[i][0];
cout.width(6); cout << data[i][1];
cout.width(8); cout << setprecision(4) << BMI[i] << endl;
}
return 0;
}
0546541
2009/06/01(月) 20:21:56すみません。
どちらもなんですが、
2行目のusing namespaceという関数は習ってないのでもう少しシンプルになりませんでしょうか。
また、最初は#include<stdio.h>で始めていただけますでしょうか。
0547デフォルトの名無しさん
2009/06/01(月) 20:30:18[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9314.txt
[3] 環境
[3.1] OS: Windows XP
[3.3] 言語: C言語
[4] 期限:6月2日午前10時まで
[5] for文、while文、do-while文まで習いました
C言語初心者で申し訳ないのですがよろしくお願いします
0548デフォルトの名無しさん
2009/06/01(月) 20:47:11[2] 問題文:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9306.txt
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9307.txt
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9315.txt
ヘッダー:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9316.txt
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン:?
[3.3] 言語:C++
[4] 期限:6月3日まで
>>477です。
ヘッダーがあったので追加でアップしました。
画像処理に詳しい方、どうかよろしくお願いしますm(_ _)m
0549初者
2009/06/01(月) 20:49:20[1]C++
[2]締切:6/3 13:30
[3]問題文
�@2つの4行4列の行列が与えられたとき、
その積を計算するプログラムをwhileループとインクリメント演算子を用いて作成しなさい。
(※ヒント whileループは行列をキーボードから入力するためにも用いる)
�A3項演算子として __ ? __ : __ が存在する。この演算子を用いて次のプログラムを作成しなさい。
(1)変数a,bをキーボードから入力し、小さいほうを出力するプログラム
(2)変数a,b,cをキーボードから入力し、最小値を出力するプログラム
�Bwhileループと複合代入演算子を用いて、等差数列 1+3+5+7+・・・・・・+9999を計算するプログラムを作成しなさい。
�C�Bのプログラムを実行した結果はいくらになるか?
�D型変換として、算術演算子のオペランドの一つがdoubleで、片方がintであれば、
int型のオペランドはdouble型に変換されて、計算される。 下記は例である。
int a;
float b;
a=(int)b
また、下記のようにすると、
int a=5,b=3;
float c,d;
c=a/b;
d=a/(float)b
で値が異なる。 この値が異なることをプログラムを組むことによって確かめなさい。
�Dに関して言うと問題文の意味すら理解不能なので、解説も頂けると幸いです。
0550デフォルトの名無しさん
2009/06/01(月) 20:50:23ありえないとは言わないが、本当にC++なのか?
0551デフォルトの名無しさん
2009/06/01(月) 20:58:58講義名をC++と銘打って入出力にstdio.hなんてよくあることだろ
駄目な理由があるのか?
>>541 no.1
#include <stdio.h>
#define N_INPUT 5
int main()
{
int data[N_INPUT][2];
int maxHeight = 0;
int maxHeightId = 0;
int i;
for(i=0; i<N_INPUT; i++) {
printf("%d人目の学籍番号を入力:", i+1);
scanf("%d", &data[i][0]);
printf("身長を入力(cm):");
scanf("%d", &data[i][1]);
if(maxHeight < data[i][1]) {
maxHeight = data[i][1];
maxHeightId = data[i][0];
}
}
printf("\n");
printf("一番背が高いのは%d\n", maxHeightId);
return 0;
}
0552鳥取の砂人
2009/06/01(月) 21:03:58【2】締切:6/10
【3】問題文↓
�T:2つの4行4列の行列が与えられたとき、その積を計算するプログラムをforループを用いて作成せよ。
(行列の成分はキーボードから入力するものとする)
�U:n!とnCmを計算するプログラムをdo while文とデクリメント演算子を用いて作成せよ。
(n!の変数n、nCmの変数n,mはキーボードから入力するものとする)
よろしくです。
0553デフォルトの名無しさん
2009/06/01(月) 21:12:52#include <stdio.h>
#define N_INPUT 3
int main()
{
int data[N_INPUT][2];
float BMI[N_INPUT];
int i=0;
for(i=0; i<N_INPUT; i++) {
printf("%d人目の身長を入力(cm):", i+1);
scanf("%d", &data[i][0]);
printf("体重を入力(kg):");
scanf("%d", &data[i][1]);
BMI[i] = ((float)data[i][1] * 10000) / (data[i][0] * data[i][0]);
}
printf("\n");
printf("番号");
printf(" 身長");
printf(" 体重");
printf(" BMI ");
printf("\n");
for(i=0; i<N_INPUT; i++) {
printf("%4d", i+1);
printf("%6d", data[i][0]);
printf("%6d", data[i][1]);
printf(" ");
printf("%.2f", BMI[i]);
printf("\n");
}
return 0;
}
0554デフォルトの名無しさん
2009/06/01(月) 21:20:1120 dim Data(N_INPUT,2),BMI(N_INPUT)
30 for i=0 to N_INPUT-1
40 print i+1;"人目の身長を入力(cm):";:input "";data(i,0)
50 print "体重を入力(kg):";:input "";data(i,1)
60 BMI(i)=(data(i,1)*10000)/(data(i,0)*data(i,0))
70 next
80 print
90 print "番号";:print "体重";:print("BMI")
100 for i=0 to N_INPUT-1
110 print using "#### ###### ######";i+1,data(i,0),data(i,1),BMI(i)
120 next
0555デフォルトの名無しさん
2009/06/01(月) 21:48:57#include <stdio.h>
#define LENGTH 4
void GetMatrix(int matrix[LENGTH][LENGTH]){ int x, y;
for (y=0; y<LENGTH; y++){
for (x=0; x<LENGTH; x++){
printf("x = %d, y = %d: ", x, y);
scanf("%d", &matrix[x][y]);
}
}
}
void PrintMatrix(int matrix[LENGTH][LENGTH]){ int x, y;
for (y=0; y<LENGTH; y++){
for (x=0; x<LENGTH; x++) printf("%d\t", matrix[x][y]);
printf("\n");
}
}
void MultiplyMatrix(int a[LENGTH][LENGTH], int b[LENGTH][LENGTH], int out[LENGTH][LENGTH]){ int x, y, z;
for (y=0; y<LENGTH; y++)
for (x=0; x<LENGTH; x++){
out[x][y] = 0;
for (z=0; z<LENGTH; z++) out[x][y] += a[z][y] * b[x][z];
}
}
void main(){ int matrixA[LENGTH][LENGTH] = {0};int matrixB[LENGTH][LENGTH] = {0};int matrixOut[LENGTH][LENGTH] = {0};
printf("行列Aを入力: \n"); GetMatrix(matrixA);
printf("\n行列Bを入力: \n"); GetMatrix(matrixB); printf("\n\n");
MultiplyMatrix(matrixA, matrixB, matrixOut);
PrintMatrix(matrixA); printf("*\n");
PrintMatrix(matrixB); printf("=\n");
PrintMatrix(matrixOut);
}
0556デフォルトの名無しさん
2009/06/01(月) 21:55:32#include <stdio.h>
void main()
{
int n, i, v;
printf("階乗: ");
scanf("%d", &n);
i=1;v=1;
while (i<=n){
v*=i;
i++;
}
printf("%d! = %d", n, v);
}
0557デフォルトの名無しさん
2009/06/01(月) 22:02:38[2] 問題文(含コード&リンク):
無限ループを用い、1〜50までの数値を任意に10個入力し、その度数分布を求めよ。但し、度数分布は10等分(例;1〜10に4個, 11〜20に3個, 21〜30・・・41〜50に0個)して表示せよ。
[3] 環境
[3.1] OS:linux
[3.2] コンパイラ名とバージョン: 不明
[3.3] 言語:C
[4] 期限:6/4
[5] その他の制限:1〜50以外の数字が入力されたときの処理は考えなくていいそうです
0558鳥取の砂人
2009/06/01(月) 22:13:02printf,scanfを使わない方法でお願いしします。
cout,cinでお願いします。
0559デフォルトの名無しさん
2009/06/01(月) 22:13:42#include <stdio.h>
int CalcPermutation(int n, int m)
{
int i, v;
v = 1;
i = n;
while (i>m) {
v *= i;
i--;
}
return v;
}
void main()
{
int n, m, c;
printf( "n: " );
scanf( "%d", &n );
printf( "m: " );
scanf( "%d", &m );
c = CalcPermutation(n, m) / CalcPermutation(n - m, 1);
printf("%dC%d = %d", n, m, c);
rewind(stdin);
getchar();
}
0560デフォルトの名無しさん
2009/06/01(月) 22:15:51記述方法に指定があるんなら始めから書いとけよ
0562デフォルトの名無しさん
2009/06/01(月) 22:24:51と、思ったら>>1に書いてあるじゃない。
>>・後から問題に付け足しするのはコラー!!です。付け足しは作業を無駄にしがちです。
気をつけようね♪
0563デフォルトの名無しさん
2009/06/01(月) 22:25:20�D
int同士の計算は整数なので小数点以下は切り捨てられる
5/3=1
10/3=3
計算のどちらか片一方がdoubleだと、doubleとしての計算になるから
5/3.0=1.6666666666666....
10/3.0=3.333333333333.....
上と比べて端数の分だけ値が違う
0564デフォルトの名無しさん
2009/06/01(月) 22:42:51http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9317.txt
0565デフォルトの名無しさん
2009/06/01(月) 22:47:45#include <stdio.h>
int main()
{
int i, n, max, sum;
printf("n: "); scanf("%d", &n);
printf("max: "); scanf("%d", &max);
sum = 0;
for(i=n;i<=max&&sum<=100;i+=n){
sum += i;
}
if(sum<=100) printf("sum=%d, less than 100\n", sum);
else printf("from %d to %d, sum=%d\n", n, i-n, sum);
return 0;
}
0566デフォルトの名無しさん
2009/06/01(月) 22:55:10#include <stdio.h>
int main()
{
int i, j, n;
printf("n: "); scanf("%d", &n);
for(i=1;i<=n;i++){ for(j=0;j<i;j++) putchar('*'); putchar('\n');}
return 0;
}
/* putchar('*');がだめならprintf("*")に替えても可 */
0567デフォルトの名無しさん
2009/06/01(月) 23:18:30[2] 問題文:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9318.txt
[3] 環境
[3.1] OS: Windows xp
[3.2] コンパイラ名とバージョン: Visual Studio
[3.3] 言語: C
[4] 期限: 6月3日まで
0568567
2009/06/01(月) 23:19:340569デフォルトの名無しさん
2009/06/02(火) 00:03:09[2] 問題文:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9319.txt
を用いて50コの数値を取り、30以上40未満または70以上80未満の数値の個数を求めるプログラムを作れ
[3] 環境
[3.1] OS: Windows Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 6月4日まで
[5] その他の制限:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9319.txt
のファイル名はseiseki.txtでお願いします
0570デフォルトの名無しさん
2009/06/02(火) 00:13:45[2] 問題文(含コード&リンク):
仕様書
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9292.txt
ソースコード
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9322.txt
[3] 環境
[3.1] OS: Windows2000 SP4
[3.2] コンパイラ名とバージョン: ビジュアルC++6.0
[3.3] 言語: C言語
[4] 期限: 2009年6月一週目ぐらいまで
[5] その他の制限: File構造体を使用
どうも、
>>417において、質問させて頂いたものですが、
ご指摘をお受けした部位などを自分で修正したのですが、
わからなくなってしまいまして、
出来れば修正箇所のご指摘をして頂きたいと思います。
宜しくお願いします。
0571デフォルトの名無しさん
2009/06/02(火) 00:17:25久しぶりに作ったから間違ってるか検算してくれ。あと動作の保障はしない。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9323.zip
0572デフォルトの名無しさん
2009/06/02(火) 00:23:27ただ単位量を足したり引いたりするだけの時は、前置演算子を使う癖を付けた方がいいよ。
0573デフォルトの名無しさん
2009/06/02(火) 00:30:18C++だと両方とも使えるから質問テンプレにどっちなのかを書かせたほうがよくないか?
0574デフォルトの名無しさん
2009/06/02(火) 00:39:00有難うございます!
この前習った形に限りなく近いです。助かりましたm(_ _)m
0575123to
2009/06/02(火) 00:43:45ありがとうございました
0576デフォルトの名無しさん
2009/06/02(火) 00:47:22いいと思う。cout、cinってなに?な人向けになるだろうから
習ったのは#include <stdio.h>か#include <iostream>か書かせるほうがいいかも
さすがに#include <iostream.h>を教えてるところはもうないよな?
0577デフォルトの名無しさん
2009/06/02(火) 00:50:19後置演算子になれてしまって修正が大変ですなぁ。
0578デフォルトの名無しさん
2009/06/02(火) 00:56:28こんな感じで。動作は保障しない。
#include <stdio.h>
#include <string.h>
int main(){
char buf[1024];
char *p=NULL;
int Val[1024]={0,};
int V=0;
FILE *fp = fopen("seiseki.txt","rt");
if(fp ==NULL){
puts("can't open file");
return -1;
}
while(fgets(buf,1024,fp) != NULL){
p=strtok(buf," \n");
while(p!= NULL){
sscanf(p,"%d",&V);
//printf("%d ",V);
Val[V/10]++;
p=strtok(NULL," \n");
}
}
fclose(fp);
printf("30以上40未満 => %d個\n",Val[3]);
printf("70以上80未満 => %d個\n",Val[7]);
return 0;
}
0579デフォルトの名無しさん
2009/06/02(火) 00:59:40#include<stdio.h>で始めてprintfやscanfを使用した形にしてはいただけないでしょうか?
後から制限を付け加える形になってしまい申し訳ありません。
よろしくお願いします。
0581デフォルトの名無しさん
2009/06/02(火) 01:28:45http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9324.txt
氏名のサイズ、10バイトでは小さすぎるようなら
8行目の name[MAX_DATA][10] の10を増やし、
18行目の、「名前 国語」の間を広げ、
21行目の%-10sを適時増やしてくださいね。
0582デフォルトの名無しさん
2009/06/02(火) 01:33:05[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9325.txt
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: Visual C++6.0
[3.3] 言語: C++言語
[4] 期限: できるだけはやく
[5] その他の制限:
よろしくお願いします。
0583渋谷
2009/06/02(火) 01:54:56[2]締切:6/3 13:30
[3]問題文
以下の問題はprintf scanfを用いらず、cin coutを使用しなさい
�@2つの4行4列の行列が与えられたとき、
その積を計算するプログラムをwhileループとインクリメント演算子を用いて作成しなさい。
(※ヒント whileループは行列をキーボードから入力するためにも用いる)
�A3項演算子として __ ? __ : __ が存在する。この演算子を用いて次のプログラムを作成しなさい。
(1)変数a,bをキーボードから入力し、小さいほうを出力するプログラム
(2)変数a,b,cをキーボードから入力し、最小値を出力するプログラム
�Bwhileループと複合代入演算子を用いて、等差数列 1+3+5+7+・・・・・・+9999を計算するプログラムを作成しなさい。
�C�Bのプログラムを実行した結果はいくらになるか?
�D型変換として、算術演算子のオペランドの一つがdoubleで、片方がintであれば、
int型のオペランドはdouble型に変換されて、計算される。 下記は例である。
int a;
float b;
a=(int)b
また、下記のようにすると、
int a=5,b=3;
float c,d;
c=a/b;
d=a/(float)b
で値が異なる。 この値が異なることをプログラムを組むことによって確かめなさい。
よろしくお願いします。
0584デフォルトの名無しさん
2009/06/02(火) 02:25:16丁寧な説明までつけて下さって助かります。ありがとうございました。
0585デフォルトの名無しさん
2009/06/02(火) 02:29:19[3] 環境
[3.1] OS: Windows XP
[3.2] Borland C++ Compiler 5.5
[3.3] Cのみ
[4] 2009年06月04日16:00まで
[5] 特になし
-----
[2] アルファベットの置換
char x[2][26] = {
"ETAOINSRHLDUCFMWYGPBVKXJQZ", // x
"LCQEBFVXGAMHSPUJWYORTDZINK" // f(x)
};
char a[] = { "(英文)"};
ランダムなアルファベットのデータ2つを使い、
全単射の変換をするのがプログラムの目的です。
(xの関係を用いてaを置換する。)
1対1の置換はうまくいくのですが、
うまく表全体を対応関係にすることが出来ません。
どうしたらうまく対応させて変換が出来ますか?
よろしくお願いします。
0586デフォルトの名無しさん
2009/06/02(火) 02:32:100587デフォルトの名無しさん
2009/06/02(火) 02:40:14メモリ負荷がすごいので用途に応じてカスタマイズしてください。あと動作の保障はしない。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9326.zip
0588デフォルトの名無しさん
2009/06/02(火) 06:30:50C++指定で #include <stdio.h> は普通に考えておかしくないか?
せめて #include <cstdio> だろ?
0589デフォルトの名無しさん
2009/06/02(火) 07:25:45#include <stdio.h>
#include <ctype.h>
void translate(unsigned char a[], const unsigned char from[26], const unsigned char to[26])
{
unsigned char map[256];
int i;
for(i=0;i<256;i++) map[i]=i;
for(i=0;i<26;i++) map[toupper(from[i])]=toupper(to[i]);
for(i=0;i<26;i++) map[tolower(from[i])]=tolower(to[i]);
for(i=0;a[i];i++) a[i]=map[a[i]];
}
int main(void)
{
char x[2][26] = {
"ETAOINSRHLDUCFMWYGPBVKXJQZ", // x
"LCQEBFVXGAMHSPUJWYORTDZINK" // f(x)
};
char a[]="This is a pen.";
puts(a);
translate(a, x[0], x[1]);
puts(a);
translate(a, x[1], x[0]);
puts(a);
return 0;
}
0590デフォルトの名無しさん
2009/06/02(火) 08:04:06普通に考えてそのように勝手に標準化することがオカシイ
0591デフォルトの名無しさん
2009/06/02(火) 08:40:34[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9327.txt
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C/C++
[4] 期限: 本日23:30まで
[5] その他の制限: 特にありません。
よろしくお願いいたします。
0592デフォルトの名無しさん
2009/06/02(火) 09:43:19[2] 問題文(含コード&リンク):本学の成績のつけ方は60点未満が「F」,70点未満が「C」,80点未満が「B」,90点未満が「A」,100点以下が「S」となる.キーボードから入力した点数に応じて画面に成績を出力するプログラムを作成せよ.
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語: C
[4] 期限: 2009年6月5日9時まで
[5] その他の制限: if else文とelse if文の2パターンをお願いします。
よろしくお願いします。
0593デフォルトの名無しさん
2009/06/02(火) 09:57:41#include <stdio.h>
#include <stdio.h>
char seiseki( char *tokuten){
int n;
if(tokuten==NULL) exit(0);
n=atoi(tokuten);
if(n<60) return 'F';
if(n<70) return 'C';
if(n<80) return 'B';
if(n<90) return 'A';
return 'S';
}
int main(void){
char s[256];
for(;;) printf("%c",seiseki(fgets(s,256,stdin)));
return 0;
}
0594デフォルトの名無しさん
2009/06/02(火) 10:01:4720 if len(s)=0 then end
30 n=val(tokuten)
40 if n<60 c='F' :return
50 if n<70 c='C' :return
60 if n<80 c='B' :return
70 if n<90 c='A':return
80 c='S':return
90 input "";s:gosub 20:print c;:goto 90
0595デフォルトの名無しさん
2009/06/02(火) 10:04:07else if(n<70) return 'C';
else if(n<80) return 'B';
else if(n<90) return 'A';
else
return 'S';
でも動くよ
0596デフォルトの名無しさん
2009/06/02(火) 10:16:41[2] テキストファイルの4行目の文字を別のファイルに表示
例 テキストファイルに
asdfg
werty
zxcvb
ertyu
ojh
とあったら別のファイルに
ertyuと表示
[3] 環境
[3.1] Window
[3.2] VisualC++
[3.3]C
[4] 期限: 6月3日
0597デフォルトの名無しさん
2009/06/02(火) 10:30:38ファイルに表示ってどう言う意味だ
0598デフォルトの名無しさん
2009/06/02(火) 11:52:25#include <stdio.h>
int main(void)
{
char buf[1024];
FILE *inf, *outf;
inf = fopen("file1.txt", "r");
fgets(buf, 1024, inf);
fgets(buf, 1024, inf);
fgets(buf, 1024, inf);
fgets(buf, 1024, inf);
outf = fopen("file2.txt", "w");
fprintf(outf, "%s", buf);
fclose(outf);
fclose(inf);
return 0;
}
0599デフォルトの名無しさん
2009/06/02(火) 11:54:56[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9328.txt
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: VC
[3.3] 言語: C++
[4] 期限: 6月2日19時まで
[5] その他の制限: ポインタの習いはじめです。
2問ありますがよろしくお願いします。
0600デフォルトの名無しさん
2009/06/02(火) 12:24:10課題1
void sort(int *a, int *b)
{
int tmp;
if(*a<*b){
tmp=*a;
*a=*b;
*b=tmp;
}
}
0601デフォルトの名無しさん
2009/06/02(火) 12:25:52課題2で mult と mlut ってあるけど打ち間違いかな
0602デフォルトの名無しさん
2009/06/02(火) 12:57:56すいません
打ち間違えましたmlutでお願いします。
>>600
どうもありがとうございます。
助かりました。
0603デフォルトの名無しさん
2009/06/02(火) 13:01:16課題2
#include <stdio.h>
int mult(int *,int *);
int main(void)
{
int a[4]={1,2,3,4}, b[4]={4,3,2,1};
int i,sum=0;
for(i=0; i<4; i++)
{
sum+=mult(&a[i],&b[i]);
}
printf("答え:%d",sum);
return 0;
}
int mult(int *x,int *y)
{
return *x * *y;
}
0604デフォルトの名無しさん
2009/06/02(火) 13:32:35[2] 問題文: 以下の時に最小2乗法によりm次の多項式近似を行うプログラムを作成せよ
プログラムにより得られた近似式についてはデータと合わせてプロットした
グラフも作成する
x=−2のときy=3.02
x=−1のときy=0.98
x=0のときy=1.22
x=1のときy=2.16
x=2のときy=2.61
[3] 環境
[3.1] OS: WindowsXP
[3.2] よく分かりません
[3.3] 言語: C
[4] 期限: 6月5日まで
[5] その他の制限: 特にありません
よろしくお願いします
0605デフォルトの名無し
2009/06/02(火) 14:15:29[2]問題文:
�T.2つの4行4列の行列が与えられたとき、
その積を計算するプログラムをwhileループとインクリメント演算子を用いて作成しなさい。
(※ヒント whileループは行列をキーボードから入力するためにも用いる)
�U.3項演算子として __ ? __ : __ が存在する。この演算子を用いて次のプログラムを作成しなさい。
(1)変数a,bをキーボードから入力し、小さいほうを出力するプログラム
(2)変数a,b,cをキーボードから入力し、最小値を出力するプログラム
[3]環境
OS:WindowsXP 言語:C++
[4]期限:6/4 01:00
[5]その他の制限:printf scanfではなくcout cinでお願いします。
0606デフォルトのnanasisan
2009/06/02(火) 14:25:11[1]授業:プログラミング
[2]問題文:
�T.whileループと複合代入演算子を用いて、
等差数列 1+3+5+7+・・・・・・+9999を計算するプログラムを作成しなさい。
�U.�Tのプログラムを実行した結果はいくらになるか?
[3]環境
1.OS:WindowsXP
2.
3.言語:C++
[4]期限:6/3 16:00
[5]その他の制限:printf scanfではなくcout cin
0607糞ーすにつき注意
2009/06/02(火) 14:45:56#include <iostream>
#include <iomanip>
int main(void){
int sum=0,i=0,n=0;
while( (n=2*(i++)+1)<=9999 ) sum+=n;
cout << sum <<endl;
return 0;
}
こんなの動かすまでもなく
1+3+5+7+...+9999
=
9999+9997+....+1
和の2倍=(1+9999)+(3+9997)+(5+9995)+...(9999+1)
=10000*5000/2=25000000
0608糞ーすにつき注意
2009/06/02(火) 14:48:04while( (n=n+2)<=9999 ) sum+=n;
としなかったのは趣味の問題
0609デフォルトの名無しさん
2009/06/02(火) 15:27:53そことなく言い回すから良いんじゃねーかYO!
0610デフォルトのnanasisan
2009/06/02(火) 16:10:10ありがとうございます。
もう一つお願いします。
[1]授業:プログラミング
[2]問題文:
型変換として、算術演算子のオペランドの一つがdoubleで、片方がintであれば、
int型のオペランドはdouble型に変換されて、計算される。 下記は例である。
int a;
float b;
a=(int)b
また、下記のようにすると、
int a=5,b=3;
float c,d;
c=a/b;
d=a/(float)b
で値が異なる。 この値が異なることをプログラムを組むことによって確かめなさい。
[3]環境
1.OS:WindowsXP
2.
3.言語:C++
[4]期限:6/3 16:00
[5]その他の制限:printf scanfではなくcout cinで
0611591
2009/06/02(火) 16:15:232〜4お願いします。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9327.txt
0612デフォルトの名無しさん
2009/06/02(火) 16:33:40こういうこと?
#include <iostream>
using namespace std;
int main()
{
int a = 5;
int b = 3;
float c, d;
c = a/b;
d = a/(float)b;
cout << "c is " << c << endl;
cout << "d is " << d << endl;
return 0;
}
0613デフォルトの名無しさん
2009/06/02(火) 16:48:36II-(1)
#include <iostream>
using namespace std;
int main()
{
int a,b;
cout << "input a=";
cin >> a;
cout << "input b=";
cin >> b;
cout << "小さいのは" << ((a < b) ? "a=" : "b=") << ((a < b) ? a : b) << "です" << endl;
return 0;
}
II-(2)
#include <iostream>
using namespace std;
int main()
{
int a,b,c;
cout << "input a=";
cin >> a;
cout << "input b=";
cin >> b;
int minValue = (a < b) ? a : b;
cout << "input c=";
cin >> c;
minValue = (c < minValue) ? c : minValue;
cout << "最小値は" << minValue << "です" << endl;
return 0;
}
0614デフォルトのnanasisan
2009/06/02(火) 16:55:29ありがとうございます。
もう一つだけお願いします。605に全く同じ問題がありますが。。。
[1]授業:プログラミング
[2]問題文:
�T.2つの4行4列の行列が与えられたとき、
その積を計算するプログラムをwhileループとインクリメント演算子を用いて作成しなさい。
(※ヒント whileループは行列をキーボードから入力するためにも用いる)
�U.3項演算子として __ ? __ : __ が存在する。この演算子を用いて次のプログラムを作成しなさい。
(1)変数a,bをキーボードから入力し、小さいほうを出力するプログラム
(2)変数a,b,cをキーボードから入力し、最小値を出力するプログラム
[3]環境
1.OS:WindowsXP
2.
3.言語:C++
[4]期限:6/3 16:00
[5]その他の制限:printf scanfではなくcout cinで
0615デフォルトの名無しさん
2009/06/02(火) 17:00:54行列の値の型は?
0616デフォルトのnanasisan
2009/06/02(火) 17:17:58型??分かりません。
課題のプリントには『配列と呼ばれる箱を用いると便利である。』と書いてありますが。。。
0617デフォルトの名無しさん
2009/06/02(火) 17:35:31#include <iostream>
using namespace std;
#define N 4
typedef int ELEMENT;
void matXmat(ELEMENT result[N][N], ELEMENT a[N][N],ELEMENT b[N][N]) {
int i = 0;
while(i<N) {
int j = 0;
while(j<N) {
int k = 0;
while(k<N) {
result[i][j] += a[i][k] * b[k][j];
++k;
}
++j;
}
++i;
}
}
void initMatrix(ELEMENT target[N][N]) {
int j = 0;
while(j<N) {
int i = 0;
while(i<N) {
target[i][j] = 0;
++i;
}
++j;
}
}
0618デフォルトの名無しさん
2009/06/02(火) 17:36:40void createMatrix(ELEMENT target[N][N]) {
int j = 0;
while(j<N) {
int i = 0;
while(i<N) {
cout << "element(" << i << ", " << j << "):"; cin >> target[i][j];
++i;
}
++j;
}
}
void printMatrix(ELEMENT target[N][N]) {
int j = 0;
while(j<N) {
int i = 0;
while(i<N) {
cout.width(6);
cout << target[i][j];
++i;
}
cout << endl;
++j;
}
}
0619デフォルトの名無しさん
2009/06/02(火) 17:38:09int main() {
ELEMENT result[N][N], matrixA[N][N], matrixB[N][N];
initMatrix(result);
cout << "行列Aの入力" << endl; createMatrix(matrixA);
cout << "行列Bの入力" << endl; createMatrix(matrixB);
matXmat(result, matrixA, matrixB);
printMatrix(result);
return 0;
}
計算結果については確認してないのでちゃんと確認して下さい。
型が分からないと言うことでしたので、typedefで書いておきました。
intじゃなくてdoubleなら、typedef のint をdoubleにすればOKです。
0620デフォルトの名無しさん
2009/06/02(火) 18:34:25http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9329.txt
「小数」だな
0621デフォルトのnanasisan
2009/06/02(火) 19:17:19�Uをお願いします。。。。。
0622デフォルトの名無しさん
2009/06/02(火) 19:21:36[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9330.txt
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン: g++
[3.3] 言語: C++
[4] 期限: 6月3日12:00
[5] その他の制限: 習ってるのは#include<iostream>
入出力はcin cout です。
よろしくおねがいします。
0623デフォルトの名無しさん
2009/06/02(火) 19:34:42�U(1)
#include <iostream>
using namespace std;
void main() {
int a, b, min;
cout << "a: ";
cin >> a;
cout << "b: ";
cin >> b;
min = a < b ? a : b;
cout << min;
}
�U(2)
void main() {
int a, b, c, min;
cout << "a: ";
cin >> a;
cout << "b: ";
cin >> b;
cout << "c: ";
cin >> c;
min = a < b ? a : b;
min = min < c ? min : c;
cout << min;
}
0624デフォルトの名無しさん
2009/06/02(火) 19:37:330625デフォルトのnanasisan
2009/06/02(火) 20:44:33ありがとうございました。
失礼します。
0626デフォルトの名無しさん
2009/06/02(火) 20:52:01605に同じ問題があるといいながら、その解答は見ないのか・・・
0627585
2009/06/02(火) 22:42:22回答ありがとうございます。
1回ずつ置換するのではなく、
対応mapを作った後に一気に置換するとは…。
非常に参考になりました。
0628デフォルトの名無しさん
2009/06/02(火) 23:09:170629デフォルトの名無しさん
2009/06/02(火) 23:13:34char x[2][26] = {
"ETAOINSRHLDUCFMWYGPBVKXJQZ", // x
"LCQEBFVXGAMHSPUJWYORTDZINK" // f(x)
};
終端の\0が溢れてないか?
0630デフォルトの名無しさん
2009/06/02(火) 23:33:04\0は入らないし、この使い方なら要らない。
0631デフォルトの名無しさん
2009/06/02(火) 23:39:11文字列リテラルを文字配列初期化に使えるというのは便法というかシンタックスシュガー。
調子に乗って使い回してると落とし穴がありそうなんで、
char x[]={'a','b','c,','d','¥0'};
とか一文字一文字丁寧に初期化したいもの。
(漢字仮名まじりの場合は苦労するが)
0632デフォルトの名無しさん
2009/06/02(火) 23:46:27この記述が文法上許されなくなると、
困るところが大量に出てくるな。
0633デフォルトの名無しさん
2009/06/02(火) 23:53:36JavaとかC#とか新し系の言語では使えると明記されており
心配は無さそうだし、Cでもこれが使えないコンパイラは先ず
普通は使われないだろなw(使えるとしても>>629のような
場合で終端の¥0を巧く解釈してくれるのかどうかは確証でき
ないが)
組み込み系とかのマイナーでConservativeなC処理系では
ひねくれた(が、本当はこっちがまともなのかも知れない)
解釈に固執してて困惑するかも知れないと思ってついつい
説教地味ちまったが気にしないでくれ
0634デフォルトの名無しさん
2009/06/03(水) 00:07:540635デフォルトの名無しさん
2009/06/03(水) 00:09:53[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):コマンドライン上の括弧文字列を読み込んで、左括弧と右括弧が釣り合ってるか(整合しているか)どうかを判定し、釣り合っている場合には
対応する括弧対に番号付けして出力するようなプログラムを作成せよ。
例: 入力 [ [ ] [ [ ] ] ] [ ] 出力 [ 1[2 ]2 [3 [4 ]4 ]3 ]2 [5 ]5
ヒント:右括弧、左括弧それぞれに対して各スタック操作(プッシュ、ポップ)を対応させる。
文字入力にはgetchar()もしくはそれと同様な関数を呼び出す。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
[3.3] 言語:C
[4] 期限: 2009年6月3日AM6:00まで
[5] その他の制限:特になし
今スタックやリストを習っているので、それらを使うのかなと思います、、、
自分がそれらをよく理解できてないのもあるのですが、、、
お願いします!!!!
0636デフォルトの名無しさん
2009/06/03(水) 00:10:16memcpy(x, "ETAOINSRHLDUCFMWYGPBVKXJQZ", 26);
文法上正しいのはこうか?
0637デフォルトの名無しさん
2009/06/03(水) 00:15:45パイオニアな言語はいい意味でも悪い意味でも
後付けで色々と規則が修正されることが多く、規則と現実が合わない
ことのほうが多いだろうから...
0638デフォルトの名無しさん
2009/06/03(水) 00:38:170639デフォルトの名無しさん
2009/06/03(水) 00:45:27stackて書いてあるからC++でやってみたけど
Cで自分でstack作れって課題なのかな
#include <iostream>
#include <stack>
#include <sstream>
using namespace std;
int main(int argc, char* argv[])
{
if (argc!=2) return 1;
ostringstream buf;
char* src = argv[1];
int count = 1;
stack<int> countStack;
while (*src!='\0') {
buf << *src;
if (*src=='[') {
buf << count;
countStack.push(count);
count++;
}
else if (countStack.size() > 0 && *src==']') {
buf << countStack.top();
countStack.pop();
}
src++;
}
cout << buf.str();
return 0;
}
0640デフォルトの名無しさん
2009/06/03(水) 01:06:59つ [3.3] 言語:C
0641デフォルトの名無しさん
2009/06/03(水) 01:21:40すいません、、、Cなんです、、、、
0642デフォルトの名無しさん
2009/06/03(水) 01:52:52麻呂の校門、封鎖されてクソースが漏れません!
0643デフォルトの名無しさん
2009/06/03(水) 01:54:430644585
2009/06/03(水) 02:01:47なんかいろいろと波紋をよんでおりますねw
あまりNULL文字まで深く考えていませんでしたが、
一応当環境では正常に動作しているようです。
mapを要素数26個まで小さく出来ましたが、
プログラムが小汚くなりました(´・ω・`)
スマートなプログラムを書くのは難しいなぁ。
0645635
2009/06/03(水) 02:13:53[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):1方向線上リストを使って、スタックを実現せよ。ただし、各記憶要素xは整数値をとるもの
とする。 要素xをプッシュするpush(int x)、ポップしてその値を返すpop()、スタックが
空かどうかを判断し真偽値を返すempty()、ならびに現在のスタック内容全体を表示するshow()を用意する。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
[3.3] 言語:C
[4] 期限: 2009年6月3日AM3:00まで
[5] その他の制限:特になし
0646デフォルトの名無しさん
2009/06/03(水) 03:02:34#include <stdio.h>
#define STACK_SIZE 100
int Stack[STACK_SIZE], StackDepth;
int push(int x){
if(StackDepth>=STACK_SIZE) return 0;
return (Stack[StackDepth++]=x,1);
}
int pop(void){
return (StackDepth<=0)?-1:Stack[--StackDepth];
}
void show(void){
int i;
for(i=StackDepth-1;i>=0;i--) printf(" %d", Stack[i]);
printf("\n");
}
int empty(void){
return (StackDepth<=0);
}
int main(void){
int i;
for(i=0;i<10 && push(i);i++);
show();
for(i=0;i<5 && !empty();i++) printf("pop()=%d\n", pop());
show();
while(!empty()) printf("pop()=%d\n", pop());
show();
return 0;
}
0647635
2009/06/03(水) 03:09:47ありがとうございます(T_T)
さっそくコンパイルしてみます!!
0648デフォルトの名無しさん
2009/06/03(水) 03:39:41体力の限界を感じて、麻呂は引退するでおじゃっ
0649639
2009/06/03(水) 07:06:41#include "stdio.h"
#define STACK_SIZE 100
int posStack = 0;
int stack[STACK_SIZE];
void push(int val)
{
stack[posStack++] = val;
}
int pop()
{
return stack[--posStack];
}
int main()
{
char c; int count;
count = 1;
while (true) {
c = getchar();
if (c == '\0' || c == '\n') break;
printf( "%c", c );
if (c=='[') {
if (posStack >= STACK_SIZE) return 1;
printf( "%d", count );
push(count); count++;
}
else if (posStack > 0 && c==']') {
printf( "%d", pop() );
}
}
return 0;
}
0650デフォルトの名無しさん
2009/06/03(水) 09:41:27ヒント:
int f[];
for(i=0;x[0][i];i++)f[x[0][i]-'A']=i;
for(i=0;a[i];i++) a[i]=x[1][ f[a[i]] ];
がコアな処理
0651デフォルトの名無しさん
2009/06/03(水) 11:03:32[2] 問題文(含コード&リンク):キーボードより文字列aと文字列bを入力し、
比較する(どちらが辞書並びで先かを表示する)プログラムを作れ。ただし、strcmp関数を用いてはならない
上記の出力結果及び検討も書け。
[3] 環境
[3.1] OS:WindowsVistaSP2
[3.2] Visual stdio2008
[3.3] 言語: C
[4] 期限:2009年6月3日17時まで
[5] その他の制限: できるだけ基本で
0652デフォルトの名無しさん
2009/06/03(水) 11:25:15#include <stdio.h>
int main(void) {
char a[1024], b[1024];
char *p, *q;
int f;
printf("a: "); scanf("%s", a);
printf("b: "); scanf("%s", b);
p = a; q = b; f = 0;
while(*p && *q) {
if (*p < *q) { f = -1; break; }
if (*p > *q) { f = 1; break; }
p++; q++;
}
if (!f) {
if (!*p && *q) f = -1;
else if (*p && !*q) f = 1;
}
if (f < 0) printf("aが先\n");
else if (f > 0) printf("bが先\n");
else printf("aとbは同じ文字列\n");
return 0;
}
0653デフォルトの名無しさん
2009/06/03(水) 11:38:49#include <stdio.h>
int main(void)
{
char x[2][27] = {
"ETAOINSRHLDUCFMWYGPBVKXJQZ", // x
"LCQEBFVXGAMHSPUJWYORTDZINK" // f(x)
};
char a[]="This is a pen.";
int i, f[27];
puts(a);
for(i=0; x[0][i]; i++) // 2 19 12 10 0 13 17 8 4 23 21 9 14 5 3 18 24 7 6 1 11 20 15 22 16 25
f[x[0][i]-'A'] = i;
for(i=0; a[i]; i++) {
if(a[i]>='A' && a[i]<='Z')
a[i] = x[1][ f[a[i]-'A'] ];
else if(a[i]>='a' && a[i]<='z')
a[i] = x[1][ f[a[i]-'a'] ]-'A'+'a';
}
puts(a);
return 0;
}
0654デフォルトの名無しさん
2009/06/03(水) 11:53:10.....;
if( 条件 )
.....;
はなるべく
if (条件)
....;
else if(条件)
.....;
.....
と加工
前者のほうがスマートでカッコイイかも知れないが、共有コードでは
不用意に(順序を変えられたりして)弄られるとトラブルを起こしやすい
0655デフォルトの名無しさん
2009/06/03(水) 12:01:120656デフォルトの名無しさん
2009/06/03(水) 12:01:36....
if (条件B)
....
条件A、条件Bが両方とも同時成立する可能性がある場合
単純に else if に置き換えれば良い ってものでもないから注意
0657デフォルトの名無しさん
2009/06/03(水) 12:05:04....
else if(条件A && !条件B)
...
else if(条件B && !条件A)
....
としたいものだが
さすがにプライベートなプログラミングメモ
レベルでする奴は居ないだろw
0658デフォルトの名無しさん
2009/06/03(水) 12:27:08if(条件A){
if(条件B) ...
else ...
}
else if(条件B)...
って書けよw
0659デフォルトの名無しさん
2009/06/03(水) 12:37:30Del_Dataはまだ実装されてないですよね。それと、Add_Data、Change_Dataは、このままだと動かないと思います。
例えば、メニュー表示から「電話帳追記」を選んでも、既存のデータを読み込んでいない(あるいはデータが無い)。
だから、このままだとAdd_Dataは失敗しますね。
それで、基本的なロジックの組立て方について提案します。頻繁に行うファイルの入出力は一カ所にまとめた方が良いです。
例えば、このような関数を作り、ファイル操作はここで集中して処理する。
int ReadDataFile(TPbook teldata[10]);(戻り値は読込レコード数が都合が良い)
int WriteDataFile(TPbook teldata[10], int kensu);
Disp_Dataなどファイルから読込んでいる部分は、この関数呼出に変える。
Add_Dataでは、配列ではなく入力用のTPbook構造体を追加し、Input_Dataをその構造体に対して行う。
'Y'を選択したとき、全レコード読込をReadDataFileを介して実行する。
読み込んだTPbook構造体配列の有効レコードの次に、入力した構造体をコピーする。
登録レコード数+1を新たなレコード数とする。
有効なTPbook構造体配列をWriteDataFileによりファイル出力する。
Change_Dataでは、Add_Data同様に入力用構造体を用意する。Input_Dataをその構造体に対して行う。
'Y'を選択したとき、全レコード読込をReadDataFileを介して実行する。
読み込んだTPbook構造体配列の更新対象のレコードに対して、入力したTPbook構造体を上書きする(構造体同士の代入で可能)。
登録レコード数は変わらないので、そのまま。有効なTPbook構造体配列をWriteDataFileによりファイル出力する。。
Del_Dataでは、選択したレコード詳細を表示する。'Y'を選択したとき、全レコード読込をReadDataFileを介して実行する。
読み込んだTPbook構造体配列の更新対象のレコードに対して、削除指定したレコード以降に対して、次レコードを上書きしていく。
登録レコード数を−1する。有効なTPbook構造体配列をWriteDataFileによりファイル出力する。
0660デフォルトの名無しさん
2009/06/03(水) 12:39:48続き
Change_DataやDel_Dataを実行した場合は、レコードを再度読み直すようにしないと
データの表示内容が不正になるかもしれません。
その他気になること。処理自体には関係ないかもしれませんが、綴り誤りは直しておいたほうがいいですね。
adless[MAX_ADDLESS]とか、 namber
入力値チェック、任意ファイル名で出力は、改めて質問してください。
0661デフォルトの名無しさん
2009/06/03(水) 12:52:14場合の書き方はこれが基本
次いで>>658の書き方。
if単文の連接で書く(再利用性の高い)コードは、本来は(相手の
レベルを見ずに)晒すべきコードじゃない
0662デフォルトの名無しさん
2009/06/03(水) 12:55:53シーケンシャルリードで、情報収集してそのデータを使い大まかなソートして
そのあと、ランダムアクセスして並び替えを完了したいところだが
ランダムアクセス(とデータの書き込み)の部分が相当かかる。
0663デフォルトの名無しさん
2009/06/03(水) 12:59:04ライトの方はキャッシュに蓄えられるだろうという考え。
ランダムリードだと実際にデータが入ってこなければ進めない。
0664デフォルトの名無しさん
2009/06/03(水) 13:04:44http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9320.txt
>>557
#include <stdio.h>
//#include <stdlib.h>
#define N 10 /* 入力するデータの個数 */
int main() {
int i, r;
int dosuu[10];
// srand((unsigned int)time(0));
for(i=0; i<10; i++) dosuu[i] = 0;
for(i=0; i<N; i++) {
scanf("%d", &r);
// r = rand()%50 + 1; /* 1 〜 50 */
dosuu[(r-1)/10]++;
}
puts(" 度数分布");
for(i=0; i<10; i++) printf("%2d〜%2d:%2d 個\n", i*10+1, (i+1)*10, dosuu[i]);
return 0;
}
0665デフォルトの名無しさん
2009/06/03(水) 13:23:29とりあえずデータ生成はこれでいってみる
#include<stdio.h>
#include<stdlib.h>
#define FILESIZE_MAX (1<<30)
int main(void){
long filesize;
char buf[1000+1];
int i, len;
char *filename="1000MB.txt";
FILE *fp;
fp=fopen(filename, "w");
if(fp==NULL) return 1;
for(filesize=0;filesize<FILESIZE_MAX;filesize+=len+2){
len=rand()%1000+1;
for(i=0;i<len;i++) buf[i]=rand()%(0x7d-0x21+1)+0x21;
buf[i]='\0';
fprintf(fp, "%s\n", buf);
}
fclose(fp);
return 0;
}
0666デフォルトの名無しさん
2009/06/03(水) 16:58:569306.txt
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9332.txt
main()
red1, green1, blue1のメモリー確保を追加した
makeGLHist()
isglの型をunsigned int に変更した
CommonImageIO.hの変更
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9333.txt
GlobalLock (unsigned char *)castを追加
>>548で問題が増えたんだな。
0668デフォルトの名無しさん
2009/06/03(水) 17:54:51#include <iostream>
using namespace std;
int main(int argc, char *argv[]) {
int l1, l2;
if(argc != 3) {
cout <<"Argument Error: Usage: prog1 string1 string2\n";
return 1;
}
l1 = strlen(argv[1]);
l2 = strlen(argv[2]);
if(l1 > l2)
cout <<argv[1] <<endl;
else if(l1 < l2)
cout <<argv[2] <<endl;
else
cout <<"There are same length:" <<l1 <<endl;
return 0;
}
6/2 19:21 => 6/3 12:00 (あと2問もあるのに半日も時間がない)
0669デフォルトの名無しさん
2009/06/03(水) 18:16:09そういうのが正規的な表現なの?
0670665
2009/06/03(水) 18:34:341073742119 bytes のファイル
CPU CoreDuo T2400 1.83GHz
HDD 2.5" 60GB SATA HDD
OS WindowsXP SP3 32bit
コンパイラ gcc3.4.5 (mingw special)
にて 807秒 かかった
CPU使用率はさほど高くなくIO律速だと思われる
0671デフォルトの名無しさん
2009/06/03(水) 18:43:43判定回数が最小になるように、同じ判定が複数個所に散らばらないように書くよな
if(条件A && 条件B)
....
else if(条件A && !条件B)
...
else if(条件B && !条件A)
↑
これとか完全に無駄な判定あるし
if(条件A && 条件B)
....
else if(条件A)
...
else if(条件B)
せめてこうだろ
0672デフォルトの名無しさん
2009/06/03(水) 18:50:20そもそも正規性ってのが意味不明。
0673デフォルトの名無しさん
2009/06/03(水) 18:51:12コード貼り付けないとわからん。 適当な事書いてるのと変わらない
0674デフォルトの名無しさん
2009/06/03(水) 18:53:26http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9334.txt
Headerは9333.txt使って
もう一つあるが、課題は座標変換らしい。あまり期待しないでな。
0676デフォルトの名無しさん
2009/06/03(水) 18:57:46ありがとうございます。
けっこう大量に問題があるのでピンチなんです・・・
0677デフォルトの名無しさん
2009/06/03(水) 19:02:06OSはwindowsでいいのか?
0678デフォルトの名無しさん
2009/06/03(水) 19:47:45[2] 問題文(含コード&リンク):キーボードから英数字、記号の系列を入力し、
文字とその文字が連続する回数(文字−連続する回数)の系列に変換するプログラム。
[3] 環境
[3.1] OS:UNIX
[3.2] コンパイラ名とバージョン:g++
[3.3] 言語:C++
[4] 期限: 6月5日まで
[5] その他の制限:
入出力はcout、cinを用いる。
入力の終了は、改行してEOF。
スペースは無視されるものとする。
使える型はint、char。使えるincludeはiostreamのみ。
使える文は、for、while、ifのみ。
自分で書いたところまでは載せますので追記、改変してくださっても結構です。
宜しくお願いします。
0679デフォルトの名無しさん
2009/06/03(水) 19:55:22#include <iostream>
using namespace std;
int main()
{
char a,b=EOF;
int i=1,j=0;
while(1){
if(j != 0){
cout << b << '-' << i << ' ';}
while(1){
cin >> a;
if(a = b)i++;
if((a != b) && (j!=0)){
b=a; i=1; break;}
if(j==0){
j==1; b==a; }}}
cout << "Completed" << endl;
return 0;
}
こんな感じに考えたのですが、EOFしても何もおきませんし、多分スペースまでカウントされてしまう・・・。
どなたかお願いします。
0680デフォルトの名無しさん
2009/06/03(水) 19:56:280681デフォルトの名無しさん
2009/06/03(水) 20:06:32using namespace std;
int main() {
int set[256];
for ( int i = 0; i != 256; ++i ) {
set[i] = 0;
}
char in;
while( cin >> in ) {
++set[in];
}
for ( int i = 0; i != 256; ++i ) {
if ( set[i] != 0 ) {
cout << "'" << static_cast< char >( i ) << "'*" << set[i] << "\t";
}
}
return 0;
}
// cin はもともとスペースやタブなんかの区切り文字を無視するから特別な処理はいらないよ★
// っていうか、もともとスペースは英数字や記号に入ってないからカウントしないしー
0682デフォルトの名無しさん
2009/06/03(水) 20:08:19先頭で
const int maxheart = 256;
とでも書いて、
256 のところは全部 maxheart に置き換えてね♥
0683デフォルトの名無しさん
2009/06/03(水) 20:24:13なんか問題文がイマイチわかりにくいんだけど
RunLengthみたいな読み方すれば良いって事?
aaaabbccccc
↓
a-4 b-2 c-5
みたいに
0684デフォルトの名無しさん
2009/06/03(水) 20:28:160685デフォルトの名無しさん
2009/06/03(水) 20:37:47はい、ランレングスです。
表記もまさにその通りです。
0686デフォルトの名無しさん
2009/06/03(水) 20:43:57int main()
{
int i, j;
char str[256];
std::cin >> str;
for(i=0; str[i];) {
char temp = str[i];
for(j=1; str[i+j]==temp; j++);
std::cout << temp << '-' << j << std::endl;
i += j;
}
}
0687デフォルトの名無しさん
2009/06/03(水) 20:45:32[2]
コマンドラインからN(1~99)の数値文字列を与える。(指定ない場合
異常な場合は5と解釈)下のような数のトグロを表示するプログラム
を作れ。右回り、左回りの両方とも出るようにする。
L=1 R=1(N=1)
12 21N=2)
43 34
123 321(N=3)
894 498
765 567
01020304 04030201(N=4)
12131405 05141312
11161506 06151611
10090807 07080910
[3]Windows XP/Visual C++6.0/C
制限:再帰呼び出し(間接を含む)は使用禁止だそうです。
[4]明日中
難しくて手が出ません。Help!!です
0688デフォルトの名無しさん
2009/06/03(水) 20:53:50ありがとうござます
0689687
2009/06/03(水) 20:56:03制限:出力する文字をメモリに記憶しておいてから出力する方式は禁止
だそうです。
0690デフォルトの名無しさん
2009/06/03(水) 21:14:160691687
2009/06/03(水) 21:55:00皆で手分けしてN=99までファイルにテキストエディターで回答テキストファイル
(solution_xx.txt xxはNを2桁で表したもの)
を作り、単にそれをコンソール出力するだけでOKだと、先輩の情報筋から
情報を得ました。(要するにトンチだそうです。)
お騒がせしました。
0692デフォルトの名無しさん
2009/06/03(水) 21:57:130693デフォルトの名無しさん
2009/06/03(水) 22:01:20#include <iostream>
using namespace std;
#define BUF_SIZE 8192
void main()
{
int count = 1;
char line[BUF_SIZE];
while(true){
if (!cin.getline(line, BUF_SIZE)) break;
char* cur = line;
while (*cur) {
char* next = cur + 1;
if (*cur != ' ' && *cur != '\t') {
if (*next == '\0' || *cur!=*next) {
cout << *cur << '-' << count << ' ';
count = 1;
}
else {
count++;
}
}
cur++;
}
cout << endl;
}
cout << endl << "Completed" << endl;
}
0694デフォルトの名無しさん
2009/06/03(水) 22:05:13Accelerated C++にも同じ手法が出てきたけど
内部の for 文で外の for 文のインデックス値を動かすという定石パターンですな。
0695デフォルトの名無しさん
2009/06/03(水) 22:13:22大抵の場合スマートに表記されているコードはコンピュータの場
合有害無益な処理であることが多い。
0696デフォルトの名無しさん
2009/06/03(水) 22:19:140697デフォルトの名無しさん
2009/06/03(水) 22:20:37>>693は一時変数が多い分、>>686よりもイマイチなのは確か。条件分岐も多い。
なにより、C++で何ゆえdefine…。サッター先生が全力でしごけって怒ってるw
0698デフォルトの名無しさん
2009/06/03(水) 22:38:15#include<stdio.h>
#include<stdlib.h>
int get_num(int n, int x, int y){
int dx, dy, d, i, offset=1, ret=-1;
dx=(x>n-1-x)?n-1-x:x;
dy=(y>n-1-y)?n-1-y:y;
d=(dx>dy)?dy:dx; // (x,y) は d 周目上にある
for(i=0;i<d;i++){
offset+=(n-1)*4; // offset は d 周目渦巻きの左上の数値
n-=2;
}
x-=d; y-=d; // (x,y) を d 周目左上 (d,d) からの相対座標に変換
if(y==0) ret=offset+x; // 上辺
else if(x==n-1) ret=offset+(n-1)+y; // 右辺
else if(y==n-1) ret=offset+(n-1)*3-x; // 底辺
else if(x==0) ret=offset+(n-1)*4-y; // 左辺
return ret;
}
int main(int argc, char *argv[]){
int n=5, fmt_width, x, y;
char tmp[20];
if(argc==2) n=atoi(argv[1]);
fmt_width=sprintf(tmp, "%d", n*n);
for(y=0;y<n;y++){
for(x=0;x<n;x++) printf("%0*d", fmt_width, get_num(n, x, y));
printf(" ");
for(x=n-1;x>=0;x--) printf("%0*d", fmt_width, get_num(n, x, y));
printf("\n");
}
return 0;
}
0699デフォルトの名無しさん
2009/06/03(水) 22:40:43EOF判定して無いじゃん
スペース無視がスペースまでの処理になってんじゃん
256とかマジックナンバー使ってんじゃん
0700デフォルトの名無しさん
2009/06/03(水) 22:43:120701デフォルトの名無しさん
2009/06/03(水) 22:44:50読み出し部分は>>693で、集計部分は>>686だろな。
あと、#defineはconstで置き換える。
結論としては、こまけーことは…
0702デフォルトの名無しさん
2009/06/03(水) 22:46:41どれに対するレス?
0703デフォルトの名無しさん
2009/06/03(水) 22:48:430704デフォルトの名無しさん
2009/06/03(水) 22:49:340705デフォルトの名無しさん
2009/06/03(水) 22:50:40じゃあ、お前が書けよw
0706デフォルトの名無しさん
2009/06/03(水) 22:51:49for(i=0;i<d;i++){
offset+=(n-1)*4; // offset は d 周目渦巻きの左上の数値
n-=2;
}
でも、ここ等差数列の和の式に直せばO(1)になるね
0707デフォルトの名無しさん
2009/06/03(水) 22:52:21>>660
感謝です!
なるほど、理解出来ました。
ありがとうございます。
0708デフォルトの名無しさん
2009/06/03(水) 22:52:39>>698 の計算オーダはどのくらいになってるの?
0709デフォルトの名無しさん
2009/06/03(水) 22:54:20なるほどその部分か!
0710デフォルトの名無しさん
2009/06/03(水) 23:24:250711デフォルトの名無しさん
2009/06/04(木) 00:48:27#include<iostream>
#include<string>
using namespace std;
class Student {
string name;
int math;
int sci;
int eng;
public:
Student(string n, int m, int s, int e);
string getname();
double calAverage(int s);
friend double calMathAverage(int s, Student sta[]);
};
Student::Student(string n, int m, int s, int e){
name=n; math=m; sci=s; eng=e;
}
string Student::getname(){
return name;
}
double Student::calAverage(int s){
return (math+sci+eng)/(float)s;
}
double calMathAverage(int s, Student sta[]){
int i, t=0;
for(i=0; i<s; i++)
t += sta[i].math;
return t/(float)s;
}
//(3)ここを埋めて、Studentクラスの配列starray[]に3人の学生データを格納せよ。
Student starray[size] = {a, b, c};
0712デフォルトの名無しさん
2009/06/04(木) 01:03:32ありがとうございます!!
今日、自分で考えても結局わからなくて、何気なく来てみたら・・・感謝です。
期限過ぎましたが、まだ提出はできるので、あと1問力を貸していただけるとありがたいです。
0713デフォルトの名無しさん
2009/06/04(木) 01:09:24[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9335.txt
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 6月16日
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
・線形リストを用いてデータを並び替える
Idがうまく表示できなくて困ってます。あと合計とかもうまくいきません。
よろしくお願いします
0714デフォルトの名無しさん
2009/06/04(木) 01:18:55[2] 問題文(含コード&リンク):
以下のような九九表を出力するプログラムを作成せよ。
1 2 3 4 5 6 7 8 9
2 4 ...
...
9 18 27 ... 81
[3] 環境
[3.1] XP
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語:C
[4] 期限:明日
0715デフォルトの名無しさん
2009/06/04(木) 01:22:17すいません、表なのに書き方がまずかったです;
81が上の9のちょうど下になるようにするべきでした;
0716デフォルトの名無しさん
2009/06/04(木) 01:24:06#include <stdio.h>
int main(int argc, char* argv[])
{
int i, j;
for (i = 1; i <= 9; i++) {
for (j = 1; j <= 9; j++) {
printf("%3d ", i*j);
}
printf("\n");
}
return 0;
}
0717デフォルトの名無しさん
2009/06/04(木) 01:32:52http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9336.txt
残りの9315.txtだが、間に合ったかな?
0718デフォルトの名無しさん
2009/06/04(木) 02:41:03http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9337.txt
0719デフォルトの名無しさん
2009/06/04(木) 03:34:52[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9338.txt
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: Visual C++
[3.3] 言語: C++
[4] 期限: 今日中
[5] その他の制限:日本語のキーワードは探しません
よろしくお願いします。
0720デフォルトの名無しさん
2009/06/04(木) 03:44:38[1] 授業単元: 情報処理
[2] 問題文(含コード&リンク):
2次元配列に格納されている4次正方行列A=[aij](i,j=0,1,2,3;要素は実数)において、
a00+a11+a22+a33 及び、a03+a12+a21+a30 を求めて表示せよ。
ただし、上記の和はfor文による繰り返しにより記述すること。
計算に先立ち、行列の各要素の値はキーボードより、以下のように入力すること。
a00・・・a03=1.02.03.04.0
a10・・・a13=5.06.03.12.0
a20・・・a23=1.32.59.04.3
a30・・・a33=1.32.59.04.3
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: Visual C++
[3.3] 言語: C
[4] 期限: 2009年6月5日12:30まで
[5] その他の制限: なし。
お願いします。
0721デフォルトの名無しさん
2009/06/04(木) 04:02:06#include <stdio.h>
int main()
{
int i, j;
double a[4][4];
double sum;
for (i = 0; i < 4; i++) {
for (j = 0; j < 4; j++) {
scanf("%lf", &a[i][j]);
}
}
sum = 0.0;
for (i = 0; i < 4; i++) {
sum += a[i][i];
}
printf("a00+a11+a22+a33 = %f\n", sum);
sum = 0.0;
for (i = 0; i < 4; i++) {
sum += a[i][3-i];
}
printf("a03+a12+a21+a30 = %f\n", sum);
return 0;
}
0722デフォルトの名無しさん
2009/06/04(木) 04:48:20http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9339.txt
0723デフォルトの名無しさん
2009/06/04(木) 07:42:50[2] 問題文(含コード&リンク):
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9342.txt
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: Visual C++
[3.3] 言語: C++
[4] 期限: 今日中
[5] その他の制限:
よろしるお願いします
0724デフォルトの名無しさん
2009/06/04(木) 08:09:30[2] 問題文(含コード&リンク):
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9343.txt
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: Visual C++
[3.3] 言語: C++
[4] 期限: 6/5朝まで
[5] その他の制限:
boostを使った問題です。宜しくお願いします
0725デフォルトの名無しさん
2009/06/04(木) 09:58:44[2] 問題文(含コード&リンク):
これ(実行ファイル)と全く同じようになるように書く
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9344.zip
苗字・名前・年齢・身長・体重を入力し、
その個人データを氏名・年齢・身長・体重・BMIの値として出力する。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:Visual Studio 2005 Professional Edition
[3.3] 言語: C++
[4] 期限: 今日中
[5] その他の制限:配列・構造体・引数・返り値を使う。ではヨロシクお願いしますm(__)m
0726 :sage >>725
2009/06/04(木) 10:36:52| 今から個人データを入力してもらいます |
+--------------------------------------+
入力する人数を設定してください(1〜10)> 1
*** 1人目のデータを入力してください ***
・苗字を入力してください(半角ローマ字)> asdsd_sad
・名前を入力してください(半角ローマ字)> dds_dsd
・年齢を入力してください(整数)> 24
・身長を入力してください(小数第1位まで[160.5など])> 123.4
・体重を入力してください(小数第1位まで[52.3など])> 67.4
+++ 個人データを確認します +++
[1人目]
氏名:asdsd_sad dds_dsd
年齢:24歳
身長:123.4cm
体重: 67.4kg
BMI :44.3 [ レッツエクササイズ! ]
*** 何かキーを押してください ***
0727>>725
2009/06/04(木) 11:12:50BMI=18.5 超え 25.0 未満、普通です
BMI=25.0 以上、レッツエクササイズ!
式:BMI=体重(kg)/身長(cm)/身長(cm)*10000
>ではヨロシクお願いしますwww.
0728デフォルトの名無しさん
2009/06/04(木) 12:56:52[2] 問題文(含コード&リンク):ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9345.txt
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:VC 2005
[3.3] 言語:C++
[4] 期限:6月5日2:00まで
[5] その他の制限:特にないです
それではよろしくお願いします
0729デフォルトの名無しさん
2009/06/04(木) 14:47:32遅くなりましたが、どうもありがとうございます。とても助かりました。
0730デフォルトの名無しさん
2009/06/04(木) 15:08:48[2] 問題文:コマンドライン引数からアルファベットだけからなる文字列(空文字列を含む)のみを選び、 すべての文字を対応する大文字に変換した上で、 一行に一つずつ標準出力に出力するプログラムを書け。
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:VC 2005
[3.3] 言語:C
[4] 期限:6月10日12:00まで
[5] その他の制限:特になし
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9346.c
大文字になりません
お願いします
0731デフォルトの名無しさん
2009/06/04(木) 15:18:43コンパイルは通るの?
0732デフォルトの名無しさん
2009/06/04(木) 15:20:10コンパイルは出来ます
0733デフォルトの名無しさん
2009/06/04(木) 15:21:50replace呼ぶだけ
if(forallchar(str, isalpha)){
replace(str, str);
printf("%s\n", str);
...
0734デフォルトの名無しさん
2009/06/04(木) 15:28:15できました!
有難うございました
0735723
2009/06/04(木) 16:28:350736デフォルトの名無しさん
2009/06/04(木) 16:43:28[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.cgi?mode=thr&no=9205
[3] 環境
[3.1] OS: XP
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語:C
[4] 期限: 明日まで
[5] その他の制限: #include <stdio.h> のみ使用
初心者なので、なるべく簡単にお願いします。
0737736
2009/06/04(木) 16:45:26http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9348.txt
こちらでお願いします
0738デフォルトの名無しさん
2009/06/04(木) 16:55:54[2] 問題文:
半角英数字及び半角の記号からなるテキストデータalice.txtがある。
このデータについて以下の計算をせよ。
アルファベット(半角英字で大文字(A-Z)と小文字(a-z)の区別なしで、a-zの26文字)の生起確率P(X)を計算しなさい。ただし、アルファベット以外の数字やその他の記号・空白は無視して詰めること。これを情報源Sとする。
更に情報源SのエントロピーH(S)を計算しなさい。また、26文字の生起確率が等確率である場合のエントロピーと値を比較しなさい。
[3.1] OS:Windows/Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:6/8 12:00
[5] その他の制限:特になし
宜しくお願いします。
0739デフォルトの名無しさん
2009/06/04(木) 17:29:06[2] 問題文(含コード&リンク): 1〜256文字の文字列を引数とし、最初の単語の文字数を返す関数wordを作成する(スペースはカウントしない)。
main関数においてターミナルから1〜256文字の文字列を読み込み、word関数を使って文字列Sの最初の単語を出力するプログラムを作成しなさい。
但し、スペースで区切れている箇所を単語の区切りとする。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:6月10日 8:00
[5] その他の制限: 関数wordのプロトタイプは、int word(char *)とすること。
入力する文字列に2つ以上の連続したスペースはないとする。
入力する文字列の最初と最後はスペースでないとする。
0740デフォルトの名無しさん
2009/06/04(木) 17:31:38(1)
double const pai = 3.141592653;
enum {
R_PERMISSION = 1,
W_PERMISSION = 2,
E_PERMISSION = 4,
S_PERMISSION = 8
};
inline int dbl(int x) // doubleは予約語なのでdblとしてあります
{
return x * 2;
}
(2)
double(3+4)は、2*3+4と展開され、10という誤った結果を得る。
正しくは
#define dbl(x) 2*(x)
0741デフォルトの名無しさん
2009/06/04(木) 17:43:42[2] 問題文(含コード&リンク):1〜256文字の文字列Sと単語Wを入力し、文字列Sの最初の単語がWであるときは文字列Sの先頭に*を付けたものを出力し、そうでないときはSをそのまま出力するプログラムを作成しなさい。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:6月10日 8:00
[5] その他の制限:2つの単語が等しいときは1を、等しくないときは0を返す関数int compare(char *, char *)を作成して用いること。
入力する文字列に2つ以上の連続したスペースはないとする。
入力する文字列の最初と最後はスペースでないとする。
0742デフォルトの名無しさん
2009/06/04(木) 17:43:56[2] 問題文
このプログラムを実行しても結果がおかしくなります。修正をお願いします
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9349.txt
[3] 環境
[3.1] OS: Windons
[3.2] コンパイラ名とバージョン:VisualC++
[3.3] 言語:C
[4] 期限:6月5日
[5] その他の制限:1次元配列を2次元配列にするものです。
たとえば 配列の要素数 4
配列の要素 1,2,3,4
行数 2
と入力したら
2次元配列{{1,2、}、{3,4}}となるようにするものです。
また 配列の要素数 6
配列の要素 {1,2,3,4,5,6、}
行数 2と入力したら
{{1,2,3、}、{4,5,6}}の2次元配列を作ります。
0743デフォルトの名無しさん
2009/06/04(木) 17:58:17for(i=0;i<gyou;i++){
/**/ tempretu=0;
for(j=0;j<retu;j++){
tempA++;
b[i][j]=a[tempA];
tempretu++;
}
tempgyou++;
}
0744つづき
2009/06/04(木) 18:10:38for(j=0;j<retu;j++){
// tempA++;
// b[i][j]=a[tempA];
b[i][j]=a[tempA++];
// tempretu++;
}
// tempgyou++;
}
for(i=0;i<gyou;i++){
// for(j=0;j=retu;j++){
for(j=0;j<retu;j++){
// printf("i行j列=%d\n",b[i][j]);
printf("%d行%d列=%d\n",i+1,j+1,b[i][j]);
}
}
0745デフォルトの名無しさん
2009/06/04(木) 18:26:03#include <stdio.h>
int main(void)
{
int i;
int a[10];
for (i = 0; i < 10; i++) {
scanf("%d", &a[i]);
}
for (i = 0; i < 10; i += 2) {
int tmp = a[i];
a[i] = a[i+1];
a[i+1] = tmp;
}
for (i = 0; i < 10; i++) {
printf("%d ", a[i]);
}
return 0;
}
0746デフォルトの名無しさん
2009/06/04(木) 18:37:44やったよO(1)かつバッファ無し
#include <stdio.h>
#include <math.h>
int Project(int x, int y, int N) {
int dx, dy, ax, ay, length, level, side, phase, value;
dx = x * 2 - (N - 1); // 偶数奇数の差を吸収するために2倍の座標系
dy = y * 2 - (N - 1); // かつ対象領域の真ん中に原点
ax = abs(dx); ay = abs(dy);
length = ax > ay ? ax : ay; // 現階層の一辺の半分
level = (N + 1) / 2 - length / 2 - 1; // 何階層目か
if ( dy == -length ) { // 上
side = 0; // 何番目の辺か
phase = dx + length; // 辺の中の位置
}
else if ( dx == length ) { // 右
side = 1;
phase = dy + length;
}
else if ( dy == length ) { // 下
side = 2;
phase = length - dx;
}
else { // 左
side = 3;
phase = length - dy;
}
value = (N * N - (N-2*level) * (N-2*level)) * 2; // 現階層の初期値
value += side * length * 2 + phase + 2; // 階層内の移動
return value / 2; //1倍の系に戻す
}
0747デフォルトの名無しさん
2009/06/04(木) 18:37:51[2] 問題文(含コード&リンク):1〜256文字の文字列Sを入力し、それから単語Wを1つ入力する。
文字列Sが単語Wを含むとき、その単語の前にあるスペースに*を挿入するプログラムを作成しなさい。
但し、検索する単語Wが文字列Sの先頭にあるときは、S全体を1文字ずつずらし先頭に*を付ける。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:6月10日 8:00
[5] その他の制限: 入力する文字列に2つ以上の連続したスペースはないとする。
入力する文字列の最初と最後はスペースでないとする。
0748746
2009/06/04(木) 18:39:29void main() {
int x, y, N, digit;
char format[] = "%_d";
scanf( "%d", &N );
if ( N<=0 || N>99 ) N = 5;
digit = (int)log10((double)(N * N)) + 1;
format[1] = '0' + digit + 1; // 表示桁数の指定
for (x=0; x<N; x++) {
for (y=0; y<N; y++) {
// x, y入れ替えると逆回り
printf( format, Project(y, x, N) );
//printf( "%3d", Project(x, y, N) );
}
printf("\n");
}
}
0749デフォルトの名無しさん
2009/06/04(木) 18:47:09int compare(char *s1, char *s2){
for(;*s1 && *s2 && *s1==*s2; ++s1, ++s2) ;
return !*s1 && !*s2 ? 1 : 0;
}
int main(){
char s[256+1] = {0}, w[256+1] = {0};
char *p, *pp = 0;
printf("文字列:");
scanf("%[^\n]", s);
printf("単語:");
scanf("%s", w);
for(p = s; *p; ++p){
if(*p == ' '){
*p = '\0';
pp = p;
break;
}
}
if(compare(s, w)) printf("*");
if(pp) *pp = ' ';
printf("%s", s);
return 0;
}
0750743
2009/06/04(木) 19:02:23Visual Studio 2005 Professional Edition:今日中
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9347.txt
0751デフォルトの名無しさん
2009/06/04(木) 19:13:37[2] 問題文:C言語で入力した年月日からその日の曜日を求めよ。
1980年以降から9999年まで 判定を行えるようにコーディングすること
[3] 環境
[3.1] OS: WindowsXP
[3.2] VB6
[3.3] C言語
[4] 期限: 2009/06/07まで
[5] その他の制限:
Zellerの定理は使わないこと。
stdio.h以外はinclude禁止
機能は細分化を行い関数化すること
0752743
2009/06/04(木) 19:24:40// char Id[5];
char Id[5+1];
//void add_student(List *ptr_ptr, char Id, int Eng, int Math, int Jap,int Total);
void add_student(List *ptr_ptr, char *Id, int Eng, int Math, int Jap,int Total);
// char identifier[5];
char identifier[5+1];
// add_student(&head, identifier[5], numE, numM, numJ, numT);
add_student(&head, identifier, numE, numM, numJ, numT);
//void add_student(List *ptr_ptr, char Id, int Eng, int Math, int Jap, int Total)
void add_student(List *ptr_ptr, char *Id, int Eng, int Math, int Jap, int Total)
// new_student->Id[5] = Id;
new_student->Id[0] = Id[0];
new_student->Id[1] = Id[1];
new_student->Id[2] = Id[2];
new_student->Id[3] = Id[3];
new_student->Id[4] = Id[4];
new_student->Id[5] = Id[5];
// int sumE,sumM,sumJ,sumT;
int sumE=0,sumM=0,sumJ=0,sumT=0;
0753デフォルトの名無しさん
2009/06/04(木) 19:24:51ありがとうございます!
0754デフォルトの名無しさん
2009/06/04(木) 19:26:35乙
0755デフォルトの名無しさん
2009/06/04(木) 19:35:46> [3.2] VB6
> [3.3] C言語
・・・VB?
0756デフォルトの名無しさん
2009/06/04(木) 19:42:55#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <math.h>
int main(void) {
FILE *fp = fopen("alice.txt","r");
int c , s = 0 , str[26];
double e = 0;
memset(str,0,sizeof(str));
while(EOF != (c = fgetc(fp))) {
if(isalpha(c)) {
str[tolower(c) - 'a'] += 1;
s += 1;
}
}
fclose(fp);
for(c = 0; c < 26; ++c) {
printf("%c:%f\n",'a'+c,(double)str[c]/s);
if(str[c]) e += log2((double)s/str[c]);
}
printf("%f\n",e/s);
return 0;
}
0757デフォルトの名無しさん
2009/06/04(木) 20:10:50VB6では動かんだろうけどw
#include <stdio.h>
int getDayOfYear(int m, int d){
int i, sum = 0, M[] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
for(i = 1; i < m; ++i ) sum += M[i];
return sum+d;
}
int getLeapYearCount(y1, y2){
int y, sum = 0;
for(y = y1; y <= y2; ++y) if(!(y%4) && (y%100 || !(y%400))) ++sum;
return sum;
}
int getDayOfWeek(int y, int m, int d){
int dy = getDayOfYear(m,d);
int ly = getLeapYearCount(1980, m <= 2 ? y-1 : y);
return ((y-1980)*365 + ly + dy-1 + 2) % 7 ; // 1980/01/01は火曜日
}
int main(){
int y, m, d;
char* w = "日\0月\0火\0水\0木\0金\0土";
printf("日付(yyyy/mm/dd): ");
scanf("%d/%d/%d", &y, &m, &d);
printf("%d/%02d/%02dは%s曜日です\n", y, m, d, &w[getDayOfWeek(y, m, d)*3]);
return 0;
}
0758デフォルトの名無しさん
2009/06/04(木) 20:31:27ありがとうございます
0759デフォルトの名無しさん
2009/06/04(木) 20:44:31ありがとうございます
0760743
2009/06/04(木) 20:48:33#include <stdio.h>
int word(char *);
int main() {
int size;
char buf[256+1];
fgets(buf, 256+1, stdin);
size = word(buf);
printf("word length=%d\n", size);
buf[size] = '\0';
printf("word string=<%s>", buf);
}
int word(char *s) {
int size = 0;
while(*s && *s != '\n') {
if(*s++ == ' ') break;
size++;
}
return size;
}
0761デフォルトの名無しさん
2009/06/04(木) 20:55:04ありがとうございます
0762デフォルトの名無しさん
2009/06/04(木) 20:55:16その後のランダムアクセス(並び変えたデータを書き込む)で時間くいますか?
0763デフォルトの名無しさん
2009/06/04(木) 21:21:59[1] 授業単元:C
[2] 問題文(含コード&リンク):
ファイル(TEST.TXT)を読み込み、句読点が現れた時点で改行し表示するプログラムを作成せよ。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語: C
[5] その他の制限: 無し
よろしくお願い致します。
0764デフォルトの名無しさん
2009/06/04(木) 21:22:24ありがとうございます!
0765デフォルトの名無しさん
2009/06/04(木) 21:31:11ありがとうございます!助かりました!
0766デフォルトの名無しさん
2009/06/04(木) 21:47:07[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9350.txt
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語: C
[4] 期限: 6月6日午前中
[5] その他の制限: 問題文レベルで書いてください。
上記URLサンプルコードをCDから起動させたUbuntuで実行させました。問題文に
>コマンドに引数があると、exec() でエラーになっていた。
とあるのですが、引数をつけてもエラーが出ず、混乱しています。
よろしくお願いします。
0767743
2009/06/04(木) 23:06:14#include <stdio.h> // 問1.
void sort(int *,int *);
int main() {
int x, y;
printf("x,y を入力しなさい\n"); scanf("%d %d", &x, &y); printf("(x,y)=(%d,%d)\n", x, y);
sort(&x, &y);
printf("(x,y)=(%d,%d)\n", x, y); return 0; }
void sort(int *a, int *b) {
int tmp;
if(*a < *b) tmp = *a, *a = *b, *b = tmp; }
#include <stdio.h> // 問2.
void sort(int *, int *, int *);
int main() {
int x, y, z;
printf("x,y,z を入力しなさい\n"); scanf("%d %d %d", &x, &y, &z); printf("(x,y,z)=(%d,%d,%d)\n", x, y, z);
sort(&x, &y, &z);
printf("(x,y,z)=(%d,%d,%d)\n", x, y, z); return 0; }
void sort(int *a, int *b, int *c) {
int tmp;
if(*a < *b) tmp = *a, *a = *b, *b = tmp;
if(*b < *c) tmp = *b, *b = *c, *c = tmp;
if(*a < *b) tmp = *a, *a = *b, *b = tmp; }
#include <stdio.h> // 問題:問3.
int mult(int *, int *);
int main() {
int i, sum; int a[4] = {1,2,3,4}, b[4] = {4,3,2,1};
sum = 0;
for(i=0; i<4; i++) { sum += mult(&a[i], &b[i]); }
printf("sum=%d\n", sum); return 0; }
int mult(int *a, int *b) {
return *a * *b; }
0768デフォルトの名無しさん
2009/06/04(木) 23:26:30[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9351.txt
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン:visual studio
[3.3] 言語:C
[4] 期限: 6月8日
0770デフォルトの名無しさん
2009/06/04(木) 23:38:26問題が意味不明
何の「文字コード」なのか詳しく
入力データがあるなら入力形式と、それに対応する出力形式が分からないとどうしようもない
0771デフォルトの名無しさん
2009/06/04(木) 23:40:45ありがとうございます
0772デフォルトの名無しさん
2009/06/04(木) 23:42:31#include <stdio.h>
int main()
{
int ch, i;
while ((ch=fgetc(stdin)) != EOF) {
i++;
printf("%02x%c", ch, ((i % 16) == 0)? '\n': ' ');
}
printf("\n");
return 0;
}
妄想で補完
0773デフォルトの名無しさん
2009/06/04(木) 23:44:460774772
2009/06/04(木) 23:57:51i=0;に直してね
0775デフォルトの名無しさん
2009/06/04(木) 23:59:36適当なテキストファイルをバイナリダンプみたいに
16進数表示しろって話じゃないのかな
違うかな
0776デフォルトの名無しさん
2009/06/05(金) 00:01:46ありがとうございます!
0778デフォルトの名無しさん
2009/06/05(金) 00:15:052008年5月27日
計算機システム1(eof)
sample-utf8.txtの中身はこうかな
0779デフォルトの名無しさん
2009/06/05(金) 00:25:35それはテキストモードでNGだわ。バイナリモードにするC標準の方法ってなんだっけ?
_setmodeは"_"がMS独自っぽい気がするなぁ。ただいまぐぐり中。
0780デフォルトの名無しさん
2009/06/05(金) 00:28:300781724
2009/06/05(金) 00:28:53どなたかお願い出来ないでしょうか?
0782デフォルトの名無しさん
2009/06/05(金) 00:36:37それは試した上で言ってる? オレもそう思って試したらだめだったから言ってんだけど。
"_"なしバージョンはVS2005では呼ぶなって書いてあるドキュメントは見つけた。
とりあえずVSなら>>772に以下を付加すればOK。C標準かどうかはしらん。
#include <io.h> /* #include<stdio.h>の下 */
#include <fcntl.h>
:
_setmode( _fileno( stdin ), _O_BINARY ); /* whileの前 */
0783デフォルトの名無しさん
2009/06/05(金) 00:50:410784デフォルトの名無しさん
2009/06/05(金) 01:00:22ま、質問者はXPのVSなんで、>782を付けんとまずい可能性は高いだろうね。
0785デフォルトの名無しさん
2009/06/05(金) 01:04:27int main(int argc, char *argv[])
{
FILE *fp;
int i=0;
unsigned char ch[1];
if (argc !=2) {
fprintf(stderr, "引数にファイルを指定\n"); return 1;
}
fp = fopen(argv[1], "rb");
if (fp == NULL) {
fprintf(stderr, "ファイルを開けなかった\n"); return 1;
}
while (fread(ch, 1, 1, fp) > 0) {
i++; printf("%02x%c", ch[0], ((i % 16) == 0)? '\n': ' ');
}
printf("\n"); fclose(fp);
return 0;
}
Windows以外だと"b"は無視だったかな
0786デフォルトの名無しさん
2009/06/05(金) 01:06:580787デフォルトの名無しさん
2009/06/05(金) 01:17:01他のソフトでは、終わりにしないのもあるんだけど。
0788デフォルトの名無しさん
2009/06/05(金) 01:41:57ファイルでも標準入力でもバイナリモードにしておけば0x1aで終了しないと思う
0789デフォルトの名無しさん
2009/06/05(金) 01:50:30#include <boost/type_traits.hpp>
template<class T>
int f(T t)
{
return boost::is_signed<T>::value ? 0 : -1;
}
0790デフォルトの名無しさん
2009/06/05(金) 01:58:33[2] 問題文(含コード&リンク):サブルーチンを使用した簡単なプログラムの作成。(例は成績処理のプログラムだそうです。)
ですがサブルーチンを使用していればどんなプログラムでも良いそうです。
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン:TurboC++
[3.3] 言語: C
[4] 期限: 2009年6月6日
[5] その他の制限:#include <stdio.h>で始めてprintfやscanfを使用した形でお願いします。
サブルーチンというものがどんなものかわかりませんがそれを使用したプログラム(成績処理など)
を作っていただきたいです。どうかお願いいたします。
0791デフォルトの名無しさん
2009/06/05(金) 02:12:57http://pc12.2ch.net/test/read.cgi/tech/1242655611/-790
0792デフォルトの名無しさん
2009/06/05(金) 02:17:14[2] 問題文(含コード&リンク): 1~100の任意のN個の整数値を一次元配列に読み込み、その合計値と平均値を求め、
80~100,70~79,60~69,59以下の個数をそれぞれ出力するプログラムを作りなさい。
(1)入力データ数(Nは10以上とする)
(2)入力データ値(配列より読み出し、同じ値は使わない)
(3)入力データの合計値、平均値
(4)入力データについて各ランクの個数
(1)~(3)まではできたのですが、(4)がわかりません。。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9352.txt
↑これの続きにお願いします!
[3] 環境
[3.1] OS: Windows Vista
[3.2] コンパイラ名とバージョン: VS 2008
[3.3] 言語: C
[4] 期限: 2009年6月8日(月)14:00
[5] その他の制限: if,do,while,for,配列などです。
(例)各ランクでの個数の結果
80-100:5
70-79:3
60-69:1
59以下:3
このような感じでお願いします。
0793724
2009/06/05(金) 02:24:10すみません、僕のアップした問題と例文が矛盾していました
(signed型なら-1、Tがunsigned型なら0の誤りでした)
とりあえず教えてもらったのは正しく動作しました。有り難うございました
(こんなに短い宿題だったんだ。。)
0795デフォルトの名無しさん
2009/06/05(金) 03:24:07コンパイラにも通してないんで、考え方だけ。
int rank[4] ={0,0,0,0};
//sum+=seisu[i];の直下に
rank[ (seisu[i] >= 60) + (seisu[i]>=70) + (seisu[i]>=80) ]++;
//最後に
printf("80-100:%d\n", rank[3]);
printf("70-79:%d\n", rank[2]);
printf("60-69:%d\n", rank[1]);
printf("59以下:%d\n", rank[0]);
0796デフォルトの名無しさん
2009/06/05(金) 04:18:08コンパイルし実行した結果、うまくいきました!
ありがとうございました!
0797デフォルトの名無しさん
2009/06/05(金) 05:36:07if(seisu[i] < 60) rank[0]++;
else if(seisu[i] < 70) rank[1]++;
else if(seisu[i] < 80) rank[2]++;
else rank[3]++;
にしとけよw
0798デフォルトの名無しさん
2009/06/05(金) 07:07:32質問者がsample-utf8.txtを読むって課題出してんのに
標準入力から読もうとしてるのが間違いの発端だろ
Windowsの標準入力でバイナリモードって何がやりたいのよ
Windowsにはパイプなんか無いんだぞ
>>785でいいでしょ
0799デフォルトの名無しさん
2009/06/05(金) 07:39:00入力が一旦フラッシュされるだけ
改行とファイルの終わりは別だよ
WidnowsではCtrl+zでファイルの終わりを入力できる
0800デフォルトの名無しさん
2009/06/05(金) 10:01:28http://msdn.microsoft.com/ja-jp/library/cc429801.aspx
余計な茶々入れスマソ
0801デフォルトの名無しさん
2009/06/05(金) 10:43:180802デフォルトの名無しさん
2009/06/05(金) 11:32:51条件式が副作用を持つ関数の場合はその方法は使えない。
(概してそういうコードは多い)
副作用を持たない関数あるいは関数呼び出しを伴わない条件式の場合は
その方法は使える。速度が必要ならコメントアウトすればいいのだから.
そのコードを他人に使わせるのならロジック部分は冗長に書いても損す
ることは少ないと思う。ただしよほど奇麗に書かないと「読みづらい」
と文句言われるだろうが
A,B,Cは副作用を持つ関数呼び出しを含まない条件式
if(条件A)
else if(条件B)
else if(条件C)
==>
if (条件A)
else if( 条件B /*&& 条件A*/)
else if(条件C /*&& 条件A && 条件B*/)
....
てな感じ
0803802
2009/06/05(金) 11:35:55if (条件A)
else if( 条件B /*&& !条件A*/)
else if(条件C /*&& !条件A && !条件B*/)
に置き換えてね
0804デフォルトの名無しさん
2009/06/05(金) 11:44:320805デフォルトの名無しさん
2009/06/05(金) 11:46:55だからといって
char *string:
if( strcmp(string,"文字列1") ==0)
....
else if ( (strcmp(string,"文字列2")==0) /*&& (strcmp(string,"文字列1") !=0) */)
....
なんてやるとコメントが付けてても怒られるぞw
0806デフォルトの名無しさん
2009/06/05(金) 13:04:20(銅)
if(条件A && 条件B) ...
else if(条件A && !条件B) ...
else if(条件B && !条件A) ...
(銀)
if(条件A && 条件B) ...
else if(条件A) ...
else if(条件B) ...
(金)
if(条件A){
if(条件B) ...
else ...
}else if(条件B) ...
(特別賞)
if(条件A) {
if(条件B) { ...
} else { ...
}} else if(条件B) { ...
}
0807デフォルトの名無しさん
2009/06/05(金) 13:39:32ファイルの文字コードは何ですか。
例えば句読点は半角のピリオドとカンマとか、また漢字ならUnicodeかShift-JISなど。
0808デフォルトの名無しさん
2009/06/05(金) 15:18:5310' C言語の宿題片付けます 126 Res:687
20 input "N=";N: if(N<0)or(N>99)then N=5
30 for y=1 to N
40 for x=1 to N:gosub 110:next
60 print " ";
70 for x=N to 1 step -1:gosub 110:next
80 print
90 next y
100 end
110 ' draw
120 dx=1:dy=1:m=0:ori=0:right=N:left=1:top=2:bottom=N
130 while(m<=N*N)
140 m=m+1:if(dx=x)and(dy=y)then gosub 200:return
150 if(ori=0)then dx=dx+1:if(dx=right)then ori=1:right=right-1:goto 190
160 if(ori=1)then dy=dy+1:if(dy=bottom)then ori=2:bottom=bottom-1:goto 190
170 if(ori=2)then dx=dx-1:if(dx=left)then ori=3:left=left+1:goto 190
180 if(ori=3)then dy=dy-1:if(dy=top)then ori=0:top=top+1:goto 190
190 wend
200 ' print
210 keta=1:while(10^keta<N*N):keta=keta+1:wend
220 mm$=str$(m):while(len(mm$)<keta):mm$="0"+mm$:wend
230 print mm$;:return
0809デフォルトの名無しさん
2009/06/05(金) 15:51:47[1]授業単元:データ構造2
[2]問題文:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9353.txt
[3]環境
[3.1]OS:XP VISTA
[3.2]コンパイラ名:gcc VC
[3.3]言語:C
[4]期限:6月6日午後5まで
[5]その他の制限:とくになしです。習っていますが、理解がまだ追いついてないです;;
0810 ◆sUfWYz9MSA
2009/06/05(金) 16:03:01[2]問題文:
(1)再帰を使用して完全2分岐の「深さ」優先探索を行う。
行きがけ順、帰りがけ順、なぞりがけ順、それぞれの関数を作成し結果を出力させること。
各ノードに整数データを入れて、次の出力結果が得られる事を確認せよ。
行きがけ:5,3,1,4,7,6,9
なぞりがけ:1,3,4,5,6,7,9
帰りがけ:1,4,3,6,9,7,5
(2)次に再帰を使用せずにスタックを用いて同様の結果が得られる事を確認せよ。
[3]環境:C、Linux
[4]期限:(1)2009/6/8 (2)無期限
[5]その他の制限:問題文はテンプレートであり各自参考として使用してよい
<以下問題文テンプレート>
/* ?に何か入るかもしれない */
#include <stdlib.h>
#include <stdio.h>
#define NUM_NODE 7;
void ikigake (int t[], int i)
{
if( i==? )
return;
???
printf("3d ->", t[i]);
???
}
0811 ◆sUfWYz9MSA
2009/06/05(金) 16:04:38void nazorigake(int t[], int i)
{
if(i==?)
return;
???
printf("%3d ->", t[i]);
???
}
void kaerigake(int t[], int i)
{
if(i==?)
return;
???
printf("%3d ->", t[i]);
???
main()
{
int tree[???] = {???};
printf("\nIKIGAKE\n");
ikigake();
??
printf(" END\nNAZORIGAKE\n");
nazorigake();
??
printf(" END\nKAERIGAKE\n");
kaerigake();
??
0812デフォルトの名無しさん
2009/06/05(金) 16:09:57通った場所と、現在位置を記録し、すでに探索済みのところはのぞいたらいいと思うよ。
反転と回転の同一視で1/8に探索が減る。
0813デフォルトの名無しさん
2009/06/05(金) 17:20:53#include <stdio.h>
#include <math.h>
int n, keta, x, y;
void draw();
int main() {
printf("N="); scanf("%d",&n); if(n<0 || n>99) n=5;
keta = log10((double)n*n);
for(y=1; y<=n; y++) {
for(x=1; x<=n; x++) draw();
printf(" ");
for(x=n; x>=1; x--) draw();
puts("");
}
return 0;
}
void draw() {
int dx=1,dy=1,m=0,ori=0,right=n,left=1,top=2,bottom=n;
while(m <= n*n) {
m++; if(dx==x && dy==y) { break; /* return; */}
if(ori==0) { dx++; if(dx==right) { ori=1; right--; continue; } }
if(ori==1) { dy++; if(dy==bottom) { ori=2; bottom--; continue; } }
if(ori==2) { dx--; if(dx==left) { ori=3; left++; continue; } }
if(ori==3) { dy--; if(dy==top) { ori=0; top++; continue; } }
}
switch(keta){
case 0: printf("%01d", m); break; // 3*3 = 9
case 1: printf("%02d", m); break; // 9*9 = <99
case 2: printf("%03d", m); break; // 31*31 = <999
case 3: printf("%04d", m); break; // 99*99 = <9999
}
}
0814デフォルトの名無しさん
2009/06/05(金) 17:34:171*1
3*3
5*5
7*7
には解があるが、8*8はないだろ
8*8が簡単
0815デフォルトの名無しさん
2009/06/05(金) 17:37:34[2] 問題文(含コード&リンク): 数字の列を入力すると、値が
重複するものを削除するプログラムを作成せよ。
ただし数列の長さは最大でも100とする。プログラムの実行の流れは
以下のようになる。
はじめに「数列のサイズは?(最大100)」と表示されるので、入力する数字の個数を入力する。次に「?番目の正の数を入力してください:」と表示されるので、整数を入力する。
?に何番目か表す数字が入る。この入力処理をはじめに入力したサイズ分繰り返す。
入力し終えると、入力された数字のうち重複するものが削除されたデータが表示される。
たとえば、1,2,3,4,5,5という数字を入力されると表示される数列は1,2,3,4,5と表示される。
[3] 環境
[3.1] OS: (Windows/vista
[3.2] コンパイラ名とバージョン: VisualC++2008 Express Edition
[3.3] 言語:C++
[4] 期限: (今日から〜2009年6月11日まで]
[5] その他の制限: 配列は習いました。
・サイズは0個でも‐5でも101個でもおかしなことが起こらず適切な処理がされている。たとえば「サイズがおかしいです」と表示して終了する。
・正しく重複をなくすことができている
プログラム中に何個目か、しっかり表示されている。
・プログラム実行中に表示される文字のうち意味不明なものが存在しない。
お願いします〜
0816デフォルトの名無しさん
2009/06/05(金) 18:43:220817デフォルトの名無しさん
2009/06/05(金) 19:32:49課題のリンク先を見てないだろ?
> ファイル名<sample-utf8.txt
これをどう解釈するかだが、ファイル名はEXEのファイル名で標準入力のリダイレクトと解釈するのが不自然だとは思わん。
0818デフォルトの名無しさん
2009/06/05(金) 20:30:24拡張子を見て、テキストファイルだと判断し、
制御コードがないと想定するのも、
不自然ではないよね。
問題文に無いことについてはどうするのかだな。
0819デフォルトの名無しさん
2009/06/05(金) 20:40:49(1) _setmodeを授業でやった直後 or 教える目的
(2) リダイレクトでない(出題者のミス or 質問者のミス)
(3) 0d 0aでない(出題者のミス or 質問者のミス)
上の順でいずれかかなぁ?
0820デフォルトの名無しさん
2009/06/05(金) 20:47:27#include <stdio.h>
int main(void)
{
int i, j, k, n, a[100];
printf("数列のサイズは?(最大100)");
scanf("%d", &n);
if(n<1 || 100 < n) {
printf("サイズがおかしいです\n");
return 0;
}
for(i=0; i<n; i++) {
printf("%d番目の正の数を入力してください:", i + 1);
scanf("%d", a + i);
}
for(i=0; i<n; i++) {
int temp = a[i];
for(j=i+1; j<n; ) {
if(a[j] == temp) {
for(k=j; k<n-1; k++) a[k] = a[k+1];
n--;
}
else j++;
}
}
for(i=0; i<n; i++) printf("%d ", a[i]);
return 0;
}
0821デフォルトの名無しさん
2009/06/05(金) 20:53:57>8*8はないだろ
+−+−+−+−+−+−+−+−+
|01|38|55|34|03|36|19|22|
+−+−+−+−+−+−+−+−+
|54|47|02|37|20|23|04|17|
+−+−+−+−+−+−+−+−+
|39|56|33|46|35|18|21|10|
+−+−+−+−+−+−+−+−+
|48|53|40|57|24|11|16|05|
+−+−+−+−+−+−+−+−+
|59|32|45|52|41|26|09|12|
+−+−+−+−+−+−+−+−+
|44|49|58|25|62|15|06|27|
+−+−+−+−+−+−+−+−+
|31|60|51|42|29|08|13|64|
+−+−+−+−+−+−+−+−+
|50|43|30|61|14|63|28|07|
+−+−+−+−+−+−+−+−+
???
0822デフォルトの名無しさん
2009/06/05(金) 21:02:17tempで保存する方法と○--の表現を使わないで表すことはできるでしょうか?
0823デフォルトの名無しさん
2009/06/05(金) 21:15:110824デフォルトの名無しさん
2009/06/05(金) 21:22:383つずつ移動するから、1ます余って無理かと思った。
0825デフォルトの名無しさん
2009/06/05(金) 21:28:310826デフォルトの名無しさん
2009/06/05(金) 21:38:28[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9354.txt
[3] 環境
[3.1] OS: Unix
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 2009年6月7日19:30まで
[5] その他の制限:なし
0827デフォルトの名無しさん
2009/06/05(金) 22:04:22スタック
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9355.txt
再帰
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9356.txt
スタックが遅いのはすまん。
構造体にするより、ビット演算でx,y,dをintに詰め込んだ方が早かったが、質問がきそうでやめた。
ちなみにこんな感じ:
#define N (5)
#define B (3)
#define PACK(x,y,m) (((((x)<<B)|(y))<<3)|(m))
#define X(n) (((n)>>(3+B)))
#define Y(n) ((((n)>>3))&~(0xFFFFFFFF<<B))
#define D(n) ((n)&7)
x*5+yにすると、取り出すときに剰余を使うので遅くなる。
0828デフォルトの名無しさん
2009/06/05(金) 22:07:50何も表示されないw
0829813
2009/06/05(金) 22:37:250830デフォルトの名無しさん
2009/06/05(金) 22:39:43通信プロトコルは何を使えとか指定ある?
0831デフォルトの名無しさん
2009/06/05(金) 23:04:44外出しみたいな姑息な最適化をするんだw
(多分反射的生理的な操作とみた)
0832デフォルトの名無しさん
2009/06/05(金) 23:06:39SSHです。
あと忘れていたのですが、select(),system(),fork()の使用がこの課題では認められていません。
後付で申し訳ありません。
0833デフォルトの名無しさん
2009/06/05(金) 23:40:27sshのポートを使ってサバクラ作れって事?
それともssh使ってサーバーにログインし、動かすプログラム?
0834デフォルトの名無しさん
2009/06/05(金) 23:51:51sshのポートを使ってという意味です。
0835デフォルトの名無しさん
2009/06/06(土) 00:02:26>反転と回転の同一視で1/8に探索が減る。
プログラムの出力結果とにらめっこして
ようやく意味がわかった・・・ ^^;
0836デフォルトの名無しさん
2009/06/06(土) 00:10:35若いボート番号を横取りするのは不味いんじゃないかな
意図が良く分からない
0837デフォルトの名無しさん
2009/06/06(土) 03:04:24質問者です>>809です。
先ほどから確認をとろうと立ち上げているのですが、肝心なvistaが動かず。。xpを立ち上げるもコンパイラするソフト??が入っておらず、フリーで配布してあるところを探しているのですが、
3時間ばかしダウンロードがいっこうに進まず何も出来ない状態です;;
このままだと出力結果を知らぬまま提出することになりそうです。
本当に申し訳ないのですが
出力結果をお教え頂けないでしょうか??
プログラムも組んでもらってこんなこと聞くのはおかしな話ですが
本当に本当によろしくお願いします><
0838デフォルトの名無しさん
2009/06/06(土) 03:13:40小さいやつ
0839デフォルトの名無しさん
2009/06/06(土) 03:44:02もしどうしてもダメなら、codepadを使ってみたら?
codepad http://codepad.org/
真ん中のテキストボックスにコードを入れて、
Language => C, Run codeにチェックを入れてSubmitを
押すと、コードをコンパイルして実行してくれる
0840デフォルトの名無しさん
2009/06/06(土) 05:50:02210 行目を、20 行目の後ろに持っていくことに問題ある?
20 input "N=";N: if(N<0)or(N>99)then N=5
25 keta=1:while(10^keta<N*N):keta=keta+1:wend
:
200 ' print
220 mm$=str$(m):while(len(mm$)<keta):mm$="0"+mm$:wend
0841デフォルトの名無しさん
2009/06/06(土) 08:37:530842デフォルトの名無しさん
2009/06/06(土) 09:45:48BASICはスレ違いだし、もう処理系が存在しないに等しい言語。しっしっ
0843デフォルトの名無しさん
2009/06/06(土) 09:59:110844デフォルトの名無しさん
2009/06/06(土) 10:11:140845デフォルトの名無しさん
2009/06/06(土) 10:18:12それはもったいないな。どこかにないかな。
0846デフォルトの名無しさん
2009/06/06(土) 10:36:54ありがとうございます。そこから結果を観ることができました。
レポートも間に合いそうです。
みなさんありがとうございます!!><
0847デフォルトの名無しさん
2009/06/06(土) 10:40:27ていの良い超高級アセンブラシミュレータである件については
よーく理解してから信仰しても良いと思います。
見た目のコードの美しさも今後は非常に重要な時代でC系の記号美溢れるコードが主流である状況は続くでしょう。
0848デフォルトの名無しさん
2009/06/06(土) 10:49:3610 X=1
20 for I=1 to 50
30 X=X*I
40 next
50 print X
run
30414093201713378043612608166064768844377641568960512000000000000
OK
to 1000 でも桁溢れしない。こういう所、捨てがたい魅力があるんだな。
動作するなら別にwindowsでなくてもいいから、誰かやってくれないか。
0849デフォルトの名無しさん
2009/06/06(土) 11:25:43それはベーシックにかぎったはなしではなく、
C系列でも実現可能で多倍長整数とか言われてるやつです。
桁が多くなると計算にものすごい時間がかかるようになるから、
高速な多倍長演算は重宝されますです。
0850デフォルトの名無しさん
2009/06/06(土) 11:35:220851デフォルトの名無しさん
2009/06/06(土) 11:51:33できない。
0852デフォルトの名無しさん
2009/06/06(土) 11:54:520853デフォルトの名無しさん
2009/06/06(土) 12:16:08関数内で適切にデータアクセスを行うようなプログラムかな。
ポインタとサイズをまとめた構造体を使うという手もある。
いずれにしても、コンパイラは何も面倒は見てくれない。
0854デフォルトの名無しさん
2009/06/06(土) 12:36:290855デフォルトの名無しさん
2009/06/06(土) 13:32:520856デフォルトの名無しさん
2009/06/06(土) 14:09:45いくつ引数として読み込むか設定してないし
0857デフォルトの名無しさん
2009/06/06(土) 14:13:530858デフォルトの名無しさん
2009/06/06(土) 14:16:37最後の ... はスタックがある限り(かな??)引数を食わせれる宣言。可変長引数。
取得も普通の引数より手数を食う。
0860デフォルトの名無しさん
2009/06/06(土) 14:59:43[2] 問題文(含コード&リンク):要素数3のint型配列2つを引数とし、要素ごとの足し算、引き算、掛け算の結果を出力するvoid型のope3関数を作成する。
main関数においてターミナルから3つの整数a[0], a[1], a[2]を読み込み、更に 3つの整数b[0], b[1], b[2]を読み込み、 ope3関数によって、a[i]+b[i], a[i]-b[i], a[i]*b[i]を出力するプログラムを作成しなさい。
但しope3では配列を用いない。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:6月11日 8:00
[5] その他の制限:関数ope3のプロトタイプはvoid ope3(int *, int *)とすること。
0861デフォルトの名無しさん
2009/06/06(土) 15:06:55[2] C言語(C89を基準)の長所と短所を分析し箇条書きに纏めよ。(100個以上挙げること)
例:
項番 長所/短所区分 内容
1 長所 大文字と小文字が区別されるので識別子衝突のリスクが小さい
2 短所 大文字と小文字が区別されるので識別子のミスタイプや取り違えが起こりやすい。
※他のプログラミング言語群よりも抜きん出て高い性質を挙げること
※特定のプログラミング言語を名指ししないこと
[3]Windows/Linux他 /C89処理系
[4]無期限
0862デフォルトの名無しさん
2009/06/06(土) 15:20:29・すでに枯れていて使える人間自体が多いこと。
・ライブラリが貧弱なこと。逆に個人でも実装できるレベルの標準ライブラリ。
などなど。
0863デフォルトの名無しさん
2009/06/06(土) 15:27:38[2] 問題文(含コード&リンク):1〜256文字の文字列を入力し、その単語数を出力するプログラムを作成せよ。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:6月10日 8:00
[5] その他の制限:>>739で作成したword関数を用いること。
入力する文字列に2つ以上の連続したスペースはないとする。
入力する文字列の最初と最後はスペースでないとする。
0864デフォルトの名無しさん
2009/06/06(土) 15:28:12[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9358.txt
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9359.txt
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:visual studio 2008
[3.3] 言語:C,C++
[4] 期限:2009/06/12 (金曜日)
[5] その他の制限:特にありません
表示せよと書かれてありますがデータを保存するまででOKです
よろしくお願いします
0865デフォルトの名無しさん
2009/06/06(土) 17:07:31[2] 問題文(含コード&リンク):
テストの点数を入力し、90 以上なら‘S’、90 未満80 以上なら‘A’、80 未満70 以上なら‘B’、70
未満60 以上なら‘C’、60 未満なら‘D’、この範囲以外の数値が入力されたらエラーを表示する関
数judge を作成せよ。
ただし、関数原型宣言を用いて、この関数をmain 関数より後に記述すること。
さらに実際にその関数を用いて、実行例のように表示するプログラムを作成すること。
実行例
テストの点を入力: 75
成績: B
[3] 環境
[3.1] OS:Windows XP
[3.2] コンパイラ名とバージョン:Visual Studio 2005
[3.3] 言語: C
[4] 期限: 6/12
[5] その他の制限:
0866デフォルトの名無しさん
2009/06/06(土) 17:17:11お前が作成したword関数とやらはどこにあるんだよ
0867デフォルトの名無しさん
2009/06/06(土) 17:33:09これでいいのかな?
#include<stdio.h>
int tensuu;
void judge(void);
int main(void){
printf("テストの点を入力\n");
scanf("%d",&tensuu);
judge();
return 0;
}
void judge(void){
if(tensuu>100||tensuu<0){
printf("エラー");
}
else if(tensuu>=90){
printf("成績:S");
}
else if(tensuu>=80){
printf("成績:A");
}
else if(tensuu>=70){
printf("成績:B");
}
else if(tensuu>=60){
printf("成績:C");
}
else if(tensuu<60){
printf("成績:D");
}
return;
}
0868デフォルトの名無しさん
2009/06/06(土) 17:41:59[2] 問題文(含コード&リンク):A http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9360.txt
B http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9362.txt
[3] 環境
[3.1] OS:Windows Xp
[3.2] Visual Studio
[3.3] 言語:C++
[4] 期限: 6/8
[5] その他の制限 A�@〜�E B�@〜�Gの付いた行だけを書き換えてできるようにお願いします
0869デフォルトの名無しさん
2009/06/06(土) 17:48:44文法において、長所は同時に短所でもあり、逆も成り立つ
0870デフォルトの名無しさん
2009/06/06(土) 18:02:121.古い
2.古すぎ
3.もうC99だっつーの。
4.なめんな
0871デフォルトの名無しさん
2009/06/06(土) 18:03:13じゃだめなのかな?w
0872デフォルトの名無しさん
2009/06/06(土) 18:09:451.もう20年以上も前からまったく進化していない
2.せっかく10年前にC99が出たのにいまだに乗換えが進まない
3.っていうか学校教育でくらいC99教えろよ
4.おまえだよおまえ
5.何をいまさらC89とか学生に教えてんだよ
6.やめちまえよ
0873デフォルトの名無しさん
2009/06/06(土) 18:14:01//が使えないこと
0874デフォルトの名無しさん
2009/06/06(土) 18:15:200875デフォルトの名無しさん
2009/06/06(土) 18:22:210876デフォルトの名無しさん
2009/06/06(土) 18:45:52//コメントやbool、ブロックの先頭以外で変数宣言可あたりは実用的だけど
0877デフォルトの名無しさん
2009/06/06(土) 18:47:59下手に新機能を使うとバグが分かりにくくなりそう。
困憊らが対応しているのかどうかもあわせて検討しなきゃならんし。
0878デフォルトの名無しさん
2009/06/06(土) 18:52:09玄人は移植性を考慮してC89(ANSI X3.159-1989)またはC90(ISO/IEC 9899:1990)に準拠したコードを書く。
が、実際は、完全には準拠できなかったりする。
C99C99と言っている人がいるが本当に規格書を読んでいるのか。
私はC++コンパイラでコンパイルする気は無いが、
誰かがソースをC++コンパイラでコンパイルするかもしれないから、
C89準拠にこだわっている。
ただの古い知識をもっているC言語ハッカーのぼやきと思ってくれ。
制限があるから進化する。
0879デフォルトの名無しさん
2009/06/06(土) 18:54:58その直後にそれに反する文法作ったC99は、存在そのものが不思議
0880デフォルトの名無しさん
2009/06/06(土) 19:02:17いまだにC89にこだわったり、K&Rにこだわったり…
未来のない言語ですね
0881デフォルトの名無しさん
2009/06/06(土) 19:05:09むしろCほど長生きする言語はもう今後でないだろ
0882デフォルトの名無しさん
2009/06/06(土) 19:08:35さすがにK&Rはもう駆逐されていい、危険過ぎる。
ああそうか、>>880は、C++マンセーの人か。
C言語マンセーな私とは道理で意見が合わないわけだ。
これ以上は、スレ違いなので止める。リーナスがなんかいていたスレを思い出したよ。
0883デフォルトの名無しさん
2009/06/06(土) 19:09:000884デフォルトの名無しさん
2009/06/06(土) 19:09:20変化しすぎで それどの仕様での話? なんて確認が不要だもの
0885デフォルトの名無しさん
2009/06/06(土) 19:12:28結局のところ、C言語だってC89なのかC99なのか確認する必要があるんじゃない?
gccのように一部取り入れている環境の場合は特に厄介なことに。
いっそ最初からまったくC99に準拠しないVCの方が話はシンプル。
0886デフォルトの名無しさん
2009/06/06(土) 19:17:47>>880じゃないが、早くリタイアしておくれ^^
>>884
今のところその仕様はC99?とか聞かれたことはなく、
C言語といえば暗黙の了解でC89だな
>>885
VC6はひどかったがw
というか、今のVCは明示的にC99と指定しないと厳密に判定してくれるのか?
0888デフォルトの名無しさん
2009/06/06(土) 19:24:560889デフォルトの名無しさん
2009/06/06(土) 20:15:21ありがとうございます
0890デフォルトの名無しさん
2009/06/06(土) 20:20:25[2] 問題文(含コード&リンク):
2問あります。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9363.zip
[3] 環境
[3.1] OS:Windows XP
[3.2] コンパイラ名とバージョン:Visual Studio 2005
[3.3] 言語:C
[4] 期限:6/11
[5] その他の制限:お手数かけますが宜しくお願いします
0891デフォルトの名無しさん
2009/06/06(土) 20:30:55ふたつめの問題はこれでいいのかな、ひとつめの問題よりかなり難易度が低いから、何か見落としてる気がするが・・・
#include<stdio.h>
int main(void)
{
int a[1];
int b;
printf("整数1を入力\n");
scanf("%d",&a[0]);
printf("整数2を入力\n");
scanf("%d",&a[1]);
if(a[0]<a[1]){
b=a[0];
a[0]=a[1];
a[1]=b;
}
printf("%d,%d",a[0],a[1]);
return 0;
}
0892デフォルトの名無しさん
2009/06/06(土) 21:42:25A
�@ {{50,85,70,65},{90,80,85,65},{70,75,65,80},{60,95,80,75}};
�A for (i = 0; i < PERSON_NUM; i++) {
�B for (i = 0; i < PERSON_NUM; i++) {
�C personalAverage[i] += record[i][j];
�D for (j = 0; j < SUBJECT_NUM; j++) {
�E subjectAverage[j] += record[i][j];
B
�@ for( i = 0; i < stn; i++) {
�A st[i].student_id,st[i].name,st[i].m_english,st[i].m_math,st[i].m_chemistry,st[i].m_physics);
�B st[i].student_id,st[i].name,st[i].m_english,st[i].m_math,st[i].m_chemistry,st[i].m_physics);
�C personalAverage[i] = (double)(st[i].m_english+st[i].m_math+st[i].m_chemistry+st[i].m_physics)/SUBJECT_NUM;
�D subjectAverage[0] += st[i].m_english;
�E subjectAverage[1] += st[i].m_math;
�F subjectAverage[2] += st[i].m_chemistry;
�G subjectAverage[3] += st[i].m_physics;
0893デフォルトの名無しさん
2009/06/07(日) 02:52:13http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9364.txt
レシートの裏紙
>>863(9358,9359) 文字列を入力し、その単語数を出力する 6月10日 8:00
>>860 要素ごとの足し算、引き算、掛け算の結果を出力する 6月11日 8:00
>>810-811 再帰を使用して完全2分岐の「深さ」優先探索を行う。 6月8日
>>747 文字列Sが単語Wを含むとき、その単語の前にあるスペースに*を挿入する 6月10日 8:00
>>763 句読点が現れた時点で改行し表示する なし
>>511 一行1000バイト以下のテキストファイルをソートするプログラム。 なし
>>826(9354) マルバツゲームをプレイする為のマルチスレッドネットワークサーバーを作る。 6月7日19:30まで
>>542 3次元三角形一つの透視投影と画像出力.簡易CSGモデルの三角形ポリゴン化. 6月12日
>>766 fork() やexecl() 6月6日午前中
>>604 最小2乗法によりm次の多項式近似を行う 6月5日
>>537 ガウス・ルジャンドル積分のプログラム 6月5日
>>478 ノードの中身を表示しながらトラバースする関数 6月3日9:00
>>381(9282) 複素数のクラス(>>243) 5月30日
>>016(9214) CRUD操作のデータベース 5月23日
>>004(9209) ArithmeticPromotionクラス 5月21日
0894デフォルトの名無しさん
2009/06/07(日) 04:57:14確かに少し簡単すぎるので何か欠けてる気がします。
テーマには「配列変数の要素を操作する関数」とあるのですが、何とかなりませんでしょうか。
0895デフォルトの名無しさん
2009/06/07(日) 07:03:52実際C99の案件なんか一つもねーっつーの
コンパイラもIntel C++ぐらいでしょ100%対応してるのは
0896デフォルトの名無しさん
2009/06/07(日) 09:05:55関数にしろって書いてあるのに、少しは自分の頭を考えろ。
0897つづき
2009/06/07(日) 10:13:54#include <stdio.h>
int b[2];
int min_max(int **a);
int main(void) {
int *data;
min_max(&data);
printf("%d,%d", data[0], data[1]);
return 0;
}
int min_max(int **a) {
int temp;
*a = b; // Rent from global area not malloc().
if(*a == NULL) return 1;
printf("整数1を入力:");
scanf("%d", &(*a)[0]);
printf("整数2を入力:");
scanf("%d", &(*a)[1]);
if((*a)[0]<(*a)[1]){
temp=(*a)[0];
(*a)[0]=(*a)[1];
(*a)[1]=temp;
}
return 0;
}
0898デフォルトの名無しさん
2009/06/07(日) 10:29:12申し訳ありません。
Rent from global area not malloc().
↑この関数はまだ習っていないのでもう少し簡単にしていただけ無いでしょうか?
0899デフォルトの名無しさん
2009/06/07(日) 11:01:39どう見ても朝釣りです。ありがとうございました。
// *a = bって*a = &b[0]じゃないとエラー出ると思うんだが
0900デフォルトの名無しさん
2009/06/07(日) 11:08:07897じゃないけど、でないよ
むしろ何でエラーだと思うか疑問だ
ポインタ記号とか&, []とか意味ちゃんとわかってるか?
0901デフォルトの名無しさん
2009/06/07(日) 11:12:230902デフォルトの名無しさん
2009/06/07(日) 11:29:19#include <stdio.h>
int min_max(int a[2]);
int main(void) {
int b[2];
printf("整数1を入力:");
scanf("%d", &b[0]);
printf("整数2を入力:");
scanf("%d", &b[1]);
min_max(b);
printf("%d,%d", b[0], b[1]);
return 0;
}
int min_max(int a[2]) {
int temp;
if(a[0]<a[1]){
temp=a[0]; a[0]=a[1]; a[1]=temp;
}
return 0;
}
0903デフォルトの名無しさん
2009/06/07(日) 11:31:110904デフォルトの名無しさん
2009/06/07(日) 12:00:43有難うございます。
これなら問題ありません。
課題1はできますでしょうか?
0905デフォルトの名無しさん
2009/06/07(日) 12:10:30#include <stdio.h>
#define MAX 5
int main(void)
{
int a[5],sum=0,i;
for(i=0; i<MAX; i++){
printf("整数%dを入力:",i+1);
scanf("%d",&a[i]);
}
for(i=0; i<MAX; i++)
sum+=a[i];
printf("平均値は %f",(double)(sum/MAX));
return 0;
}
0906デフォルトの名無しさん
2009/06/07(日) 12:20:22・配列変数内の数値の平均値を実数型で返す関数aveを作成せよ。
・constを用いて、関数内で配列変数の中身が書き換えられないようにすること。
この2つの条件が満たされていないみたいです。
申し訳ありませんが、修正を加えていただけませんでしょうかorz
0907デフォルトの名無しさん
2009/06/07(日) 12:29:25数行追記するぐらいやろうとは思わんの?
int ave(int array[]){
int i;
for(i = 0; i < MAX; ++i){
}
0908デフォルトの名無しさん
2009/06/07(日) 12:35:42スマソ問題よんでなかた
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9365.txt
0909デフォルトの名無しさん
2009/06/07(日) 12:39:17有難うございます。
助かりました。
復習して自分で書けるように頑張ります。
0910デフォルトの名無しさん
2009/06/07(日) 12:41:01そして遅れをとる(゚д゚)
0912デフォルトの名無しさん
2009/06/07(日) 12:54:13依頼人は回答を待っている?
0913デフォルトの名無しさん
2009/06/07(日) 14:14:16[2] 問題文(含コード&リンク):整数を読み込んでその約数を表示しろ
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン:
[3.3] 言語: C
[4] 期限: 今日中
[5] その他の制限:do-whileまで(while文for文は使用不可)
よろしくお願いします
0914デフォルトの名無しさん
2009/06/07(日) 14:24:27#include<stdio.h>
int main(void){
int a,b=1;
printf("数値を入力してください\n");
scanf("%d",&a);
do{
if(a%b==0){
printf("%d\n",b);
}
b++;
}while(b<=a);
return 0;
}
0915デフォルトの名無しさん
2009/06/07(日) 14:27:40ありがとうございます
そこにb++を置かなきゃいけなかったのか
0916デフォルトの名無しさん
2009/06/07(日) 15:12:45ありがとうございます
家の環境がVisual C++なのですがBのほうで
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9366.txt
といれるとエラーがでてしまいます
なにか加え間違いがあるか見てもらえないでしょうか?
0917デフォルトの名無しさん
2009/06/07(日) 15:20:29どういうエラー?
そのままコピペで通ったけど。(end_mainはコメントアウトした)
0918デフォルトの名無しさん
2009/06/07(日) 15:22:22[2] 問題文(含コード&リンク)
1〜100の擬似乱数を発生させ、
自分で入力した任意の数字が何回目で同じになったのかと、
それまでの乱数の合計を求め画面に
表示させ終わらすプログラムを作りなさい。
[3] 環境
[3.1] OS: Windows XP
[3.2] コンパイラ名とバージョン:不明
[3.3] 言語: C
[4] 期限:6月9日13時まで
[5] その他の制限: 特になし
よろしくお願いします。
0919デフォルトの名無しさん
2009/06/07(日) 15:37:22http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9369.txt
0920デフォルトの名無しさん
2009/06/07(日) 15:46:16それなりに注意が必要だからな。
0921デフォルトの名無しさん
2009/06/07(日) 15:52:29> それまでの乱数の合計を求め画面に
ここがよく分からない。乱数の合計とは、具体的に
どのように合計されたもの?
0922デフォルトの名無しさん
2009/06/07(日) 16:06:14end_mainをはずしていなかったため、予期せぬEOFが検出ということでした。
ありがとうございます
0923デフォルトの名無しさん
2009/06/07(日) 16:07:01合計と言うからには通常、足されたものだろう。
数値入力 n
乱数合計 ar
乱数発生 r
rとnが同じなら終了。違うなら ar += r;
ってことだろ。
0925デフォルトの名無しさん
2009/06/07(日) 16:12:180926デフォルトの名無しさん
2009/06/07(日) 16:20:51こういうことかな?
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int GetRandom(int min,int max);
int main(void)
{
int a,b,c=0,d=0;
srand((unsigned int)time(NULL));
printf("数値を入力してください\n");
scanf("%d",&a);
while(a!=b){
b=GetRandom(1,100);
c=c+b;
d++;
}
printf("%d回目で一致しました。乱数の合計値は%dです。",d,c);
return 0;
}
int GetRandom(int min,int max)
{
return min + (int)(rand()*(max-min+1.0)/(1.0+RAND_MAX));
}
0927デフォルトの名無しさん
2009/06/07(日) 16:35:390929デフォルトの名無しさん
2009/06/07(日) 16:41:26[2] 問題文(含コード&リンク):
トポロジカルソートの正当性を述べよ。つまり、アルゴリズムによって
正しくソートできていることを示せ。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 6月8日17:00まで
[5] その他の制限:
アルゴリズム
グラフGに対して深さ優先探索を行い、各頂点uの終了時間f[u]を計算し、
頂点uのすべての隣接頂点に対する操作の終了直後にuをソート用の線形リストの先頭に挿入する。
グラフは有効アサイクリックグラフです。
0930デフォルトの名無しさん
2009/06/07(日) 17:25:55#include <stdio.h>
#define N 3 /* 要素数 */
void ope3(int *, int *);
int main() {
int i, a[N], b[N];
for(i=0;i<N;i++) {
printf("a[%d]: ", i);
scanf("%d", &a[i]);
}
for(i=0;i<N;i++) {
printf("b[%d]: ", i);
scanf("%d", &b[i]);
}
ope3(a, b);
}
void ope3(int *data1, int *data2) {
int i;
printf("\n足し算=");
for(i=0; i<N; i++)
printf("%d ", *(data1+i) + *(data2+i));
printf("\n引き算=");
for(i=0; i<N; i++)
printf("%d ", *(data1+i) - *(data2+i));
printf("\n掛け算=");
for(i=0; i<N; i++)
printf("%d ", *(data1+i) * *(data2+i));
}
0933デフォルトの名無しさん
2009/06/07(日) 17:47:04ごめんなさいdの初期値は0じゃなくて1のほうが正しいかも
0934デフォルトの名無しさん
2009/06/07(日) 18:04:48ありがとうございます!
0935デフォルトの名無しさん
2009/06/07(日) 18:09:03int a,b,c=0,d=0;
do {
b=GetRandom(1,100);
c=c+b;
d++;
} while(a!=b);
printf("%d回目で一致しました。乱数の合計値は%dです。",d,c);
0936デフォルトの名無しさん
2009/06/07(日) 19:43:47何か参考になるサイトなどは知らないでしょうか?
[0-9]
[a-Z]
[{()}.,]
{改行\n空白スペース\t]
最低限この文字は認識させたく思っています.
0937デフォルトの名無しさん
2009/06/07(日) 19:56:31boost::spiritとか?
使ったことないから詳しくは知らないけど
0938デフォルトの名無しさん
2009/06/07(日) 20:55:37>>542
あー、それやろうと思ったけど確かにファイル削除されてるんだよね…
…
…
って、ボケ〜
ファイル無いの確認しておいて、待ってます、だぁ〜?
0939デフォルトの名無しさん
2009/06/07(日) 21:02:260940デフォルトの名無しさん
2009/06/07(日) 21:49:49[2] 問題文(含コード&リンク): 高速化(以下ソースと詳しい問題文)
http://www1.axfc.net/uploader/He/so/229449.zip
[3] 環境
[3.1] OS: Linux, Windows
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 6月10日
[5] その他の制限: 特になし
よろしくお願いします。
本当そうでした、すみません!また上げたのでよろしくお願いします!
http://u1.getuploader.com/MTG/download/2/kadai.zip
0942デフォルトの名無しさん
2009/06/07(日) 22:08:09void color_to_gray(UCHAR gray[][DIM2], UCHAR data[][DIM2][DIM3], int n_gyou, int n_retu)
の高速化
gray[g][r]=(UCHAR)(tmp/3.0+0.5); /* 平均値を四捨五入 */
↓
gray[g][r]=(UCHAR)((tmp*2+1)/6); /* 平均値を四捨五入 */
0943デフォルトの名無しさん
2009/06/07(日) 22:09:13ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
すみません、もちろん最初はそちらにアップロードしようと思ったのですが、容量が100KBまでなのでアップロードできなかったんです。
0945デフォルトの名無しさん
2009/06/07(日) 22:18:090946デフォルトの名無しさん
2009/06/07(日) 23:23:52>>942で多少は高速化できている。
プロファイル取ったら、70%はedge_to_colorに費されているので、
こちらを高速化した方が効果があると思う。
具体的には、違和感のあるインデントの部分とかのループを展開したり、
ジャンプ(switchやif-else)を無くせるとことは無くしたり、
変数をレジスタに割り当てたり(使い過ぎ注意な)、配列の次元を下げたり、
何度も参照されている配列の要素をレジスタの一時変数にに変えたりすれば、
若干速くなると思う。-O2は、ループの展開はしないらしい。
0947942
2009/06/07(日) 23:48:43void color_to_gray(UCHAR gray[][DIM2], UCHAR data[][DIM2][DIM3], int n_gyou, int n_retu)
{
int i, size;
UCHAR *s, *d;
size=n_gyou*n_retu;
s=(UCHAR*)data;
d=(UCHAR*)gray;
for(i=0;i<size;i++){
d[i]=(((int)s[0]+s[1]+s[2])*2+3)/6; // この部分は +3 が正解
s+=3;
}
}
0948864
2009/06/07(日) 23:51:15途中までやってみたのですがつまりましたorz
宜しくお願いします。
0949942
2009/06/07(日) 23:52:17>>947 とこれの併用で所要時間は 1/5 弱になった
void edge_to_color(UCHAR ans[][DIM2][DIM3], UCHAR gray[][DIM2], int keisuu, int n_gyou, int n_retu)
{
int g,r,m;
int edge[2]; /* edge[0]:横方向勾配値,edge[1]:縦方向勾配値 */
int val[3]; /* 出力画像の画素値算出に利用する配列 */
for(g=1;g<n_gyou-1;g++) /* 1画素ずつ処理する */
for(r=1;r<n_retu-1;r++) /* ただし,画像の最外周部は算出しない(画素値は0となる) */
{
edge[0]=-gray[g-1][r-1]+gray[g-1][r+1]-gray[g+1][r-1]+gray[g+1][r+1]+(-gray[g][r-1]+gray[g][r+1])*2;
edge[1]=gray[g-1][r-1]+gray[g-1][r+1]-gray[g+1][r-1]-gray[g+1][r+1]+(gray[g-1][r]-gray[g+1][r])*2;
val[0]=val[1]=val[2]=0;
if(edge[0] > 0) /* 勾配値の符合に応じて画素値に勾配値を加減算 */
val[RED] += edge[0];
else
{
val[BLUE] -= edge[0];
val[GREEN] -= edge[0];
}
if(edge[1] > 0)
val[GREEN] += edge[1];
else
{
val[RED] -= edge[1];
val[BLUE] -= edge[1];
}
#define CLIP(x) ((x)<256?(x):255)
for(m=0;m<3;m++) ans[g][r][m]=CLIP(val[m]*keisuu);
}
}
0950デフォルトの名無しさん
2009/06/07(日) 23:56:45[2] 問題文(含コード&リンク):ポインタ配列
char *month[ ] = { "None", "January", "February", "March", "April", "May", "June", "July",
"August", "September", "October", "November", "December" };
を用いて1〜12の数値を入力してJanuary〜Decemberを返す関数GetMonthを作成せよ.
[3] 環境
[3.1] OS:WindowsVistaSP2
[3.2] Visual stdio2008
[3.3] 言語: C
[4] 期限:2009年6月8日13時まで
[5] その他の制限: できるだけ基本で
0951デフォルトの名無しさん
2009/06/08(月) 00:10:41こんな感じで。動作は保障しない。
#include <stdio.h>
char* GetMonth(int M){
static char* month[] = { "None", "January", "February", "March", "April", "May", "June",
"July", "August", "September", "October", "November", "December" };
if(M<1) return month[0];
if(M>=13) return month[0];
return month[M];
}
int main(){
int i=0;
for(i=0;i<14;i++){
printf("%s\n",GetMonth(i));
}
return 0;
}
0952デフォルトの名無しさん
2009/06/08(月) 00:35:54>>941
え〜と、俺パワポ持ってないからワードの内容でやっつけて良いのか?
と言うか、俺は会社のライブラリやら3Dソフトのプラグイン扱ってるから
レンダラー作る感覚で面白いから手間かけてやっても良いが…
この内容で人のパクリだと、キミの立場がやばいんじゃねw
0953デフォルトの名無しさん
2009/06/08(月) 00:37:520954デフォルトの名無しさん
2009/06/08(月) 00:43:09それなりに大きなプログラムになるので、俺はCでは書けないなぁ。
C++使えばがんばればできるかも試練が。
Cの設計は苦手だ。
これだけではちょっとなので、以下のぺーじを見つけた。ぐぐったんですよ。
ttp://homepage2.nifty.com/skimp-studio/htm/crawl_top.htm
透視変換とか書いてあるから、俺は参考になったよ。
0955950
2009/06/08(月) 00:54:33実行すると数字打つまでもなく全部表示されちゃいます・・・
0956デフォルトの名無しさん
2009/06/08(月) 01:00:53>動作は保障しない。
ワロタw
とはいえ、修正するのは2行程度だろ
そのまま出すことはないと思うので、大丈夫です(参考にさせて欲しいので)。あと、もし可能ならで構わないのですが、可能な限り簡単なプログラムにして欲しいです。よろしくお願いします!
>>954
はい、かなり面倒なプログラムになります。サイトを探して頂きありがとうございました、後で見させてもらいます。
0958デフォルトの名無しさん
2009/06/08(月) 01:39:25横から質問だけど
文字列を static にしてるのは何か理由があるの?
どっちかというと const な気がするけど(速度面を見ても)
0959デフォルトの名無しさん
2009/06/08(月) 01:51:020960デフォルトの名無しさん
2009/06/08(月) 02:03:24http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9371.txt
>>951
int main() {
int i=0;
scanf("%d",&i);
printf("%s\n",GetMonth(i));
}
0961952
2009/06/08(月) 02:16:58すまんが、俺も夜な夜なの暇つぶしでやるんで本格的にやるつもりは無いw
課題の条件を満たせば、面倒な3Dの処理は固定値や固定処理ではしょるかも知れん
えーと、週末までだったね、多分、次スレになるな
あとCSGモデルってWEBで探して勝手に解釈するけど定義ってあるの?
俺のイメージだと、drawSphere(引数は球の各指定値...)見たいにすると
ポリゴンで出来た球がレンダリングされるって感じだけど…合ってる?
0962デフォルトの名無しさん
2009/06/08(月) 07:10:03すみません、寝てしまいました。はい、とりあえず課題の条件を満たしていれば大丈夫だと思います。
CSGモデルの定義ですか……資料をPDFに変換したので、良ければそちらを見て貰えればありがたいです(おそらくはその考え方で合ってると思います)。
ttp://u1.getuploader.com/MTG/download/5/shiryo.pdf
(100KBを越えてしまったのでまた別のアップローダーを使いました、すみません)
0964デフォルトの名無しさん
2009/06/08(月) 08:09:17>>958
その関数が何回か呼ばれることを想定してるんじゃないの?
同じ値を何度もセットするのは無意味だからね。
ただ、問題(>>950)の制約上、monthがポインタ(リテラル文字列のアドレス)の配列として宣言されてるからconstは付けるべきだと思う。
ところでconstだと速度面にどう関係するの?
>>959
いつの仕様だ?
0965デフォルトの名無しさん
2009/06/08(月) 11:39:31これは>>950と速度変わらないと思うけど。
#include <stdio.h>
const char* month[] = { "None", "January", "February", "March", "April", "May",
"June", "July", "August", "September", "October", "November", "December", "None" };
const char* GetMonthName(int M) {
return month[M<=0?0:(M>=13?13:M)];
}
int main(){
int i;
scanf("%d",&i);
printf("%s\n", GetMonthName(i));
return 0;
}
0966デフォルトの名無しさん
2009/06/08(月) 13:00:00ありがとうございました。
0967デフォルトの名無しさん
2009/06/08(月) 13:42:42この程度の処理で速度云々なんて語れない気がするが、
とりあえず "%s\n" なんて形でprintf使うならputsにしろといっておく。
-O4 つけてコンパイルすれば puts に変えてくれると思うが。
>>950 の [5] に反する気がする気がするけど scanf も消してみた。
#include <stdio.h>
inline const char* GetMonth(int n){
static const char *month[] = {"None", "January", "February", "March", "April", "May",
"June", "July", "August", "September", "October", "November", "December"};
// if(n < 1 || 12 < n) return month[0];
return month[n];
}
int main(){
int n = 0;
gets((char*)&n);
n = (n%85-2)%46;
puts(GetMonth(n));
return 0;
}
0968951
2009/06/08(月) 13:51:41あー、文章読み違えた見たいだ。すまんね。不安なら>>965の人のやつ使ってくれ。
>>static云々。
なんとなくテンポラリアドレスを返さないように気分でつけただけです。
文字列リテラルは大丈夫だった気がしたんですけど、まぁ、気分ですねぇ。
いろんな憶測が飛んで面白いです。
0969デフォルトの名無しさん
2009/06/08(月) 15:20:57[2](1)一次元配列 a[1]〜a[50]に、0〜100点までの点数を入力した後、60点
以上点数のみをa[35]=65,a[45]=67のように表示しなさい。
(2)また前問で今度は60点以上の点数をb[1]〜b[50]に格納してからb[35]=65,a=[45]=47
と表示しなさい。
[3.1] OS:XP
[3.2] コンパイラ名とバージョン: turbo c 5.01
[3.3] 言語: c++
[4] 期限:今週の日曜日まで
[5] 配列まで習った。
0970デフォルトの名無しさん
2009/06/08(月) 15:35:25ひとつめ
#include<stdio.h>
int main(void){
int a[50];
int i,j;
for(i=1;i<=50;i++){
printf("点数を入力してください\n");
scanf("%d",&a[i]);
}
for(j=1;j<=50;j++){
if(a[j]>=60){
printf("a[%d]=%d,",j,a[j]);
}
}
return 0;
}
0971デフォルトの名無しさん
2009/06/08(月) 15:45:070972デフォルトの名無しさん
2009/06/08(月) 15:45:41#include<stdio.h>
int main(void){
int a[50];
int b[50];
int i,j,k;
for(i=1;i<=50;i++){
printf("点数を入力してください\n");
scanf("%d",&a[i]);
}
for(j=1;j<=50;j++){
if(a[j]>=60){
b[j]=a[j];
}
}
for(k=1;k<=50;k++){
if(a[k]>=60){
printf("b[%d]=%d,",k,b[k]);
}
else{
printf("a[%d]=%d,",k,a[k]);
}
}
return 0;
}
0973デフォルトの名無しさん
2009/06/08(月) 15:48:310974デフォルトの名無しさん
2009/06/08(月) 15:54:48[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9372.txt
[3] 環境
[3.1] OS: Windows XP
[3.3] 言語: C言語
[4] 期限:6月9日午前10時まで
[5] printf、scanf、for文、while文、関数などは習いました
明日までと急で申し訳ないのですがよろしくお願いします
0975デフォルトの名無しさん
2009/06/08(月) 16:03:37#include <stdio.h>
int compare(int x,int y);
int main(void)
{
int x,y;
printf("x:");
scanf("%d",&x);
printf("y:");
scanf("%d",&y);
switch(compare(x,y)){
case 1:
printf("x > y");
break;
case 0:
printf("x = y");
break;
case -1:
printf("x < y");
break;
}
return 0;
}
int compare(int x,int y){
if(x>y) return 1;
else if(x==y) return 0;
else if(x<y) return -1;
}
0976デフォルトの名無しさん
2009/06/08(月) 16:18:29http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9373.txt
0977デフォルトの名無しさん
2009/06/08(月) 16:24:160978デフォルトの名無しさん
2009/06/08(月) 16:26:55[2] 問題文(含コード&リンク):scanf)関数により数字を文字列として受け取り、それを小さい桁から表示するプログラムを書け.([例]12345と入力すると54321と表示する)
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語:C言語
[4] 期限: ([6月8日17:00まで]
0979デフォルトの名無しさん
2009/06/08(月) 16:35:39[2] 問題文(含コード&リンク):ターミナルから英字だけからなる1つの文字列Sと2つの文字c0,c1を読み込む。
文字列Sがc0を含むときc0をc1に入れ替えるプログラムを作成しなさい。
なお、文字列の長さは256文字までとする
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:6月10日 0:00
[5] その他の制限:ポインタを使うこと。
aaabbbccc /*文字列*/
a A /*文字2つ*/
AAAbbbccc /*実行結果*/
0980デフォルトの名無しさん
2009/06/08(月) 16:38:43なんとかならないのかなあ
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9374.txt
0981デフォルトの名無しさん
2009/06/08(月) 16:42:15>>976の
double div(int x,int y){
return (double)x/y;
}
を
double div(int x,int y){
return (double)x/y;
}
に変更それにあわせて6行目、22行目も変更してくれorz
0982デフォルトの名無しさん
2009/06/08(月) 16:48:210983デフォルトの名無しさん
2009/06/08(月) 16:50:44階乗使わないで加算の再帰にすれば大きな数字でもいけるが、
計算時間が半端じゃなくかかるようになる。
0984デフォルトの名無しさん
2009/06/08(月) 16:51:53factorial 作れ、という時点で整数では溢れるからしょうがないのでは。
factorial 経由しなければもうちょっとは行けるだろうけど。
long int 使っても状況は変わらんだろうし。
0985デフォルトの名無しさん
2009/06/08(月) 16:52:19しかしこれでは実用性が低いから完全とは言えなさそうだと思う
20個の中から15個とか、そういう計算もできないとダメって言われそう
まあ問題文の要件は満たしてるからOKなんかな
0986そろそろ誰かスレ立てお願いします。
2009/06/08(月) 16:53:17【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・問題文やコードをリンクするときは、一言内容にについて説明をつけましょう。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはコラー!!です。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。
【質問テンプレ】
[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++の宿題片付けます 126代目
http://pc12.2ch.net/test/read.cgi/tech/1242655611/
0987デフォルトの名無しさん
2009/06/08(月) 17:05:07めんどいからやらんが。
0988デフォルトの名無しさん
2009/06/08(月) 17:08:07[2]a[1]〜a[50]順次数字1〜50までを格納したあとa[1]=1・・・a[50]=50と表示しなさい。
ただし横に10列に表示しなさい。
[3.1] OS:XP
[3.2] コンパイラ名とバージョン: turbo c 5.01
[3.3] 言語: c++
[4] 期限:今週末まで
0989デフォルトの名無しさん
2009/06/08(月) 17:10:51#include <stdio.h>
#include <string.h>
int main(void)
{
char str[256],tmp;
int i,j,len;
printf("数字入力:");
scanf("%256[^\n]%*c",str);
len=strlen(str);
for(i=0; i<len-1; i++)
for(j=i+1; j<len; j++)
if(str[i]<str[j]){
tmp=str[i];
str[i]=str[j];
str[j]=tmp;
}
printf(str);
return 0;
}
0990デフォルトの名無しさん
2009/06/08(月) 17:20:30#include<stdio.h>
int main(void){
int a[50];
int i,j;
for(i=1;i<=50;i++){
a[i]=i;
}
for(j=1;j<=50;j++){
printf("a[%d]=%d,",j,a[j]);
if(j%10==0){
printf("\n");
}
}
return 0;
}
0991デフォルトの名無しさん
2009/06/08(月) 17:29:29それだめでしょ。a[51]にしとかないと index が overrun してる。
この問題自体 index 1〜50 ってところがかなりセンス悪いとは思うが。
あと、 c++ っぽくした方が良いのかな。整形してない(列そろうように)
#include <iostream>
using namespace std;
int main(){
const int N(50);
int* a = new int [N+1]; // ← index が気分悪い
for(int j=1; j<=N ; ++j)
a[j] = j;
for(int j=1; j<=N ; ++j){
cout<<"a["<<j<<"]="<<a[j]<<" ";
if( j%10==0 )
cout<<endl;
}
}
0992デフォルトの名無しさん
2009/06/08(月) 17:32:29http://pc12.2ch.net/test/read.cgi/tech/1244449887/
0993デフォルトの名無しさん
2009/06/08(月) 17:38:15メモリの開放忘れてますよ。
最後に delete [] a;
0994デフォルトの名無しさん
2009/06/08(月) 17:40:27サンクス。忘れてた。普通 vector 使ってるからなぁ。
ただ、この場合は STL 使わん方が良いかと思って配列使ってしもうた。
0995デフォルトの名無しさん
2009/06/08(月) 18:17:410996デフォルトの名無しさん
2009/06/08(月) 18:32:45こういう風にすればオーバーフローが起こりにくいけど、factorialを使ってないからダメか。
int combination (int n, int r) {
int a = 1, k = 1;
r = min(r, n - r);
while (k <= r) {
a *= n--;
a /= k++;
}
return a;
}
32ビットintの場合、30C14はいけるけど、30C15は途中でオーバーフローして駄目。
結果はオーバーフローしないんだけどね。
0997デフォルトの名無しさん
2009/06/08(月) 18:46:240998デフォルトの名無しさん
2009/06/08(月) 18:47:540999デフォルトの名無しさん
2009/06/08(月) 18:54:151000デフォルトの名無しさん
2009/06/08(月) 18:54:4110011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。