1 :
デフォルトの名無しさん :
2011/08/01(月) 21:33:15.15 あなたが解けないC言語/C++言語の宿題を片付けもらうスレッドです。気に入らない質問やその他の発言はスルーの方向で。
【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
>>2 以降にあります。
・問題文は、出題されたまま全文を書いてください。
・問題文やコードをリンクするときは、一言内容にについて説明をつけましょう。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはコラー!!です。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。
・回答者には素直に感謝すること。 ・お礼にエッチな画像等嬉しいサプライズを用意できる場合は適時便宜をはかること。
前スレ
>>805 の宿題の内容が今自分が抱えてるのと全く一緒でワロタ
6 :
デフォルトの名無しさん :2011/08/02(火) 13:33:26.07
[1] 授業単元: C言語プログラミング [2] 問題文(含コード&リンク):となりどおしの数字の差がその下の数字となるように、 1から15までの数を1回だけ使って例に従ってマスにいれなさい。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: [2011年8月2日14:30まで] [5] その他の制限: C言語初心者です。宜しくお願いします。
7 :
デフォルトの名無しさん :2011/08/02(火) 15:06:55.73
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク):自然数n > 1 と整数g, x >= 0 を入力として, g^x をn で割った余りg^x mod n を求めて表 示するプログラムを作成せよ. [3] 環境 [3.1] OS: linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2011年8月3日 [5] その他の制限: 特にないです。
8 :
デフォルトの名無しさん :2011/08/02(火) 15:13:18.56
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク):自然数n>0を入力し、その自明でない約数(1とn以外の約数)をひとつ出力するプログラムを作成せよ。 [3] 環境 [3.1] OS: linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2011年8月3日 [5] その他の制限: 特にないです。
9 :
デフォルトの名無しさん :2011/08/02(火) 15:54:34.30
C言語プログラミング
[2] あるlistを読み込みアルファベット順に並び替 え標準出力するプログラムを作成せよ。
[3.1] Windows vista
[3.2] gcc
[3.3] 言語: C
[4] 期限: 2011年8月2日
[5] その他の制限: strcpyを使ってはいけないと いう制限があるんですが一度strcpy作ってから変 えてみたんですがいまいち分かりません、 どうすればいいでしょうか?
http://codepad. org/LbBL9T3T
>>10 できればmain関数内だけで出来ませんか?
宜しくお願いします。
13 :
デフォルトの名無しさん :2011/08/02(火) 16:10:50.34
>>12 修正して貰っているのに本当に申し訳ありません。
#define定義も習ってませんので使わないで行えますか?
本当に何度も申し訳ありません。
[1] 授業単元:プログラム概論 [2] 問題文(含コード&リンク): 多角形を中心座標に対し上下反転させる関数を作成しなさい。この関数の引数は、多角形のデータが 収められた構造体のアドレスをとる。また、上下反転された座標は元の頂点座標に格納する変数に再代入される。 [3] 環境 [3.1] OS: Windows 7 [3.2] コンパイラ名とバージョン:visual studio 2008 [3.3] 言語:C++ [4] 期限:2011年 8月2日 [5] その他の制限:なし おねがいしますm(__)m
16 :
デフォルトの名無しさん :2011/08/02(火) 16:37:24.07
>>14 大変助かりました。
差し支えなければ、このプログラムのfor文の意味とif文の意味とuse[i]が1になる時と
ならない時の処理の違いを教えていただけないでしょうか?
宜しくお願いします。
>>15 単純にやると右回りと左回りが逆になるけど
頂点の並び順に意味はあるの?
上下反転なら中心のy座標を2倍してそっから元のy座標を引くだけじゃね
19 :
>>15 :2011/08/02(火) 18:31:00.84
e
それくらいソースみて理解できないならプログラムの才能ないんじゃね
お願いします。 どのようにしてるか気になります。
いやいやいやいやいやwwww
今
>>22 開いてみたがwwww
これ嫌がらせ?w
>>25 もっと分かりやすくできる方がいれば宜しくお願いします。
>>25 これがメタプログラミングとかいうやつの成果物か‥‥‥。
12 14 3 13 7 2 11 10 6 9 1 4 8 3 5
3がふたつあるw
>>25 どっちかって言うと出題者の嫌がらせ
main() だけで書けとか無理を言うとこうなる、
>>22 は頑張ったよ
>>30 main() だけじゃなく、逆三角形表示も嫌がらせだろ
普通は
>>28 の表示でOK
33 :
デフォルトの名無しさん :2011/08/03(水) 06:57:19.37
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク):1から15の数字から5個の数字を取って同じ数字が 使われない並びの通りをすべて表示させなさい。 例:1 2 3 4 5 1 3 2 4 5 11 12 10 9 8 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2011年8月3日 10:00 [5] その他の制限: 講師の方からfor文の中で回すといわれました。 そうゆう方法があれば宜しくお願いします。
朝の7時前に講師から連絡があったのかよ そんで期限が10時とかどうかしてるな
air講師だから。
>>33 逆に for 文を使わないでどうやって処理するか聞きたいわ
ここまで無知を装うとはさすがに釣りだろうな
>>34 昨日に出された宿題です。
宜しくお願いします。
誰も突っ込まないけど「そうゆう」って所からして本当にガキなんだろ
>>33 #include <stdio.h>
int main(void)
{
int a, b, c, d, e;
for(a = 1; a <= 15; a++) {
for(b = 1; b <= 15; b++) {
if(a == b) continue;
for(c = 1; c <= 15; c++) {
if(a == c || b == c) continue;
for(d = 1; d <= 15; d++) {
if(a == d || b == d || c == d) continue;
for(e = 1; e <= 15; e++) {
if(a == e || b == e || c == e || d == e) continue;
printf("%d %d %d %d %d\n", a, b, c, d, e);
} } } } }
return 0;
}
順列の相違を除いて答えは406通りじゃね?
P(15,5)じゃないの?
同じ数を使わないならね
44 :
デフォルトの名無しさん :2011/08/03(水) 10:16:30.07
本当に何度もすみません。以前に下記の件で質問した者です。
[1] 授業単元: C言語プログラミング
[2] 問題文(含コード&リンク):となりどおしの数字の差がその下の数字となるように、
1から15までの数を1回だけ使って例に従ってマスにいれなさい。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: [2011年8月3日14:00まで]
[5] その他の制限: プログラムの作り方で最初の段は全ての組み合わせを作って
下の段には計算結果を入れていき、最後の段までダブらなければ表示というように
作ってみなさいと言われました。
イメージが湧かないので宜しくお願いします。
http://ideone.com/cJyaHの答えを作っていただいて申し訳ないのですが 、コレでは読みにくいといわれました。
ご指導お願いします。
例を見ても理解できないアホってなんなんだろうな
「となり”どおし”」 この言葉使いの時点で同一人物ではないかと疑うわ
48 :
デフォルトの名無しさん :2011/08/03(水) 10:50:23.71
同一人物です。 度重なる質問誠に申し訳ありません。 宜しくお願いします。
俺は同一人物じゃないと思うわ
もし
>>44 ==
>>33 だとしたら、
>>33 の問題に回答してもらったにもかかわらず、
礼も言わずに次の問題を丸投げしてくる無礼極まりない奴だということになるからな
レスのタイミングが思い切りズレたな……まあいいや
51 :
デフォルトの名無しさん :2011/08/03(水) 11:02:14.95
本当にすみません。 以前、回答してくださった方には大変感謝しております。 誠にありがとうございました。
本当は申し訳ないともありがたいとも思ってないくせに 常識もない技能もないじゃ人生行き詰まるぞ
質問者が
>>1 を読んでないのは判った。
>・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。
((( ))) ( ´Д`) ⊂ ._つ 人 Y し'(_)
>>53 >>1 に書いてあることを読んで実践できるようなのなら、宿題くらい自力で何とかしようとすると思うんだ
所詮匿名サイト。なりすまされたからといって、あまり不都合はないし。
自分が答えるわけでもないのに、テンプレやお礼にこだわるやつってなんなの
それが日本人 自分はしないが、いちゃもんはつけるって日本の美しい作法
お前は国に帰ってうんこでも食ってろよw
そもそも文句をつけてる奴がこのスレで回答してないなんてことの根拠はどこにもないだろ 馬鹿なの?社会不適合者なの? 社会不適合者だから「ぼくのてんさいぶりをみとめてくれないにほんじんども」を批判したくなっちゃうの?
>>64 私は君から基地外扱いされても何の損も無いが、
君が「ぼくのきにいらないことをいってくるやつ」を大した根拠も無く基地外扱いするというのは、
長い目で見れば君にとっては損かもしれない。
馬鹿なの?社会不適合者なの? 社会不適合者だから の根拠示せよ
>>63 本当にありがとうございます。
誠に図々しいのですが、absは習ってないので使わない方法があれば教えて頂けませんか?
宜しくお願いします。
本当に何度もすみません。
>>66 その文はすべて問いかけの形になっているから、特に根拠を示す必要もない。
もし君自身が馬鹿でなく社会不適合者でもないと思うのであれば、
「違う」と答えてくれて構わない。
それでも、私が前述のように推定した根拠を示すとすれば、
「文句をつけてる奴がこのスレで回答してない」といったことを根拠も示さず
あたかも一般的に認められた事実であるかのように用いた
>>59 のレスを一般化して
「それが日本人」であるということを述べたが、それが誤りであり、
そのような誤った論の展開を行うものは一般的に「馬鹿」と呼ばれており、
またその程度の知能では社会生活も困難である、すなわち社会不適合者であろう、というのが根拠であった。
基地外って指摘することになんか意味あんのかね 無駄に荒れる原因になるだけなのに
>あなたが解けないC言語/C++言語の宿題を片付けもらうスレッドです。 >気に入らない質問やその他の発言はスルーの方向で。
>>66 abs(a - b) を a-b>=0?a-b:b-a
>>67 absというのが絶対値のことだというのがわかれば、自分でabs関数にあたるものを作って……
って、main関数の中で完結させないといけないんだっけ
そうするとmain関数の中で直接絶対値を求められるように書いて……ってしちめんどくせえ
こんな糞みたいな制限の中でやらせる講師は糞だな
パズルやってんじゃないんだから使えるもんは使わせりゃいいのに
>>67 x = abs(a - b);
を
x = a - b;
if(x < 0) x = -x;
の形にすればいい。
本当に課題なら
>>1 にも有るように、後出し連続は嫌われる。
制限を書き切れないなら、例えば直前に習った課題の結果を貼って、
「今はこのレベルです」って言わないと、回答者にも判らんぜ。
それにしたってC(15,5)=3003(通り)だろう どうやったら406って数字が出てくるんだ?
俺に聞かれても....
78 :
7・8 :2011/08/03(水) 18:40:47.46
7と8の質問者です。どなたかお願いできないでしょうか。
前スレで答えてもらった人とは別なの?
336通りの間違いじゃね?
336もどうやって出したのかわからんな
86 :
7・8 :2011/08/03(水) 21:10:31.94
みなさんありがとうございます。 前スレに出てたんですね。 本当に助かりました。
87 :
デフォルトの名無しさん :2011/08/04(木) 00:52:25.75
[1] 授業単元:C言語演習
[2] 問題文(含コード&リンク):
直交座標系の座標(x,y)を極座標系の座標(r,θ)に変換する関数と、
その逆変換をする関数を作成しなさい。
ただし、直交座標系(orthogonal coordinate system)の座標と、
極座標系(polar coordinates system)の座標はそれぞれ構造体を
用いて定義すること。
{x=rcosθ,y=rsinθ
{r=√(x^2+y^2),tanθ=y/x
上の演習を前スレ
>>409 で
http://codepad.org/ncFr1HSH のように作っていただいたのですが、実行時に直交座標系を入力し、
極座標系の座標(r,θ)変換した出力と、その逆変換の出力ができる
プログラムを自力で付け加え作成することができませんでした。
大変申し訳ないのですが、どなたか実行結果が出るプログラムを作成お願いします。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語:C
[4] 期限:7月4日
[5] その他の制限:特になし
お手数ですが、よろしくお願いします。
1年近くあるんだから、今依頼しなくても良いだろうに
来年の7月4日までとは気が早いなw
92 :
デフォルトの名無しさん :2011/08/04(木) 09:37:59.07
>>91 ありがとうございます!
本当にたすかりましたっ!
93 :
デフォルトの名無しさん :2011/08/04(木) 09:53:47.55
C では ¥を記述するときいつも\\って書くの?
\を常に\\と書くとする。 このとき、\\は\\\\と書かなければならない。 \\\\は\\\\\\\\と書かなければならない。 \\\\\\\\は\\\\\\\\\\\\\\\\と書かなければならない。 これが永遠に繰り返されるため、\を含むプログラムの記述は不可能である。
永遠に繰り返してください
99 :
デフォルトの名無しさん :2011/08/04(木) 13:57:24.60
質問テンプレ [1]授業単元:プログラミング [2] 問題文:ガウスの消去法 以下に示す連立方程式をガウスの消去法を利用してプログラムせよ。 また、ピボッティングを導入して確実に解けるようにせよ。 6x_1+2x_2+x_3=26 3x_1-8x_2-x_3+3x_4=52 4x_1+2x_2-9x_3-5x_4=14 2x_1-9x_2+4x_3-x_4=78 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:わかりません [3.3] 言語:C言語 [4] 期限:2011年8月4日18:00まで よろしくお願います!!
[1] 授業単元:c言語演習 [2] 問題文 :9,2,8,1の数字四項の組み合わせをすべて表示しなさい。 同じ数字が使われてる組み合わせはNGで表示しなさい。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2011年8月4日 15:00
101 :
99 :2011/08/04(木) 14:02:20.84
>>99 の追記です
ヒント
(1)2次元配列
(2)for文
(3)printf文
と書いてありました。
よければ上のヒントを入れてプログラミングを作成してほしいです。
>>100 間違えました。NG前に付けて組み合わせを表示しなさいでした。
>>102 こんな感じに表示して欲しいんだろ
表示は4桁数字にしたとき、小さい順or大きい順にしたほうが良いんじゃないか
小さい順例
NG:
1111
1112
1118
1119
1121
1122
.....
---------
OK:
1289
1298
....
>>100 #include <stdio.h>
int main(void)
{
int i, j, k, l, a[4] = {1, 2, 8, 9};
for(i = 0; i < 4; i++) {
for(j = 0; j < 4; j++) {
for(k = 0; k < 4; k++) {
for(l = 0; l < 4; l++) {
if(i == j || i == k || i == l || j == k || j == l || k == l) printf("NG:");
printf("%d %d %d %d\n", a[i], a[j], a[k], a[l]);
} } } }
return 0;
}
>>100 問題文は丸々全文をそのまま貼らないと意図がわからなくなるぞ
そのまま貼っても分からないときもあるが
>>91 さらっと仕様と逆の回答をするところが渋いな
まぁ
>>87 みたいな馬鹿にはそれすら気が付かないだろうけど
107 :
99 :2011/08/04(木) 20:42:15.93
>>99 です。
延長しますんで、どなたかよろしくお願いいたします!
不覚にもわろたw
110 :
99 :2011/08/04(木) 21:33:47.76
>>108 出来てないじゃないっすか!
せっかくパソコン起動したのに!
誰か
>>99 のプログラミングできる男前な人
いないっすか?
[1] 授業単元: プログラミング演習(発展課題) [2] 下の配列から"CGUU"をギャップ("-")を含んでいても検出できる正規表現を作成せよ。 CCAGCUCCC-G---U--UGGG [3] 環境 [3.1] OS: Mac OS Lion [3.2] gcc [3.3] C++ [4] 期限:無期限 [5] その他の制限: C++で正規表現を使うにはBoostのXpressiveかRegexを使う必要があるのですが、 今までBoostなんて触った事ないからわかりません><
>>111 セミコロン(;)一つに収まるプログラムじゃないといけないのか?
>>111 前処理でギャップをなくすほうが間違いが少なくて楽なんだがダメ?
(i)<私…○○コロンちゃん
C*[-]G*[-]U*[-]U こんな感じかな?適当w
C-*G-*U-*U-*だろうが、Boostはspiritしかいじったことなかったからわからん。 Perl embedなんか使ってやる方法もあることはあるんだろうけど、指定ライブラリを使わんことには課題こなしたことにはならんのだろうな。
おっと。最後の-が必要無かったとか、-ってメタ文字だったけ?とか考えてなかった
習熟度や問題を見ていても
>>115 が妥当じゃないかな。
119 :
デフォルトの名無しさん :2011/08/04(木) 22:56:39.48
質問テンプレ [1]授業単元:プログラミング [2] 問題文:ガウスの消去法 以下に示す連立方程式をガウスの消去法 を利用してプログラムせよ また、ピボッティングを導入して確実に 解けるようにせよ 6x_1+2x_2+x_3=26 3x_1-8x_2-x_3+3x_4=52 4x_1+2x_2-9x_3-5x_4=14 2x_1-9x_2+4x_3-x_4=78 [3] 環境[3.1] OS:Windows[3.2] コンパイラ名とバージョン:わかりま せん [3.3] 言語:C言語 [4]期限2011年8月5日8時00分まで よろしくお願います!!
120 :
デフォルトの名無しさん :2011/08/04(木) 23:02:37.46
マルチウザい
121 :
デフォルトの名無しさん :2011/08/04(木) 23:14:04.91
122 :
デフォルトの名無しさん :2011/08/04(木) 23:16:23.15
むしろ何が分かんないの?
123 :
デフォルトの名無しさん :2011/08/04(木) 23:21:10.92
一つもわかりません。 問題の意味もわかりません。 だから誰か助けてくれないかなと思いまして
124 :
デフォルトの名無しさん :2011/08/04(木) 23:23:15.39
x_1,x_2,x_3,x_4を求めたいんだと思います
125 :
111 :2011/08/04(木) 23:30:41.97
111です。動きました!ありがとうございます! #include<iostream> #include<string> #include<boost/xpressive/xpressive.hpp> using namespace std; using namespace boost::xpressive; int main(){ string target = "CCAGCUCCC-G---U--UGGG"; smatch m; sregex pattern = sregex::compile("C[-]*G[-]*U[-]*U"); if(regex_search(target,m,pattern)){ cout << "CGUU is " << m.position() << endl; } }
数値計算ってCでやるもんじゃねーよな
>>125 [と]はいらないんじゃね
C-*G-*U-*U
まああっても無くても意味は変わらんけど
131 :
111 :2011/08/04(木) 23:55:54.19
111です。さっきのプログラムなのですが、 検索配列を直接打ち込むのではなく、 string x = "GCUU"; としたうえで正規表現を作成するにはどうすれば良いのでしょうか?つまり sregex pattern = sregex::compile("x[0]-*x[1]-*x[2]-*x[3]"); こんな感じにしたいのですが、うまくいきません。
char x = "GCUU"; char buff[256]; //十分なサイズ sprintf(buff, "%c-*%c-*%c-*%c", x[0], x[1], x[2], x[3]); sregex pattern = sregex::compile(buff); こーいう感じで。ただ、それがホントに必要なのかどうか考えたほうが良いと思う。
133 :
111 :2011/08/05(金) 00:08:14.58
>>132 うおおー、できました!ありがとうございます!
検索対象が一つでなく複数のときに、for文で回したいなーと思っていたのです。
134 :
デフォルトの名無しさん :2011/08/05(金) 00:28:32.70
>>130 美男ですね。
しかし、私のパソコンにはプログラミングのソフトが入ってないため
確認できないっす。。。
さらにネットに繋がってないため、XPERIAの画面見ながらひたすら打ってます!
スマホならideoneでも使って確認できるだろ
[1] 授業単元: linux programing [2] 問題文(含コード&リンク):xwindowを用いずに、キーボードのpush, releaseを検出する汎用関数を作成せよ。 [3] 環境 [3.1] OS: linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: c [4] 期限: 2011年8月10日 [5] その他の制限: なし
139 :
◆1XGvh/OSVY :2011/08/07(日) 11:28:34.96
[1] 授業単元:c言語 [2] 問題文(含コード&リンク):二つの数量(x,y) に関するデータを、 • xi: 区間[0:10] の間の一様乱数(i=1,...,10) • yi: 2xi+1+di(di:正規乱数N(0,0.52)) として作成し、データファイルに出力するプログラムを作成せよ。提出物はプログラムのソース。 (2) 作成したデータファイルからデータを読み込み、回帰直線の標本回帰係数、相関係数を計算し、標準出力に出力する プログラムを作成せよ。提出物はプログラムのソースと出力結果とする。 [3] 環境 [3.1] OS: (/Linux/) [3.2] コンパイラ名とバージョン: わかりません [3.3] 言語: C言語 [4] 期限: ([2011年8月11日24:00:まで] [5]
140 :
◆1XGvh/OSVY :2011/08/07(日) 11:31:04.59
#include <stdio.h> #include <stdlib.h> #include <math.h> double GetRandom(int min,int max); double NormRand(); double arand(); int main() { FILE *fp; int i; double x[10],y[10],z[10]; for (i = 0;i < 10;i++) { x[i]=0; y[i]=0; z[i]=0; } for (i = 0;i < 10;i++) { x[i]=GetRandom(0,10); z[i]=NormRand(); y[i]=2.0*x[i]+1+0.5*z[i]; printf("x%d %lf \n",i, x[i]); printf("y%d %lf \n",i, y[i]); }
141 :
◆1XGvh/OSVY :2011/08/07(日) 11:33:03.60
fp=fopen("repo2.dat","w"); for (i = 0;i < 10;i++) { fprintf(fp,"%.3lf\n",x[i]); } for (i = 0;i < 10;i++) { fprintf(fp,"%.3lf\n",y[i]); } fclose(fp); return 0; } double GetRandom(int min,int max) { return min + (double)(rand()*(max-min+1.0)/(1.0+RAND_MAX)); }
142 :
◆1XGvh/OSVY :2011/08/07(日) 11:36:29.70
void boxrnd(double m,double sig,double *x,double *y) { double r1,r2; r1=rand()/32767.1; r2=rand()/32767.1; *x=sig*sqrt(-2*log(r1))*cos(2*3.14159*r2)+m; *y=sig*sqrt(-2*log(r1))*sin(2*3.14159*r2)+m; } double NormRand() { int i; int num=12; double rt=0.0,rv; for( i = 0;i < num;i++ ){ rv=(double)GetRandom(0.0,1.0); rt = rv + rt; } return rt-6.0; } 満点をとらなければいけなくこれで大丈夫でしょうか・・
[1] 授業単元:情報処理 [2] 問題文(含コード&リンク):数値(1~100)を入力し、入力された数の 平均、標準偏差、最大値、最小値を求めるプログラムを作りなさい。 [3] 環境 [3.1] OS:MacOS X [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C [4] 期限: ([2011年8月7日まで [5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
最近QZさん元気が無いけど逃げたのw?
死ね
147 :
デフォルトの名無しさん :2011/08/08(月) 17:23:33.35
>>145 QZの神経のずぶとさは大物政治家を超えたな
ある意味尊敬する
カルシウムとれよ
149 :
デフォルトの名無しさん :2011/08/09(火) 13:42:51.65
お願いします。 [1] 授業単元: プログラミング [2] 問題文(含コード&リンク): 以下の黒い四角で構成された図を、 同じ大きさ(1片20マス)・形(裏返し可)の 4片に分割する方法を全て列挙する プログラムを作成せよ. □□□□□□□□■■■■ ■■■■■■■■■■■■ ■■■■■■■■■■■■ ■■■■■■■■■■■■ ■■■■■■■■■■■■ ■■■■■■■■■■■■ ■■■■■■■■■■■■ ■■■■□□□□□□□□ [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: わかりません [3.3] 言語: C [4] 期限: 2011年8月12日 [5] その他の制限: 特にないです。
ちょっと面白いのがきたじゃないか
これってGAで解くの?
QZなら全件列挙できるだろ
154 :
151 :2011/08/09(火) 16:09:01.27
機会があったらGAの勉強したくてな。 ちょっと考えたわけだが 正直まだわかっとらん ちなみにQZじゃねーから
☆テトロミノとかペントミノの数え上げと同じ問題だ☆ と思うとドツボに嵌るとみた
156 :
151 :2011/08/09(火) 16:16:44.44
ああ、少し勘違いしてた。 すまん
157 :
デフォルトの名無しさん :2011/08/09(火) 16:32:26.48
12*8の96マスを20*4マスで分割するの?
158 :
デフォルトの名無しさん :2011/08/09(火) 16:33:44.83
すまそ勘違いしてた。
□はブランク(はみ出し禁止)でしょ 12*8-8-8 が収めるべきマス数
>>149 一辺の形状はこんな風に飛び地になるのもあり?
□□□□□□□□■□□□
■□□□■□□□■□□□
■□□□■□□□■□□□
■□□□■□□□■□□□
■□□□■□□□■□□□
■□□□■□□□■□□□
■□□□■□□□■□□□
■□□□□□□□□□□□
× 一辺 ○ 一片
QZがあと2時間で*正しい*解答あげたら、皆QZを見直せ
>>149 のプログラム実行中だが結果が出るまで一ヶ月くらいかかりそうだw
>>160 「飛び地になる」というのが良くイメージ出来ないのですが、
多分駄目です。
同じ形状の断片が4つ出来なくてはいけないです。
何を習った後の宿題なんだ? もし何も無いところからこの宿題出されても 数日じゃ解ける奴あんまおらんのでは
[1] 授業単元:C++プログラム
[2] 問題文(含コード&リンク):通信機器の料金を計算するプログラムを作成しなさい。
12か月分の情報を管理するために構造体を配列で管理する。
12か月分の合計利用料金を計算して結果を返す関数「OneYear_C」を作成しなさい。
毎月の利用料金は関数CC_Charge(通話料を計算する関数)とCP_Charge(パケット利用料金を
計算する関数)を使い求めて、変数Totalに格納しなさい。
また、線形リストの専用アドレスを渡すと、線形リストに格納されている12か月分の合計利用金額
を計算し、結果を返す関数all_Chargeも作成しなさい。月ごとの料金はTotalに格納されていると考えなさい。
[3] 環境
[3.1] OS:Windows7
[3.2] コンパイラ名とバージョン: Visual Studio 2008
[3.3] 言語:C++
[4] 期限:8/11日まで
ここまで作成しました
http://codepad.org/mPK9vwvj どこが悪いのかアドバイスしてください
おねがいしますm(__)m
胃腸が悪いのね
168 :
デフォルトの名無しさん :2011/08/10(水) 01:13:40.15
胸糞悪い
>>166 >Line 75: error: 'OneYear_C' was not declared in this scope
そんなに難しい英語じゃないんだから読もうとしてくれ
「エラー:'OneYear_C'はこのスコープで宣言されていません」とはどういう意味でしょうか 宣言されていないとありますが、関数の呼び出しはしています どうしてか理由を教えてください
>>166 ・プロトタイプ宣言を追加。
> int CC_Charge(int );
> int OneYear_C(plog *);
> int all_Charge(plog *);
> void CP_Charge(plog *);
・修正
71c75
< printf("%d月¥n",i);
---
> printf("%d月¥n",i+1);
79c83
< OneYear = OneYear_C(&Data);
---
> OneYear = OneYear_C(&Data[0]);
81c85
< all_Charge(&Data);
---
> all_Charge(&Data[0]);
・mainのforループ中に追加。
> Data[i].next = &Data[i+1];
>>171 簡単に言うと、コンパイラが
>>166 のコードを上から見ていったときに、75行目で
OneYear = OneYear_C(&Data);
という記述を見つけるわけだが、1行目から75行目までの時点では'OneYear_C'とは何か、ということに関しては一言も触れられていない。
よってコンパイラは上の記述の意味が分からず、エラーを吐いた。
これは、OneYear_C関数を使う前に定義しておくか、
>>172 のようにプロトタイプ宣言を追加することで解決できる。
>>164 解としてこんなのならOK?
□□□□□□□□■■■■
□□□□□□□□□■■■
□□□□□□□□□■■■
□□□□□□□□□■■■
□□□□□□□□□■■■
□□□□□□□□□□■■
□□□□□□□□□□■■
□□□□□□□□□□□□
□□□□□□□□■■■■
□□□□□□□□□□□■
□□□□□□■■■■□■
□□□□□□□□□■□■
□□□□□□□□□■□■
□□□□□□□□□■■■
□□□□□□□□□■■■
□□□□□□□□□□□□
177 :
174 :2011/08/10(水) 02:45:57.81
>>149 そういえば昔 Cマガ電脳クラブに似たような問題があったような
3日かそこらじゃ解けないよ
180 :
174 :2011/08/10(水) 20:02:40.95
>>179 上下左右の隣接を条件にすればシングルスレッド90分で走査が終わる
ハッシュに登録された数は枝刈りありで445万強
メモリ節約してメインメモリ内で収まるようにしてやれば早く済むよ
[1] 3次元シミュレーション [2] 3次元空間を電荷(100個)が相互作用で動くシミュレーションプログラムを作成せよ。働く力は引力、斥力。 [3.1] Windows7 [3.2] Visual Studio2008 [3.3] C言語 [4] 2011年8月17日 [5] その他制限無 よろしくお願いします。
>>195 ずいぶん頭の悪い講師に当たったな。
同情するよ。
出題のセンスが悪すぎる。
これ、どうやって採点する気なんだろう?
いや普通に電荷っていってたぞ なんの分野の人ですかあなた
>>185 電荷とだけ言われて解けるわけ無いんだよ
問題文全部書けよ
Wikipediaより >電荷(でんか、電気量)は、素粒子が持つ性質の1つである。電荷の量を電荷量という。 >電荷量のことを単に電荷と呼ぶこともある。電荷を持つ粒子のことを単に電荷と呼ぶこともある。 ()内に100個ってあるんだから意味を取り違えることはないと思うんだが
>>188 その情報で解けるようになったと思うの?
もっと調べてまっとうな問題文にしてくれ
>>184 のバカさを指摘するだけのレスだから、問題どうこうとか興味ない
電荷って便利な言葉
[1] 授業単元: C言語プログラミング [2] 問題文(含コード&リンク): 102564 という数を4倍すると、410256 という数になる。 この数は元の数の末尾 4 が先頭に移動した形となっている。 同じく、ある数(自然数)を6倍すると、 元の数の末尾が先頭に移動した形となる。 その数(1つだけでよい)を見つけ、 出力するプログラムを作成しなさい。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン:visual studio 2008 [3.3] 言語: C [4] 期限: 2011年8月14日まで [5] その他の制限: どうすればよいのか全然分かりません。宜しくお願いします。
>>193 桁数が変わらないことから一番上の桁は1
一番下の桁は6,7,8,9のいずれか
おれにできるのはここまでだな
不細工なやり方しか思いつかんw
>>193 6で開始の場合
06 -->36...(0+6*6)
36 -->39...(3+6*6)
39-->57...(3+9*6)
57-->47...(5+7*6)
これを、1になるか、同じ数が出てくるまで続ける。
1になっていたら、各ステップの数の1の位を出力。
4倍の例だと、
04-->16-->25-->22-->10-->01
で、各数字の1の位465201を逆から出力。
あったまいいー
なぜそれでできるのか分からない・・・ まじで最近の俺の頭終わってるな・・・
全種58桁とか普通にやったら絶対無理だな
再帰使ってコード化してみた #include <stdio.h> void f(int a, int b) { int c = (a % 10) * b + a / 10; if(c != 1) f(c, b); printf("%d", c % 10); } int main(void) { f(1,6); return 0; }
>>197 , 203
有り難う御座います!
でも、なぜそれでできるのか分かりません。
4までの場合は複数パターン存在するね 例えば 205 128 * 4 = 820 512
4までに限った話じゃないだろ
元の数の最上位桁が1であり、最上位1つ前の桁をn倍しても繰り上がりが起きない前提とする 元の数をn倍すると最上位桁はnになる →元の数の最下位桁はnである →元の数をn倍すると最下位桁は「n*nの1の位の数」([※1]とする)になる →元の数の最下位1つ上の桁は[※1]である →元の数をn倍すると最下位1つ上の桁は「n*nの10の位(繰り上がってきた)と[※1]*[※1]の1の位を足した数」([※2]とする)になる →元の数の最下位2つ上の数は[※2]である →・・・ 繰り返すと、前提を満たせる1が出てくるのでそこで打ち切れば答えになる
6なら 1016949152542372881355932203389830508474576271186440677966 1186440677966101694915254237288135593220338983050847457627 1355932203389830508474576271186440677966101694915254237288 1525423728813559322033898305084745762711864406779661016949 の4つがあるし、下一桁がかける数から9まではある
203をちょっと改良 #include <stdio.h> void f(int s, int a, int b) { int c = (a % 10) * b + a / 10; if(c != s) f(s, c, b); printf("%d", a % 10); } int main(void) { int i, j; for(i = 2; i <= 9; i++) { printf("%d\n", i); for(j = i; j <= 9; j++) { f(j, j, i); printf("\n"); }} return 0; }
212 :
デフォルトの名無しさん :2011/08/12(金) 15:08:34.00
[1] シミュレーションプログラミング特論 [2] 重力多体問題のシミュレーションプログラムを作成せよ。質点の数は3<x<200で任意。 式も一般的に使われているようなものを使用する。空間はxyz軸で作成する。質点の質量はランダム生成。 [3.1] Windows7 [3.2] コンパイラバージョン:わかりません [3.3] C [4] 2011年8月20日 [5] 式はWikipediaに記載されている式で大丈夫とのことでした。 よろしくお願いします。
214 :
149 :2011/08/12(金) 17:12:18.98
>>213 一向に終わる気配が無いですが、ひとまず
ありがとうございました。
>>214 4453781 で終わることになってるよ
>>216 初期値を変えると早くなるようだ
>>213 について
for(x=0;bit_get(&family[0], x, 0)==0;x++);
searchkey_put(&dest, &family[0], 8-x, 0);
↓
for(x=11;bit_get(&family[0], x, 0)==0;x--);
searchkey_put(&dest, &family[0], 11-x, 0);
{2,2,2,2,2,2,2,2,1,0,0,0},
↓
{2,2,2,2,2,2,2,2,0,0,0,1},
これで44万台で一つ目、61万台で二つ目の解が出て
2870482 で終了
めずらしく書き込みがないなーと思えば 夏休みだからか
自演乙
>>147 実生活でもこれくらいずぶとければいいのですけれどもね。:-)
223 :
デフォルトの名無しさん :2011/08/16(火) 14:51:29.98
[1] 授業単元:アルゴリズム設計 [2] 問題文(含コード&リンク): 与えられた関数f(x,y)の最大値をSimulated Annealing法を用いて求めよ。 [3] 環境 [3.1] OS:Windows7 [3.2] コンパイラ名とバージョン:gcc 3.4 or visual studio 2008 [3.3] 言語: C [4] 期限: 2011年8月21日 [5] その他の制限: 制限なし よろしくお願いします。
すごい大雑把な問題文だけど、本当にそれだけの情報から回答を作っていいのかい?
>>218 夏休みは宿題があるはずなのに
遊び呆けてるギリギリに泣きついてくるパターンか・・・
さっさと問題ばら撒いて対応時期分散させれば
回答漏れないだろうに
大学で夏休みの宿題なんてあるか?
あたしFランだけど宿題無いよ
専門学校なんだろ
230 :
デフォルトの名無しさん :2011/08/16(火) 19:06:16.00
>>224 ,225
f(x,y)が与えられてました。
すいません
[1] 授業単元:アルゴリズム設計
[2] 問題文(含コード&リンク): 与えられた関数f(x,y)の最大値をSimulated Annealing法を用いて求めよ。
[3] 環境
[3.1] OS:Windows7
[3.2] コンパイラ名とバージョン:gcc 3.4 or visual studio 2008
[3.3] 言語: C
[4] 期限: 2011年8月21日
[5] その他の制限: 制限なし
f(x,y)=農(i,j∈1,2)▒p_ij *exp(-g_ij (x,y))
農(i,j∈1,2)▒p_ij =1
g_ij (x,y)=((x-μ_xi)/σ_xi )^2+((y-μ_yj)/σ_yj )^2+ρ_ij ((x-μ_xi)/σ_xi )((y-μ_yj)/σ_yj )
入力する値は
p_11,p_12,p_21, μ_x1, μ_x2,μ_y1, μ_y2,σ_x1,σ_x2,σ_y1,σ_y2, ρ_11, ρ_12,ρ_21, ρ_22
の15つの値
p_22はp_22=1-p_11-p_12-p_21となる。
よろしくお願いします。
ほらきた情報の後出し しかもそれがないと回答できない類のやつ なに考えてるんだよほんとに
そりゃあ自分で解く気なんてサラサラ無いんだから問題もロクに見てないわけで
▒ってなんだよ
>>230 ρをひとつでも-∞にするとf(x,y)が∞になって問題にならない気がするんだが
本当に条件はそれだけか
解く気は無いが数式が読めない 数式エディタで作って画像貼ったほうがよさげ
236 :
デフォルトの名無しさん :2011/08/16(火) 21:47:35.96
237 :
デフォルトの名無しさん :2011/08/16(火) 21:50:34.57
>>231 プログラムの概略がほしかったので数式までは載せませんでした
すいません。
>>225 さんのを参考にして作ってみます。
ありがとうございました。
238 :
デフォルトの名無しさん :2011/08/16(火) 22:41:31.20
なんでもいいからC言語でログファイル出力してるサンプルがほしいけど いまいち検索にひっかからない 検索の仕方がわるいのかな
何でもいい の条件がわからない C言語 ファイル出力で検索したらいいんじゃないの
>>238 Unix なら syslog とか syslogd で検索したら?
241 :
デフォルトの名無しさん :2011/08/17(水) 12:01:13.14
fopenしてfwriteしてfcloseすればいんじゃね? バッファは知らん
242 :
デフォルトの名無しさん :2011/08/18(木) 09:54:36.67
[1] 授業単元:DirectXプログラミング [2] 問題文(含コード&リンク): dxsdk_feb2007でインベーダーゲームを作る。 まずタイトル画面の表示スペースキーが押されたらゲーム開始。 自機が消滅→ゲームオーバー画面表示 敵が消滅→クリア画面の表示 [3] 環境 [3.1] OS: (Windows7) [3.2] コンパイラ名とバージョン: Visual Studio 2008 [3.3] 言語: C [4] 期限: ([2011年8月20日13:00まで] [5] その他の制限:DirectXを習いはじめの初心者です。コメントお願いします。
244 :
デフォルトの名無しさん :2011/08/18(木) 15:09:36.60
242はまだですか?
これはたぶん他力だと間に合わないかもわからんから自力でやることを推奨するよ
1日で催促?
242ってスペース押したらランダムで自機か敵機が消滅するんだよね
一般的なインベーダーゲームと考えるのが妥当だろ また例の100%説明されないと何もできない人か
>>251 顧客との調整みたいにレビューでフィードバックがあるわけじゃないのに
仕様が提示されてない部分もエスパーしてできるとかおまえすごいな
2chにいないで仕事しろよ
インベーダーゲーム作ってっていわれたら
>>250 のような案を出すのかw
>>252 「インベーダーゲーム」から、ランダムではなく自機と敵機で撃ち合って弾に当たったら消滅する
という程度の仕様を想像するのはエスパーでもなんでもない
むしろできない人がいたらびっくりする・・・びっくりしたよ
もちろん正確にはそれでいいかどうかの確認は必要だが
名称だけ言われたらそのゲームのオーソドックスな仕様を想定するんだろうけど
期間短いしお願いする側は横柄だし仕様は書かれてないし
>>250 は皮肉だろうしお前らマジレスだし
とりあえず問題文だけ満たせればいいと思うよ
インベーダーゲームって言ったら、 自機は左右にしか動けず弾は画面内に一発のみとか 敵数がでたまにUFOが横切って落とすとボーナスが貰えたりとか シールドがあって敵以外にも自分の攻撃でも壊れたりとか 敵の弾が一列下から出てるおかげで名古屋撃ちができたりするあのゲームだろ これほどはっきりした仕様はないな 俺は作らないけど。
金出さずに曖昧な仕様で依頼する奴は、完成品みてそれじゃヤダと簡単に言い出す。
あれはアセンブラで作られてたのか? もしかしたらBASICかもなw Cじゃ多分無理じゃね?
>>258 QZ師が書いてくれるだろ
てか多分今コーディング中だろから
暫く待ったら?
260 :
デフォルトの名無しさん :2011/08/19(金) 15:13:59.34
261 :
デフォルトの名無しさん :2011/08/19(金) 15:17:56.62
よほどの暇人じゃない限り2〜3日とか無理だろ じゃあ、これからdirectx勉強するわ
僕の課題が出せないと言うことは僕が単位を取るのに不利になるということ なんですよ、そこのとこ分かってて話してます?
C++ & OpenGLなら勉強がてらに作るかもしれん、それじゃ駄目?
ネタでいいならつくるぞw
266 :
デフォルトの名無しさん :2011/08/20(土) 16:24:02.18
期限過ぎちゃってるやん
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
http://i.imgur.com/pWn1j.jpg [3] 環境
[3.1] OS: Windows7
[3.2] コンパイラ名とバージョン: visual studio 2008
[3.3] 言語: C++
[4] 期限: 2011年8月27日
[5] その他の制限: 画像にあるとおりです。お願いします。
反転させるコマの位置をキーボード入力させる、とな
配列変数を使って、オセロの盤を表示するプログラムを作る。 2次元配列の要素をマスに見立て、先手と後手が交互にコマを置く。 ただし、コマを反転させる処理をプログラムすることはせず、キーボードから手動入力させるものとする。 ただ表示するだけのプログラムである。このプログラムを作成し、プログラムリストと実行結果の例を提出せよ。 ヒント a) マスの数は8×8とし、配列変数の値を0で初期化しておく。 例) int ban[8][8] = {0} b) 先手と後手を判定するためには、次の処理を用いる。 player = 2 - loop % 2; //loop : ターン数、 player : 先手は1、後手は2 c) 配列要素 ban[x][y]には、何もなければ0、先手は1、後手は2が入る。 d) 画面上の表示を消去する方法は下記を参照。 #include <stdio.h> #include <stdlib.h> // system("ds") 命令のために追加 ・・・ clrscr(); //画面の表示を消去(clear screen の略) c)の配列要素の値に応じて、□、○、●を表示する。 プレイヤーのコマの位置をキーボードから入力させ、配列要素に代入する。 反転させるコマの位置をキーボードから入力させ、配列要素に代入する。 異常を繰り返す。(while による無限ループ)
system("ds")ってなんだよsystem("cls")だよ間違えちゃった恥ずかしい
コマ反転の仕様をもっとくわしく
プログラムで判断させる段階じゃないから自分で指定しろってことだろ
>>271 先手と後手との切り替えはコマンド入力?
#include <stdio.h> #include <stdlib.h> int loop = 1;int ban[8][8] = {0};void (*p)(int); void input(int);void hanten(int);void hanten_end(int);void end(int); void print_ban(void){ int i,j; printf(" 12345678\n"); for(i=0; i<8; i++){ printf("%c", '1'+i); for(j=0; j<8; j++){ printf("%s", ban[i][j]==0 ? "□" : ban[i][j]==1 ? "○" : "●"); }printf("\n"); } } void end(int player) { printf("ゲーム終了\n"); } void hanten(int player){ int in[2], input_yn; printf("反転\nPLAYER %d:", player); printf("位置(1..8)を入力してください: "); scanf("%d %d", &in[0], &in[1]); if(1<= in[0] && in[0] <= 8 && 1<= in[1] && in[1] <= 8 && ban[in[0]-1][in[1]-1] != 0 && ban[in[0]-1][in[1]-1] != player){ ban[in[0]-1][in[1]-1] = player; } *p = hanten_end; fflush(stdin); }
void hanten_end(int player){ int in, i,j, flag_game_end; printf("反転\nPLAYER %d:", player); printf("反転終了?(Y/N): "); scanf("%c", &in); if(in== 'Y'){ loop++; for(i=0; i<8; i++){ for(j=0; j<8; j++){ if(ban[j][i]==0){ *p = input; return; } } } *p = end; }else{ *p = hanten; } fflush(stdin); } void input(int player){ int in[2]; printf("%d回目\nPLAYER %d:", loop, player); printf("位置(1..8)を入力してください: "); scanf("%d %d", &in[0], &in[1]); if(1<= in[0] && in[0] <= 8 && 1<= in[1] && in[1] <= 8 && ban[in[0]-1][in[1]-1] == 0){ ban[in[0]-1][in[1]-1] = player; *p = hanten; }fflush(stdin); } void update_screen(void) { system("cls"); print_ban(); } int main(void) { *p = input; while(1) { update_screen(); (*p)(2-loop%2); } return 0; }
この美しいとはいえないコードは何者?誰かの回答ってこと?
279 :
デフォルトの名無しさん :2011/08/22(月) 00:48:46.10
[1] 授業単元:アルゴリズム講義及び実習I [2] 問題文(含コード&リンク):分割統治法を用いて、n人の集団の中から、所持金が頭から数えてm番目の人を見つける 名前、所持金、順番(m)を入力し、所持金がm番目の人の名前を出力する [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: (C/C++/どちらでも可 のいずれか) [4] 期限: 2011年8月31日 [5] その他の制限:
280 :
デフォルトの名無しさん :2011/08/22(月) 00:55:55.49
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> //対象者の名前と所持金と表す構造体 typedef struct { char name[10]; //対象者の名前 int money; //所持金 } OBJECT;
281 :
デフォルトの名無しさん :2011/08/22(月) 02:04:47.74
//関数プロトタイプ宣言 /* * main 関数 * 引数: arg1 - コマンドライン引数の数 * : arg2 - コマンドライン引数配列 * 戻値: 成功した場合 0 を, 失敗した場合 0 以外を返す */ int main(int arg1, char *arg2[]){ OBJECT* array; //数値格納用の配列 int order; //探索する順番 (order番目の所持金を探索する) int num; //数値の数 int size; //配列の初期サイズ int i; //ループカウンタ num = 0; //数値の初期化 size = 512; //配列の初期化
282 :
デフォルトの名無しさん :2011/08/22(月) 02:08:27.24
//数値格納用の配列を確保 array = (OBJECT *)malloc(sizeof(OBJECT) * size); // 数値データの読み込み //array[num]にはOBJECT型の構造体が格納される scanf("%d\n", &order);
283 :
デフォルトの名無しさん :2011/08/22(月) 02:13:28.96
while (scanf("%s %d\n", array[num].name, &array[num].money) != EOF) { num++; // 配列のサイズが足りない場合, 2倍に拡大 if (num == size) { size *= 2; array = (OBJECT *)realloc(array, sizeof(OBJECT) * size); } }
284 :
デフォルトの名無しさん :2011/08/22(月) 02:22:57.42
printf("problem====================\n"); printf("%d\n", order); for(i=0; i < num; i++){ printf("%s %d\n", array[i].name, array[i].money); } /////////////////////////////////////////////////////////////////// /// /// /// 作成部分 /// /// /// /////////////////////////////////////////////////////////////////// free(array); return 0; }
285 :
デフォルトの名無しさん :2011/08/22(月) 02:37:38.74
入力データは標準データとし、 data.txtの中身は 4 11a001 10 11a001 60 11a001 50 11a001 80 11a001 100 11a001 40
286 :
デフォルトの名無しさん :2011/08/22(月) 02:41:46.71
4 11a001 10 11a002 60 11a003 50 11a004 80 11a005 100 11a006 40 間違えました。 よろしくお願いします。
該当者が複数人いるときの処理が不明だけどクイックソートかマージソートしてから 添え字mで参照すれば分割統治法使ったことになるよね そういう問題?
いや、全体をソートしきってしまう必要はない 分割統治を適用する際に、m番目が分割したどちら側にあるかは決定できるので m番目が無い側についてはソートを続ける必要がない
290 :
デフォルトの名無しさん :2011/08/23(火) 14:13:52.39
[1] 授業単元:アルゴリズム [2] 問題文(含コード&リンク):ナップサック問題 下記のプログラムを改良して、できるだけ荷物の価値の合計が大きく速いものにしてください。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン: [3.3] 言語:C [4] 期限:8月31日 [5] その他の制限:mondai(int n)を必ず使用すること
291 :
デフォルトの名無しさん :2011/08/23(火) 14:16:25.45
//ナップザック問題(総当りによる解法) #include <stdio.h> #include <time.h> #define N 20 //荷物の数 #define MAX 30 //荷物の重量の上限 struct OBJECT {//荷物1〜Nの価値と重量 int value;//荷物の価値 int weight;//荷物の重量 } a[N+1]; static int b[N+2];//荷物の選択を保持(1:選択 0:選択せず)、荷物iを選択したときはb[i]=1 static int max[N+1];//価値の合計が最大となる荷物の選択(1:選択 0:選択せず) void mondai(int n){//荷物n個の問題を作成する関数 int i; int rnd=13;//乱数の初期値 for(i=1;i<=n;i++){//荷物の価値、重量の設定(荷物N個分) rnd=(rnd*109+1021)%32768;//擬似乱数の生成 a[i].value = rnd%19+5;//価値 rnd=(rnd*109+1021)%32768;//擬似乱数の生成 a[i].weight = rnd%11+2;//重量 } }
292 :
デフォルトの名無しさん :2011/08/23(火) 14:17:34.68
int change(int i){//荷物iの選択を変更(荷物の選択を変更するときに使用する) if(b[i]==1){//荷物iが選択されていたとき b[i]=0;//荷物iを除く return change(i+1);//荷物i+1の選択を変更 } else{//荷物iが選択されていないとき b[i]=1;//荷物iを選択 return 0; } } int main(void){ int i; int k=1;//荷物1〜kまで調査済み int value;//選択された荷物の価値の合計 int weight;//選択された荷物の重量の合計 int maxvalue=0;//荷物の価値の最大値 int maxweight=0;//荷物の価値が最大のときの荷物の重量 clock_t oldTime, newTime, elapseTime;//時間計測用 //データの準備(問題の作成) mondai(N);//荷物N個の問題を作成 for(i=1;i<=N;i++){//荷物の価値、重さを表示(荷物N個分) printf("荷物%2d:価値=%3d 重さ=%2d\n",i,a[i].value,a[i].weight); } printf("\n");
293 :
デフォルトの名無しさん :2011/08/23(火) 14:18:02.54
//問題を解く oldTime=clock();//計算時間計測開始 while(1){//総当り value=0;//価値の初期化 weight=0;//重量の初期化 for(i=1;i<=N;i++){//価値と重量の合計を計算 if(b[i]==1){//荷物iが選択されていたら加算する value += a[i].value;//価値の計算 weight += a[i].weight;//重量の計算 } } //解の候補が見つかったときの処理 if((value > maxvalue) && (weight <= MAX)){//価値の合計が最大価値を超えたら maxvalue=value;//最大価値の保存(更新) maxweight=weight;//最大価値となるときの重量を保存(更新) for(i=1;i<=N;i++)//最大価値となる荷物の選択を保存(更新) max[i]=b[i]; //途中経過を表示(最大価値が更新されたら表示) printf(" 価値=%3d 重さ=%2d ",maxvalue,maxweight);//最大価値と重量を表示) for(i=1;i<N+1;i++)//荷物の選択状況を表示(1:選択 0:選択せず) printf("%1d",b[i]); printf("\n"); } change(1);//新しい荷物の選択方法に変える
294 :
デフォルトの名無しさん :2011/08/23(火) 14:18:41.12
//途中経過表示 if(b[k+1]==1){//荷物1からkまで調査が終了したことを表示 printf("荷物1〜%dまでの全ての組み合わせについて計算終了。",k); k++; newTime=clock();//現在の時間を計測 elapseTime=newTime-oldTime;//経過時間を求める //経過時間の表示 printf("経過時間=%.2f(sec)\n",(float)elapseTime/(float)CLOCKS_PER_SEC); } if(b[N+1]==1)//全ての組み合わせについて調査したら終了 break; } newTime=clock();//終了時刻を計測 //結果の表示 printf("\n(回答)\n"); printf("価値の合計が最大となるのは以下の荷物を選択した場合\n"); for(i=1;i<=N;i++)//最大価値となる荷物の選択を表示 if(max[i]==1) printf("%2d ",i); //最大価値とそのときの重量を表示 printf("\n価値=%3d 重さ=%2d\n",maxvalue,maxweight); //計算時間の表示 elapseTime=newTime-oldTime;//計算時間を求める printf("計算時間=%.2f(sec)\n",(float)elapseTime/(float)CLOCKS_PER_SEC); return 0; }
あぷろだ使った方がよかったと思う
296 :
デフォルトの名無しさん :2011/08/23(火) 16:10:01.37
すみません やり方がわからなくて
知恵袋に解答ついてたよ
298 :
デフォルトの名無しさん :2011/08/23(火) 20:00:24.91
本当ですか? URL貼ってもらっていいですか?
>279 イメージ ※arrayと同じサイズの workを準備 1) array[m-1] を array[0] と入れ替え 2) for(i=1; i<num; ++i){ array[i]がarray[0]より小さいものはwork[]の先頭の方へ、 array[i]がarray[0]以上のものはwork[]の後ろの方へ、 順番に格納していく } 3) ループ終了後、workの空き箇所が[m-1]だったらarray[0]が答え <処理終了> そうでなければ、array[0]をworkの空き箇所[last]に格納し、work全部をarrayにコピーして、1)からを繰り返す[※] ※ただし、 work[] の空き箇所[last]が[m-1]より小さかった場合は、そこから後ろ部分[last〜num-1]だけやり直せば良いし、 [m-1]より大きかった場合は、そこから前部分[0〜last]だけやり直せば良いが、 面倒くさいのでまるっとやり直すw
301 :
デフォルトの名無しさん :2011/08/25(木) 14:59:46.07
ifの判定について質問です。
このコードで、どうしてaとbが一致しないんでしょうか?
値を吐いてみると、255と-1ですが、コンピュータ的には
1111 1111 と 1111 1111 の比較にならないんでしょうか?
http://codepad.org/bfUt7vxs char main(void)
{
unsigned char a; /*符号無し*/
char b; /*符号有り*/
char c;
a = 0xFF; /*1バイト全てに1を立てる*/
b = 0xFF; /*1バイト全てに1を立てる*/
c = 0; /*ifの結果確認*/
if(a == b)
{
c = 1;
}
else
{
c = 0;
}
printf("%d \n", c);
printf("%d \n", a);
printf("%d \n", b);
return c;
}
printf("%d \n", a); /* (1) */ printf("%d \n", b); /* (2) */ printf に渡ってるのは int に拡張された値 (1) は 元値 unsigned で 255 ⇒ int に拡張で 255 を渡す (2) は 元値 signed で -1 ⇒ int に拡張で -1 を渡す
303 :
301 :2011/08/25(木) 16:18:33.39
>>302 すみません、printfの使い方も問題ありました。
要は、cが1で返ってくるか、0で返ってくるかなんですが、どうして0で返ってくるのかが疑問でした。
そこで、aとbを表示してみたら、値が違ったと言う流れです。
ifの判定で、符号有り型の0xFFと符号無し型の0xFFが異なるということは
ifって2進数で比較しているわけではないんでしょうか?
符号の有無は違いますが、バイトサイズとビットの並びも同じだと思っていました。
馬鹿にするな C文は文章なので、文脈があるんだよ 文脈が嫌いならアセンブラでも使ってくれ
305 :
301 :2011/08/25(木) 16:24:45.44
if((char)a == (char)b) c = 1; else c = 0; printf("%d \n", c); if((unsigned char)a == (unsigned char)b) c = 1; else c = 0; printf("%d \n", c); if((int)a == (int)b) c = 1; else c = 0; printf("%d \n", c); if((unsigned int)a == (unsigned int)b) c = 1; else c = 0; printf("%d \n", c); if(a == b) c = 1; else c = 0; printf("%d \n", c);
>>301 >>302 のとおりですが、対応する規格を挙げておきましょう。
キーワード: Integer Promotion あるいは昔は Integral Promotion と呼ばれていました。
ISO/IEC 9899:1999 6.3.1.1.2
printf() のような可変長引数関数やプロトタイプのない関数の引数に対する暗黙の変換については、
ISO/IEC 9899:1999 6.5.2.2.6
>>307 printf() ってfomat 文字列に従って型を決めるだろ、暗黙の変換なんて有ったっけ?
>>308 ○○だったっけ?
っていう奴は嫌いだ
それが口癖の知人らがクズだから
同類な気がしてならない
>>301 #include <stdio.h>
int main(void){
unsigned char a = 0xFF;
char b = 0xFF;
printf("%x %x %d¥n", a, b, a == b);
return a == b;
}
実行結果:
ff ffffffff 0
char,unsigned charの要素間の順序は定義されていない。 処理系の裁定でintにキャストして扱われる。
てs
てす
>279 st=0; ed=num; do{ f=st; l=ed; t=array[st]; array[st]=array[order-1]; array[order-1]=t; for(i=st+1; i<ed; ++i){ if(array[st].money>array[i].money) work[f++]=array[i]; else work[--l]=array[i]; } work[f]=array[st]; for(j=st; j<ed; ++j) array[j]=work[j]; if(order-1<=f) ed=f; else st=f; }while(f!=order-1); printf("%2d %s %d\n", order-1, array[order-1].name, array[order-1].money);
317 :
デフォルトの名無しさん :2011/08/30(火) 11:49:37.56
唐突にすいません。ちょっと困っています。 今ニュートン法やSD法などを勉強しながらjavaを使ったプログラムを勉強しているのですが、そういった解析に関するプログラムについての質問も答えられる方はおられますか? もしよければ力をかしていただきたいです。
320 :
デフォルトの名無しさん :2011/08/30(火) 12:52:20.47
>>318 ごめんなさいcかjavaでプログラムしたいんです。
抜けていました。
SD法というのも解析の方法としてあるものになります。
書き込み慣れていないため返すの遅くなりました。
申し訳ありません。
322 :
デフォルトの名無しさん :2011/08/30(火) 13:16:13.38
>>321 わかりました。
機会見て問題書かせていただきます。
323 :
デフォルトの名無しさん :2011/08/30(火) 16:10:21.14
ナップザック問題の解答を教えていただけませんか。
325 :
デフォルトの名無しさん :2011/08/30(火) 16:46:42.22
326 :
290 :2011/08/30(火) 16:54:03.93
327 :
デフォルトの名無しさん :2011/08/30(火) 17:17:18.39
gaだったら解いてもいいけど、違うよな?
329 :
デフォルトの名無しさん :2011/08/30(火) 19:01:19.93
わからんのなら、多分違うな
nurupo
>>290 #define N 200 //荷物の数
#define MAX 100 //荷物の重量の上限
のとき
価値の合計が最大となるのは以下の荷物を選択した場合
7 11 22 23 26 28 30 34 36 43 47 70 71 72 84 85 89 95 101 112 116 117 130 132 145 151 160 165 169 176 182 187 197
価値=567 重さ=100
で合ってる?
くだらねーことやってんだな
334 :
290 :2011/08/31(水) 23:45:07.93
>>332 さんプログラムのソース貼ってもらってもいいですか?
>>290 main 関数より前にこれを書く
void solve(int value, int weight, int index, int *pmaxvalue, int *pmaxweight){
int i;
if(*pmaxvalue<value){
*pmaxvalue=value;
*pmaxweight=weight;
for(i=1;i<=N;i++) max[i]=b[i];
printf(" 価値=%3d 重さ=%2d ", value, weight);//最大価値と重量を表示)
for(i=1;i<=N;i++) printf("%d", max[i]);
printf("\n");
}
for(i=index;i<=N;i++){
if(weight+a[i].weight<=MAX){
b[i]=1;
solve(value+a[i].value, weight+a[i].weight, i+1, pmaxvalue, pmaxweight);
b[i]=0;
}
}
}
あと
oldTime=clock();//計算時間計測開始
と
newTime=clock();//終了時刻を計測
の間を次の一行だけにする
solve(0, 0, 1, &maxvalue, &maxweight);
336 :
デフォルトの名無しさん :2011/09/02(金) 10:03:55.13
どう改良したか教えてくれませんか?
>>336 元のプログラムがどういう動作をしてるのか説明してみて
あまり役に立たないコメントと同じ内容はいらない
急ぎなのですが 1 考えるC 2 整数m(mが2以上)を入力し、m以下の素数を全て表示するプログラムを作れ。 3 環境はlinux gcc C言語です 4期限は今日の夕方まで 5進んだところは 配列はまだやっていません 総合問題みたいらしいです ぐぐればすぐサンプルがあるらしいのですが、それを使わずにかけといっていました (簡単にかけるらしいので) よろしくお願いします
>>338 ググってないからセーフってかw
お前いらないよ
1C言語学習 2 2つの整数を入力して、その2つの最大公約数を求めよ 3環境 は Linux gcc C言語です 4期限は 明日までです 5 配列には入っていません ならったところまでの総合問題です 初心者なので、簡略化しないで頂きたいです お願いします
ググって見つけたサンプルがアウトなのに、ここで聞いた答えがセーフだと思うのが理解できないw
積み立てていく初期段階で学習を投げるとついていけなくなるぞ、 このスレで言う事じゃないかもしれんが。
>考えるC と名付けた人は今頃泣いているぞ
>>338 i,j;main(m){scanf("%d",&m);for(i=1;i++<m;){for(j=1;++j<i&&i%j;);if(j>=i)printf("%d\n",i);}}
>>344 3bytes縮めておいた
j,m;main(i){scanf("%d",&m);for(;i++<m;){for(j=1;++j<i&&i%j;);if(j>=i)printf("%d\n",i);}}
まさかのゴルファー召喚w
>336 改良というより、作り直し パッと見だけど
>>340 x,y;main(z){scanf("%d%d",&x,&y);for(;y=x%(z=y);x=z);printf("%d\n",z);}
ゴルファー怖い
[1] 授業単元:プログラミングC [2] 問題文(含コード&リンク):整数 mとnを入力して m+(m+1)+(m+2)+…+n を出力するプログラムを作成しろ [3] 環境 [3.1] OS: (Windows/Linux/等々) Linux [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) gcc [3.3] 言語: (C/C++/どちらでも可 のいずれか) C言語 [4] 期限: 明後日まで [5] その他の制限: 配列は習っていなくて、C言語を学んで2ヶ月ほどなので砕けた形 で書いていただいてもらえると嬉しいです お願いします
#include <stdio.h> int main(voin){ int m,n,i,sum; prntf("m=");scaf("%d",&m); prntf("n-");scaf("%d",&n); sum=0; for(i=m;i<=n;i++)sum+=i; prntf("%d+(%d+1)+...+(%d)=",m,m,n,sum); retrun EOF; }
なぜそこでEOFを
#include <stdio.h>
int f(void){return -100;}
int main(void){
int m, n, temp, m0, n1;
printf("m n > ");
scanf("%d%d%*c", &m, &n);
if(m > n) temp = m, m = n, n = temp;
m0 = m*(m+1)/2 - m;
printf("1 .. %d-1 = %d\n", m, m0);
n1 = n*(n+1)/2;
printf("1 .. %d = %d\n", n, n1 );
printf("%d .. %d = %d\n", m, n, n1 - m0 );
f();
}
>>352 C
return 0; を省略できない。(Visual Studio C は例外)
C++
return 0; を省略できる。(VC++6 は例外)
354 :
デフォルトの名無しさん :2011/09/03(土) 19:58:23.17
この問題が出来ません。どうか助けてください! 以下の条件で売り上げ集計プログラムを作りなさい。 @クラスを用いる(困難なら構造体で可) A店舗毎に名前・売り上げを入力し、平均、標準偏差を計算 B売り上げ毎に店舗を並び替える C店舗数は任意。 D並び替えは簡単でよい。店舗数が少ない場合、単純に比較するだけでよい。 環境:windows C++
355 :
354 :2011/09/03(土) 20:11:23.50
354です。すみません、テンプレの存在を忘れてました。 [1] 授業単元:プログラム設計 [2] 問題文:354の通り [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン: visual c++ (当方2008を使用していますが、visualc++ならそれ以外でも結構です。) [3.3] 言語: c++ [4] 期限: 23年9月18日 [5] その他の制限: 特にありません。上記の事項だけに沿って御願いします。
356 :
デフォルトの名無しさん :2011/09/03(土) 20:14:03.33
>>354-355 今すぐ大学を辞めて、
その辺の適当な文系大学に入りなおしなさい。
お前みたいな馬鹿のせいで日本はどんどん落ちぶれる。
お前みたいなゴミがSIerに研究室あたりのコネで就職するんだけど、
プログラムのプもできないのにSEで客先にいくわけよ。
この循環を断ち切れ。
356に一票
名前は店舗名とか店長の氏名?
359 :
◆1oR6ttynTU :2011/09/03(土) 20:54:56.07
354です。
>>358 店舗名ということです。
>>356 至らない点ばかりですみません。
しかしそこをどうかご教授ください。
「売り上げ集計」Appじゃなくて「店舗別売上」Appな感じ。(´∀`)
>>359 ご教授下さいってんならまず自分で作成した分をあげろ
話はそれからだ
362 :
◆1oR6ttynTU :2011/09/03(土) 21:28:07.31
>>360 問題文には「売り上げ集計プログラム」とありますが、
良く読むと確かに「店舗別売り上げ」の様な気がします。
ニュアンスの通り「店舗別売り上げ」のつもりで御願いします。
363 :
◆1oR6ttynTU :2011/09/04(日) 00:10:08.49
#include <stdio.h> #include <math.h> #pragma warning(disable : 4996) typedef struct Shop{ char name; int sale; }Shop; int main(void) { double sum; //売上高合計 double ave; //売上高平均 double hensa1; double hensa2; double sd; //標準偏差 Shop shop1;
364 :
◆1oR6ttynTU :2011/09/04(日) 00:11:16.78
>>363 の続き
printf("店舗名を入力してください\n");
scanf("%s", &shop1.name);
printf("売上高を入力してください。\n");
scanf("%d", &shop1.sale);
Shop shop2;
printf("店舗名を入力してください\n");
scanf("%s", &shop2.name);
printf("売上高を入力してください。\n");
scanf("%d", &shop2.sale);
sum = shop1.sale + shop2.sale;
ave = sum/2;
hensa1 = ((pow(shop1.sale, (double)2)+ pow(shop2.sale, (double)2))/2);
hensa2 = pow(sum/(double)2, 2);
sd = sqrt(hensa1 - hensa2);
printf("%lf\n", sum);
printf("%lf\n", ave);
printf("%lf\n", sd);
return 0;
}
ここまで(標準偏差)まで出せました。
この結果を売り上げ順に並び替えるにはどうすればいいでしょうか
cなんだがwww
366 :
◆1oR6ttynTU :2011/09/04(日) 00:32:19.09
369 :
◆1oR6ttynTU :2011/09/04(日) 03:14:24.03
>>368 ありがとうございます!
しかし、そのプログラムでコンパイルしてみたところ、
2つ目の店舗の売上高を入力したところでなぜか強制終了
してしまいました。
そのプログラムにミスがあるとは思えないし、思いたくもないのですが、
自分のコンパイラに不都合があると言うことでしょうか?
C:\>test.exe < in.txt C:\>type in.txt 何を入力してるのか?
>369 しょういうこと
>366 コンパイラはC++を使っているのだろうが、そのソースはCだよw
>369 scanf("%s", &t->name); がダメなのではw あと、 for(i=0; i<N; i++,t++) hensa1 += (pow(ave-t->sale, 2)); をやる前にtをよろしくやっとけ
別スレにまで持ち込むなバカ
okwaveにあってワロタ
>>351 計算結果の出力は
どうすれば良いのでしょうか
出てると思うけど? 結果を定義しないとわからん
>>378 最終的には合計(Σ)を出したいのですが、
sumに値を代入していって、最後に
sumを出力、という形にできるので
しょうか?
mが2でnが4だとしたら、9がでるように
したいのですが、最小のループでsumに
2が格納されて、次に2+3がsumに格納されてしまうのではないのでしょうか?
課題変わっとるがなw
> sumに値を代入していって、最後にsumを出力 しているのが 351 だろw
まあ、先にコンパイルエラー取ってみてよ.
出力結果書けって書いてるだけなんだが #include <stdio.h> int main(void){ int m,n,i,sum = 0; printf("m="); scanf("%d",&m); printf("n="); scanf("%d",&n); for(i = m ; i < n ; i++) { sum += i; printf("%d+",i); } printf("%d=%d\n", n, sum + n); return 0; } これで不満足なら知らん
>>344 ,345
j,m;main(){scanf("%d",&m);for(;m;m--){for(j=m;--j&&m%j;);if(j==1)printf("%d¥n",m);}}
正の整数nと,整数のポインタ*cを引数として渡したとき, nを10進数としたときの,各桁の総和を*cに格納し, 桁数を戻り値として返す関数を作成せよ int dec(int n, int *c) { int k = 0; for(; n > 0; k++){ *c += n % 10; n /= 10; } return k; } 形は出来ているんだけど、*cをどうすればいいのかわからない
アドレス演算子・ポインタ演算子って何かわかってる?
*cに0を代入してからじゃないと
#include <iostream> int dec(int n, int *c) { int k; for(k = 0; n > 0; k++){ *c += n % 10; n /= 10; } return k; } main(){ int c = 0; int *d = &c; std::cout << dec(123456789, d) << " "; std::cout << c << " " << *d << std::endl; }
関数の戻り値として返すなら0のままになってるkに結果を代入、 ほんで戻り値として返すなら*cは余計な引数。
390 :
389 :2011/09/05(月) 12:17:39.88
よく見てなかったkは桁数か 無視してくんろ
n=0の場合を改善 #include <iostream> int dec(int n, int *c) { int k = 0; *c = 0; while(1){ k++; *c += n % 10; n /= 10; if(!n)break; } return k; } int main() { int c; std::cout << dec(123456789, &c) << " "; std::cout << c << " " << std::endl; std::cout << dec(0, &c) << " "; std::cout << c << " " << std::endl; }
#include <stdio.h> int main (void){ int a,b,pro,x; scanf("%d",&a); scanf("%d",&b); pro=0; for(x=a;x<=b;x++){ pro=pro*x ; } printf("%d¥n",pro); return 0 ; } これを実行すると出力結果が0になってしまうのですが、どうすればよいのでしょうか
pro の初期値が 0 で ループ中 pro は pro に対する掛け算しかしてないから ずーーと 0 だわな
むしろ0以外の何が出力されることを期待しているのかが分からん
>>394 二つの値を入れて
シグマの掛け算verをしたいのですが
足し算にするとうまくいくのに掛け算だとうまくいかないので
どうすればよいのかなと、、
0*a*(a+1)*(a+2)* ... *(b-1)*b = 0 1*a*(a+1)*(a+2)* ... *(b-1)*b = a*(a+1)*(a+2)* ... *(b-1)*b
Πi | i=a〜b か 案1) pro の初期値を 0 から 1 に変える 案2) pro の初期値を a とし、ループは a+1 から回す
>>396 >>397 ありがとうございます
pro=1;
にすると計算できるのか、、ためになりました
和の単位元は0で、積の単位元は1 というだけの話だな
もう書いてあるじゃん
そのページの最後の行に説明があるだろ もっとも、「ひとつでも割り切れるものがあらわれた時点で…」の部分だけを実現するのであれば不要ではあるが
#include <stdio.h> int main(void){ int i,j,k; printf("2 "); for(i=3; i<=10000; i+=2){ k=0; for(j=3; j<=i/2; j+=2){ if(i%j == 0){ k=1; break; } } if(k == 0) printf("%d ",i); } printf("\n"); return 0; }
>>404 10000以上の数入力したいときはどうするの?
質問者がどこまで習っているかによって回答は変わってくる
forの判定部にsqrt()入れるアホのページなんて参考にすんなよ
高速化と項立てしているのにsqrtとか馬鹿だろ
>>406 配列を習っていなくて
for分などは習いました
>>408 素数を一つだけ求めるならsqrt使った方が早いよ
ループで毎回計算するのはありえないけどw
>>409 話の流れからして入力の仕方を習ったかどうかを聞いているのだと分かれこのアンポンタン
>>411 いや、すいません
入力のしかた?とはなんでしょうか
すいません 自分が入力した数以下の素数すべてを表示する方法を教えてください
>>413 にゅう‐りょく〔ニフ‐〕【入力】
[名](スル)
2 コンピューターで、処理させる情報を入れること。インプット。「パソコンにデータを―する」⇔出力。
し‐かた【仕方】
1 物事をする方法。やり方。「掃除の―」
>>410 割り算をして商と剰余の両方を手に入れられれば、平方根をとるまでもない。
div()/ldiv() を使え。
おまえはダウソで犯罪予告してればいいんだよ
言ってることの馬鹿っぽさは本物レベルだけど、口調が偽者っぽいな
>>422 あなたの環境ではこっちの方が遅くなるの?
#include<stdio.h>
#include<math.h>
#define N 10000000
int main(void)
{
int i, j, k;
printf("2 3 ");
for(i=5;i<=N;i+=2)
{
k=sqrt(i);
for(j=3;j<=k;j+=2)
{
if(i%j==0) break;
}
if(j>k) printf("%d ", i);
}
printf("\n");
return 0;
}
ふつーに for(j = 3; j * j <= i; j += 2) if(i % j == 0) ... ってやりゃあいいのに、divとかアホとしか言いようがない
>>423 実測しました。
$ ./a.exe
2 3
423: 39
2 3
422: 54
ふーん、sqrt() の方が div() よりもはやいんですねえ。sqrt() といえども fpu の命令一発でok みたいだ。div()/ldiv() の意義はあまりないようですね。
http://codepad.org/QuhmqCWC
最近div知ってアホがはしゃいでみたってところだろうな
測ってみた。
>>422 ./a.out > d1 0.00s user 0.00s system 21% cpu 0.015 total
>>423 ./a.out > d1 4.15s user 0.03s system 87% cpu 4.751 total
>>429 失礼しました。再測定。
>>422 ./a.out > d1 7.85s user 0.02s system 96% cpu 8.144 total
>>423 ./a.out > d1 4.15s user 0.03s system 87% cpu 4.751 total
>>422 と
>>424 #include <stdio.h>
#include <math.h>
#define N 10000000
int main(void){
int i, j, k;
printf("2 ");
for(i = 3; i <= N; i += 2) {
// k = (int)sqrt((float)i);
// for (j = 3; j <= k; j += 2)
for (j = 3; j*j <= i; j += 2)
if(i%j == 0) goto L;
printf("%d ", i); L:;
}
putchar('\n');
return 0;
}
>>353 いや、なんでEOFをかえしちゃうんだよっていう
しかもEOFは0で定義されてないし
#include <stdio.h> int main(void){ int n,k,kakunou,a; scanf("%d",&n); kakunou=0; for(a=0;a>=n;a++){ (k=2;k>n;k++){ if(n%k==0){ kakunou=0; } else{ kakunou=k; } } } if(kakunou==1){ printf("Answer=%d\n",k); } return 0 ; } ある数を入力してそれ以下の素数を出力したいのですが コンパイルは通ったのに、 何も表示されないのですが どうなんでしょうか
>>436 どんなときに kakunou==1 になるの?
コンパイル通りそうもないんだがw
どのコンパイラで通ったん?
#include <stdio.h> int main(void){ int n,k,kakunou,a; scanf("%d", &n); printf("2 "); for(a=3; a<=n; a++){ kakunou = 0; for(k=3; k<a; k++){ if(a%k == 0){ printf("%d/%d ",a,k); kakunou = 1; goto L; } } printf("%d ", a); L: ; } printf("\n"); return 0 ; }
>>436 7行目の頭のforが落ちている。これを補充するとコンパイルは確かに通る。
ただし、5行目の for(a=0;a>=n;a++){
はaを0に初期化して、aがn以上の間繰り返すの意味だから、
いきなり、このforループを終了してしまう。その時のkakunouは0だから、
printf()は実行されない。
>>436 #include <stdio.h>
int main(){
int n,k;
scanf("%d", &n);
for (; n > 1; n--) {
for (k = n - 1; n % k; k--);
if (k == 1)
printf("Answer=%d¥n", n);
}
return 0;
}
>>441 5行目のaの不等号を逆にしたのに、
値がでません、
>>436 コンパイル通ってないのに、通ったって言ってるのが疑問。
「コンパイラは何?」
448 :
! :2011/09/09(金) 12:14:03.99
質問者は名前:に#パスワードを入れて下さい。回答者と見分けが付きやすい。 #include <stdio.h> int main(void){ int n,k,kakunou,a; scanf("%d",&n); for(a=0;a<=n;a++){ kakunou = 0; for(k=2;k<a;k++){ printf("%2d:%d ", a, k); if(a%k==0){ printf("%dは素数じゃない", a); kakunou=k; } else{ // kakunou=k; } } putchar('\n'); if(kakunou == 0){ printf("Answer=%d\n",k); } } return 0 ; }
なぜテンプレを無視するのか
分かりました
>>436 ,445
pcでコピペじゃなくて、画面見ながら携帯で入力、とエスパーしてみた。
printf("%2d:%d ", a, k); putchar('\n'); この二つの意味ってなんなんでしょうか? putcharというものを習ってないので、 他のものに置き換えてもらえると ありがたいです
質問する前にちょっとでも検索してみようとは思わないのか
>>436 ,442,446
↓実行結果はこれだが?
./a.out
33
Answer=31
Answer=29
Answer=23
Answer=19
Answer=17
Answer=13
Answer=11
Answer=7
Answer=5
Answer=3
Answer=2
459 :
sage :2011/09/11(日) 02:40:08.01
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
ttp://www.07ch.net/up2/src/lena6063.zip [3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: 指定なし
[3.3] 言語:C
[4] 期限:2011年9月12日02:00
[5] その他の制限:特になし
1日しか余裕がありませんが、どうかよろしくお願いします。
sageはメ欄
461 :
459 :2011/09/11(日) 06:22:52.93
ありがとう、気をつけるよ
462 :
デフォルトの名無しさん :2011/09/13(火) 13:15:34.00
[1] C言語演習
[2]
http://codepad.org/eBlxfu2Q のプログラムを以下のように
改良しなさい。
@ 数字を入力して計算できるようにする。(ただし、2次元配列は必ず使用)
A 1〜5の合計点及び平均点の最高点、最低点を表の下部分に表示させる。
(@は必須、Aはできれば)
[3.1] Windows7
[3.3] C言語
[4] 今日の19時まで
[5] 特になし
わかる方どうかよろしくお願いします。
>>462 int main(void)
{
int i, j, tensu = 0;
int max_j, max_e, max_m;
int min_j, min_e, min_m;
double ave_j, ave_e, ave_m;
double ave = 0;
int ten[5][3] = {{0}};
char *sbjs[] = {"国語", "英語", "数学"};
for (i= 0; i < NUMBER; i++) {
for (j = 0; j < 3; j++) {
printf("%d人目の%sの点数入力\n", i+1, sbjs[j]);
scanf("%d", &ten[i][j]);
}
}
max_j = max_of(ten, NUMBER, 0);
〜 略 〜
printf(" %3d %.1f\n", tensu, ave);
}
printf("max : %2d %2d %2d\n", max_j, max_e, max_m);
printf("ave : %2.0f %2.0f %2.0f\n", ave_j, ave_e, ave_m);
printf("min : %2d %2d %2d\n", min_j, min_e, min_m);
return (0);
}
main関数だけいじった
464 :
デフォルトの名無しさん :2011/09/13(火) 14:06:42.12
>>463 できればchar文(?)を使わずに書き換えられませんか?
国語の最高点=80
英語の最高点=80
数学の最高点=90
国語の最低点=10
英語の最低点=20
数学の最低点=30
国語の平均点=50.0
英語の平均点=52.0
数学の平均点=54.0
番号:国 英 数 合計 平均
[ 1]:10 20 30 60 20.0
[ 2]:40 50 60 150 50.0
[ 3]:70 80 90 240 80.0
[ 4]:80 70 60 210 70.0
[ 5]:50 40 30 120 40.0
最大: 380 90.0
平均: 250 54.0
最小: 110 30.0
>>463 の出力だけいじった
>>464 すいませんがめんどくさいので他の人がなんとかしてくれる可能性に賭けてください
468 :
465 :2011/09/13(火) 15:22:07.12
469 :
デフォルトの名無しさん :2011/09/13(火) 15:34:57.90
>>468 ありがとうございました。非常に助かりました。
>> 468,469 < ave = tensu[i]/3; --- > ave = tensu[i]/3.0; < ave = max_tensu/3; --- > ave = max_tensu/3.0; < ave = min_tensu/3; --- > ave = min_tensu/3.0;
471 :
デフォルトの名無しさん :2011/09/13(火) 20:19:26.41
[1]情報基礎概論 [2] F(x)を計算する関数double func1(double x)を作成せよ。ただしμの値はμ=0.891とし、 double mu=0.891; と変数の初期化時に与えるようにせよ。 [3] [3.1] windows7 [3.2]gcc [3.3] c言語: [4] 無期限
なんか足りなくね? それとも俺の数学かなんかの知識が不足してるだけか?
474 :
471 :2011/09/13(火) 21:10:52.55
すみません追加です F(x)=μ*x+2*(1-μ)*x^2/(1+x^2) で与えられてます
const double mu=0.891; double func1(double x) { return mu*x+2*(1-mu)*x*x/(1+x*x); }
476 :
デフォルトの名無しさん :2011/09/13(火) 21:22:55.08
[1] アルゴリズム論 [2] Unixコマンドのgrepを実装したmygrepの作成 コマンドライン引数で検索文字列とファイル名をもらい、ファイル内に検索文字列が含まれる行があればその行を出力する 正規表現に対応させる必要はない [3] [3.1]windows xp [3.2]gcc [3.3]c言語 [4] 無期限 [5] strstrは使用禁止 よろしくおねがいします
>>477 grep PATTERN [FILE...]
>477 #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { char cmd[1024]; sprintf(cmd, "find \"%s\" %s", argv[1], argv[2]); return system(cmd); }
class A {}; class B : public A {}; A *aaa = new B();←(これ) このAポインターのBnewする行為は、何という名前なのでしょうか? (これ)をする必要性がわからないので(仮想関数に使うみたいですが) (これ)についてググりたくても名前わからないもので…
アップキャスト
484 :
477 :2011/09/17(土) 19:05:05.93
ありがとう ググってくる
オーバーライドした関数を実行したときに子供のクラスの関数を自動で実行してくれるわけよ STLのリストかなんかにAを継承した色んなクラスのオブジェクトをつっこんどいて イテレータで回しながらオーバーライドした関数を実行したら順に子供のクラスで実装した関数が実行されるわけよ
ポリモーフィズムあるいはポリモルフィズム(Polymorphism) だお
>>486 >STLのリストかなんかにAを継承した色んなクラスのオブジェクトをつっこんどいて
ダウト。「クラスのオブジェクトへのポインタ」だよな
ポインタだってオブジェクトっす!
屁理屈言うな
シグマの計算をしたくて for(x=m;x<=n;x++) { a=a+x ; } というプログラミングを作ったのですが(m,nは入力する値) これでうまくできたのですが、正直自分でもよくわからないままできてしまって たとえば2と4を入力すると9がでるのですが 最初a=0でforの処理の中でaに2が格納されて 次のループでxが3になって aの値はどうなるのでしょうか? 処理がうまくいってしまって、なんでうまくいったのがわからない状態 なのですが 長文すいませんでした
デバッガ使えよ
int sum = 0; for ( int x=m; x<=n; x++ ) { sum = sum + x; // もしくは sum += x; } ちょっと書きなおして見て、ここの挙動、 > sum = sum + x; // もしくは sum += x; 特に、自分自身とxを足して自分自身に代入する += (複合代入演算子)の挙動を把握していないんだろう。
a = 0 + 2 = 2 a = 2 + 3 = 5 a = 5 + 4 = 9
((((0) + 2) + 3) + 4)
?鯖 接数:0785 ギ登数:40920 ギ数:3938 無ギ数:3714 無人数:30703 ?鯖 接数:0909 ギ登数:48239 ギ数:4249 無ギ数:3967 無人数:34195 ?鯖 接数:0835 ギ登数:63976 ギ数:5140 無ギ数:4889 無人数:51456 ?鯖 接数:0908 ギ登数:65847 ギ数:5686 無ギ数:5406 無人数:53426 ?鯖 接数:0702 ギ登数:58105 ギ数:4992 無ギ数:4795 無人数:47884 ?鯖 接数:0707 ギ登数:60087 ギ数:5446 無ギ数:5216 無人数:50097 ?鯖 接数:1042 ギ登数:61652 ギ数:5572 無ギ数:5254 無人数:48273 ?鯖 接数:0724 ギ登数:56654 ギ数:4969 無ギ数:4752 無人数:46105 ?鯖 接数:0654 ギ登数:59034 ギ数:5463 無ギ数:5260 無人数:49440 ?鯖 接数:0776 ギ登数:55048 ギ数:5028 無ギ数:4808 無人数:44546 ?鯖 接数:0275 ギ登数:03129 ギ数:0287 無ギ数:0226 無人数:01169 ?鯖 接数:1374 ギ登数:126201 ギ数:11525 無ギ数:11093 無人数:105732 ?鯖 接数:1202 ギ登数:97768 ギ数:8480 無ギ数:8098 無人数:78823 総接続人数:10893人 総ギルド登録人数:796660人 総ギルド数:70775 無人ギルド総数:67478 無人ギルド総人数:641849人 2011/09/23 13:54:57 〜 2011/09/23 14:34:21 集計時間 00:39:23 韓国公式HPのギルド加入数を各鯖毎に集計したものです。(加入してない人は含まれません)
誤爆
>>501 ありがとうございます、なんとかなりそうです
あんまり暇なんでΣのプログラムの例を作ってみた #include <stdio.h> typedef double(*fk)(double); double sigma(int k,int klimit,fk); /* 例えば 5 Σ (2k+1) k=1 */ double func(double k) { return 2*k+1; } double sigma(int k,int klimit,fk FK) { double red = 0; for(;k <= klimit;k++){ printf("%.0lf",FK(k)); if(k<klimit) putchar('+'); red += FK(k); } return red; } int main() { double result = sigma(1,5,func); printf("=%.0lf \n",result); return 0; }
>>503 気のせいかな。ム板の書き込みがかなり減ってきている。
私はどこにその統計があるのか知らないので、「気」でしかないけど。
初期値、最大値、数式をコマンドラインから入力できるようになればもっといい
このスレは夏休みが終わったで説明つくけど、 他の板は何でだろうな。
大きなプロバイダが投稿規制されたとか?
IT業界の悪い噂がおおやけになってプログラマを目指す若者がいなくなったんだよ
ところでQZちゃんを最近見ないがどうなったの?
ええーっw さすがにもう宿題するの飽きたのか?w
宿題すくねえな
コテつけてないのか
なんでもないっす
516 :
503 :2011/09/29(木) 06:58:06.64
あくまで、あんまり暇なんで作ったプログラムなんで、改良したければどうぞ ご自由に。 だって、俺、このプログラムつかわねーもん
perlで作ってevalすりゃ汎用性が高くなるな cじゃそういうことはできんのかね?
[1] 授業単元: ロボットプログラミング [2] 問題文(含コード&リンク):パソコン間で、全方位カメラの映像を取得する。 [3] 環境 [3.1] OS: Windows7 [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C言語 [4] 期限: 2011年10月4日 [5] その他の制限: サーバークライアント方式、TCP/IPを使用する。 どなたか、詳しく説明をしてくれませんか
まず、作るべきソフトウェアは二つです
520 :
518 :2011/09/29(木) 23:14:11.33
おおざっぱに言うと、 情報を送る側=サーバー (カメラがあるPCで動くソフト) 情報を受け取る側=クライアント (映像を取得する側でのソフト)
>>518 とりあえず単一マシンでカメラの映像を表示できるようになれ
523 :
518 :2011/09/30(金) 10:46:57.92
>>522 単一のカメラで映像を表示することができました。
しかし、いまだにクライアントサーバの仕組みができません。
どなたか、簡単なプログラム例を教えてくれませんか。
RFC1149で一発だな
>>523 sokcet(), bind(), listen(), accept(), connect(), send(), recv() 使う関数はこれくらいしかないよ
適当にググったら
ttp://www.geocities.jp/sugachan1973/doc/funto45.html 頭の悪そうなページだけど、真ん中くらいに最も簡単なサバ・クラのサンプルが有る
このサンプルはシングルクライアントが前提だが、複数のクライアントが接続するなら accept() の都度、
別スレッド(又はプロセス)を起こしてクライアント毎の送信を処理させるべきだろう
画像を送る場合に留意しなければならない事は、ソケットが用いるパケットサイズが4KByte(記憶が怪しい)なので
受信する際には一度のrecv() で全てのデータを受信できない可能性がある事だ(送る時は気にしなくて良いと思う)
よって、クライアントプログラムは recv() の戻り値を確認して必要なデータサイズに達するまで受信を繰り返す必要が
有るだろう
俺が始めて業務用のソケットコードを書いたときはネットで拾った情報だけで書いた
自分で調べて理解して書く事は後に残る財産になるから頑張れ
>>527 >sokcet(), bind(), listen(), accept(), connect(), send(), recv() 使う関数はこれくらいしかないよ
select() は無視ですか・・・
>>528 スレッド・プロセスが単一の受送信に用いられるなら select() は必要無い
勿論、業務レベルのコードには必須だけど NON_BLOCKING みたいな話は少しTCPを理解してからの方が良い
横からだけど、まあ揚げ足取りにしか見えない
[1] 授業単元: C言語プログラミング [2] 問題文(含コード&リンク): 平成○年の値を入力し、西暦に変換するプログラムを作成 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン:VS2008 [3.3] 言語: C [4] 期限:2011/10/5まで [5] その他の制限: C言語初心者です。宜しくお願いします
532 :
デフォルトの名無しさん :2011/10/02(日) 01:29:08.29
#include<stdio.h> int main(void){ int year,heisei; printf("平成何年ですか\n"); scanf("%d",&heisei); year=heisei+1988; printf("平成%d年は西暦%d年です",heisei,year); return 0; }
533 :
質問者333 :2011/10/04(火) 01:39:16.55
[1] 授業単元: プログラミング実習
[2] 問題文(含コード&リンク):
http://codepad.org/zZIfVRy9 問題文は上部に記載 下は自分で作ったものです。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語: C
[4] 期限: 2011年10月7日まで
[5] その他の制限:制限は特にありませんが、要望として、既に作成したプログラムをあまり変えずに間違っている部分の指摘をお願いします。
リンク先の23行目がちゃんと動いてくれないところが不明です。よろしくお願いします。
>KEISAN(rkizami,kuri,anser); anser = KEISAN(rkizami,kuri,anser); >float KEISAN(float rv,int kaisu,float ans) /* 計算する関数の定義 */ >{ > int i; > for(i=kaisu;i>0;--i){ /* 回数が0になるまでループ */ > ans+=rv; > } >} float KEISAN(float rv,int kaisu,float ans) /* 計算する関数の定義 */ { int i; for(i=kaisu;i>0;--i){ /* 回数が0になるまでループ */ ans+=rv; } return ans; }
535 :
質問者333 :2011/10/04(火) 02:34:23.15
>>534 ありがとうございます!
意図した動作を行うプログラムになりました。
536 :
デフォルトの名無しさん :2011/10/04(火) 12:32:18.67
[1] 授業単元:練習課題 [2] 問題文(含コード&リンク):下記仕様に従ってクラスを作成し、正しく動作するかプログラミングして確認せよ。 なお、プロパティは全てprivateとする。クラス名:CEnemy プロパティ:名前(半角20文字 char型) X座標(int型) 格納する値は0〜255の範囲とする。Y座標(int型) X同様。 メソッド コンストラクタ 名前をキーボードから入力する。X座標、Y座標を0で初期化。 デストラクタ「xxxは全滅しました・・・」と表示 void Action (void)乱数を用いて、適当な確率でPunch()Kick()Nop()を呼び出す。 void Punch (void)「xxx(名前)はパンチした!」と表示 void Kick (void)「xxx(名前)はキックした!」と表示 void Nop (void)「xxx(名前)はじっとしている・・・」と表示 void MoveX (void)X座標を1〜5の範囲(ランダム)で加算し、「xxx(名前)は移動しました」と表示。 表示後、DisplayPosition()を実行。 void MoveY (void)Y座標を加算。内容はMoveXと同様。 void DisplayPosition (void)「xxx(名前)はX=999 Y=999にいます」と座標値を表示 [3] 環境 [3.1] OS:Windows7 [3.2] コンパイラ名とバージョン:Microsoft Visual Studio 2008 [3.3] 言語:C++ [4] 期限: 2011年10月6日14:30まで] [5] その他の制限:コメントのほうよろしくお願いします。
538 :
デフォルトの名無しさん :2011/10/04(火) 18:38:57.33
539 :
デフォルトの名無しさん :2011/10/04(火) 22:33:07.79
[1] 授業単元:プログラミング基礎U [2] 問題文(含コード&リンク): (1) 1 以上2003 以下の整数がある。この中から連続する2 個の整数を取り出したところ、小さい方の整数 の各位の数字の和が、大きい方の整数の各位の数字の和の2 倍になっていた。 このような連続する2 個の整数のうち、小さい方の整数について次の問いに答えよ。 (a) 最大の整数は何か? (b) すべての個数を求めよ。 (2) 次の2 つの式をみたす正の整数の組(a, b, c) をすべて求めよ。ただし、3 つの数の並ぶ順番が異なる 組は区別する。 ab + c = 13 a + bc = 23 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2011年10月5日正午 [5] その他の制限: whileまたはforを使うと思われます。 よろしくお願いします。
TopCoderで出されそうな問題だな、良い学校だ。
TopCoderの問題だったりして。
2003年の問題かw
543 :
540 :2011/10/04(火) 22:51:03.30
マジかw
(2) 10*a +b +c = a +10*b +c -10 9*a = 9*b -10 9*(b-a) = 10 b-a = 10/9 ...そんな正の整数あるのん?
>>544 多分 ab とは a*b のことだろう
1 2 11 1 11 2 2 3 7
>>540 こんな簡単な問題が出たとしたら時間配分は5〜10分程度だろ
a * b + c = 13 だと思うよ
#include <stdio.h> int main(void) { int i, j, k, cnt = 0, ans; for(i = 1; i < 200; i++) { for(j = i, k = 0; j; j /= 10) k += j % 10; if(k == 7) ans = i, cnt++; } printf("最大:%d 合計:%d個\n", ans * 10 + 9, cnt); return 0; } #include <stdio.h> int main(void) { int a, b, c; for(a = 1; a < 13; a++) { for(b = 1; ; b++) { c = 13 - a * b; if(c <= 0) break; if(a + b * c == 23) printf("a = %d b = %d c = %d\n", a, b, c); }} return 0; }
解説希望 くりあがるとこだけが対象だから1〜200なのはわかるが、それ以外の意味がわからない
なるほど単純な方程式でしたさんきゅう
555 :
デフォルトの名無しさん :2011/10/05(水) 21:13:19.26
問題があったのは初期化されないままminが配列の添え字として使われてた点
559 :
デフォルトの名無しさん :2011/10/05(水) 21:33:33.03
>>558 回答は出したから
まずは落ちないようにする観点を知ってほしかっただけ
不意に気になった Segmentation Faultを”セグレった”って言ってたことがある 今は・・・あまり声に出して読まないな 皆はこれなんて言ってる?
すまん書き込んでから気がついたがスレチだ忘れてくれ
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): 「基礎問題」 再帰処理を用いて任意のスリザーリンク(ナンバーライン) 問題を解くプログラムを作成せよ。(定石は使わないこと。) 「応用問題」 問題を生成するプログラムを作成せよ。 問題文が書き切れないので省略しました。 [3] 環境 [3.1] OS:windows7 [3.2] コンパイラ名とバージョン:microsoft Visual C++ [3.3] 言語: Cでお願いします。 [4] 期限: 10月10日 08:00まで [5] プログラミングの講義では構造体やファイルの入出力まで、 ほかの講義でアルゴリズム、データ構造について習いましたが 使いこなせてないです。 宜しくお願いします。
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): 番号と点数を配列に初期化して、それらを 5段階にランク付けをして、受験番号・ランクを表示するプログラムを作成。 ランク付けをする部分を関数Rankとして、番号と評価を表示する部分を関数Outputとすること。 なお、ランクの評価は0〜19点をE、20〜39点をD、40〜59点をC、 60〜79点をB、80〜100点をAとする。 ただし、受験者の数は、50人以下とする。 番号と点数は、以下の配列を使用すること。 番号 int no[NUMBER]={1,2,3,4,5,6,7,8,9,10}; 点数 int tensu[NUMBER]={45,21,60,81,70,99,0,10,20,100}; [3] 環境 [3.1] OS:windows7 [3.2] コンパイラ名とバージョン:microsoft Visual [3.3] 言語: C [4] 期限:無期限 [5] 趣味でやっていますが、初心者なので構造体までしかやっていません
>>567 そういやそうだった
最近C言語に興味をもって兄からもらった本で勉強中
構造体が1番苦手です
569 :
デフォルトの名無しさん :2011/10/08(土) 08:24:09.19
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): int k を受け取り, 以下の級数 Sk= 1 - 1/3 + 1/5 - 1/7 + 1/9 - 1/11 + ... + (-1)k/(2k+1) の値を返す関数 double my_series ( int k ) を作成せよ. main 文では scanf で int n を受け取り, 級数 Sk の値を k = 0, 1, 2, ..., n について計算し, 結果を表示せよ. (ヒント k が大きくなると 4Sk は円周率に近づく.) [3] 環境 [3.1] OS:windows [3.2] コンパイラ名とバージョン:microsoft Visual [3.3] 言語: C [4] 期限:10月10日 [5]よろしくお願いします。
ところでその式、なんの式か分かるよね?
572 :
デフォルトの名無しさん :2011/10/08(土) 11:00:06.04
573 :
デフォルトの名無しさん :2011/10/08(土) 11:04:29.93
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): 挿入ソートを乱数配列に対して 100 回実行し, 一回のソートにおける 配列要素の値の比較回数とその平均値を表示するプログラムを作成せよ. また, 以下の機能も加えよ; 1.整数 n, max を scanf で受け取り, 乱数配列の 長さ n と乱数の範囲 ( 1 から max まで )を指定できる. 2.一回のソートにおける比較回数は見やすいように各行 10 個ずつ表示する. [3] 環境 [3.1] OS:windows [3.2] コンパイラ名とバージョン:microsoft Visual [3.3] 言語: C [4] 期限:10月10日 [5]よろしくお願いします。
574 :
デフォルトの名無しさん :2011/10/08(土) 11:06:47.81
[1] 授業単元: プログラミング基礎 [2] 問題文(含コード&リンク): ファイル名を一つ引数として指定し、その中に含まれている (いわゆる半角の)アルファベットの出現頻度を調べて表示するプログラムを作れ。但し、大文字小文字は同一視するものとする。 ./countchar aaa.txt a: 10 b: 5 c: 20 d: 7 e: 31 ... z: 2 のような感じ。 [3] 環境 [3.1] OS: Windows 7 [3.2] gcc [3.3] C [4] 2011/10/19 [5] ポインタ・ファイル入出力をかじった程度です。よろしくお願いします
575 :
デフォルトの名無しさん :2011/10/08(土) 11:07:22.60
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): 要素数 no の配列 int a[no] を受け取り, その配列の要素の平均を返す関数 double average ( int a[], int no ) を作成せよ. 同様に配列の 合計を返す関数 int sum ( int a[], int no ), 最大値を返す関数 int max ( int a[], int no ) を作成し, すべての関数を main 文で実行し結果を表示せよ. [3] 環境 [3.1] OS:windows [3.2] コンパイラ名とバージョン:microsoft Visual [3.3] 言語: C [4] 期限:10月10日 [5]よろしくお願いします。
よろしくお願いします。 「プログラミング言語C 第2版 ANSI規格準拠」を凡そ学びました。 Visual C++は、コンソールアプリケーションでプログラミングの学習をする程度しかわからないです。 Microsoft Network Monitor 3.4 をつかって、DNSの通信内容を覗きました。 [1] 授業単元: プログラミング [2] 問題文(含コード&リンク): ※1 [3] 環境 [3.1] OS: Windows XP SP3 [3.2] Visual C++ 2010 Express [3.3] 言語: どちらでも可 [4] 期限: 2011年10月14日09:00まで [5] その他の制限: Winsock利用。コンソールアプリ。アダプタの選択を可能とすること。 終了は強制終了(「×」や「Ctrl+C」)で構わない。
577 :
576 :2011/10/08(土) 11:50:43.03
※1 TCP/IP通信の内容の一部をコンソールへダンプ表示するプログラムを作成せよ。 条件を以下の通りとする。 プロトコル:IPv4/UDP/DNS (ポート番号53固定で構わない) その他:DNSリクエストのみ (送信先ポート番号=DNSである全てで構わない) 書式: ┌──────────────────────────────────────┐ |=========-=========-=========-=========-=========-=========-[改行] |[送信元IPアドレス:ポート番号] -> [送信先IPアドレス:ポート番号][改行] |[UDPペイロード全ての16進数表記(※詳細書式は「例」を参照)][改行] └──────────────────────────────────────┘ 例:(「www.google.co.jp」を利用したリクエスト) (1行16バイトで改行とする。)(行末の空白や最終行の改行など細かな違いは問わない) ┌──────────────────────────────────────┐ |=========-=========-=========-=========-=========-=========- |192.168.1.100:60000 -> 192.168.1.1:53 |DD BD 01 00 00 01 00 00 00 00 00 00 03 77 77 77 |06 67 6F 6F 67 6C 65 02 63 6F 02 6A 70 00 00 01 |00 01 | └──────────────────────────────────────┘
579 :
デフォルトの名無しさん :2011/10/08(土) 14:00:07.02
>>578 なんとなく見直したらfcloseし忘れとる・・・
ちゃんとfcloseするようにしましょう
数スレ前に起こった話題が再燃の予感
>>582 その際、ちゃんと fclose() の戻り値チェックもしましょう。
あと、fgets() で発生したエラーチェックもしましょう。
そして、printf() の戻り値チェックもしましょう。
クズは頭悪すぎてまともに話にならないからな
588 :
デフォルトの名無しさん :2011/10/09(日) 02:11:04.89
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): 3x4 の行列を二次元配列で定義し, 行列の指定した行の和を計算するプログラムを作成せよ. ただし, 一つの行の合計は, 行の先頭を指す整数型のポインタ a と列数をあらわす整数 n を受け取り, 一行の合計を返す 関数 int row_sum( int* a, int n ) を作成し計算せよ. (関数の引数と返り値の型を指定されたもので作ること) [3] 環境 [3.1] OS:windows [3.2] コンパイラ名とバージョン:microsoft Visual [3.3] 言語: C [4] 期限:10月10日 [5]ポインタの問題で頭を悩ませています。よろしくお願いします。
589 :
デフォルトの名無しさん :2011/10/09(日) 02:13:54.23
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): scanf により n を受け取り, 要素数 n の 1 〜 10 の値を持つ乱数配列を生成し表示するプログラムを作成せよ. ただし, 配列の要素を表示するときは一行につき 10 個ずつ表示するようにせよ. [3] 環境 [3.1] OS:windows [3.2] コンパイラ名とバージョン:microsoft Visual [3.3] 言語: C [4] 期限:10月10日 [5]ポインタの問題で頭を悩ませています。よろしくお願いします。
>>588 int row_sum(int*a,int n){int s=0;for(;n;n--)s+=*(a++);return s;}
>>588 i;m[3][4]={1,2,3,4,2,3,4,5,3,4,5,6};
int row_sum(int*a,int n){int s=0;while(n--)s+=*(a++);return s;}
main(){while(i++<3)printf("%d:%d\n",i,row_sum(m[i-1],4));}
>>586 信者= ◆QZaw55cn4c ですが、何か?
フォルダってどうやって追加したらいいんだ? Sequenceフォルダの中身のヘッダやらcppを使いたいんだが使えない… ただ単にVC++の中でフォルダ追加してその中にヘッダやcppを入れても使えないよね? 説明下手でごめんね。分かる人いたら回答お願いします。
[1] 授業単元:データ構造とアルゴリズム [2] 問題文(含コード&リンク):int型変数が何個程度利用可能か調べるプログラムを作成せよ。 ・確保する個数を変数とし、その値を増加(増加幅は100~1000)して -確保できたら、確保メモリ領域を解放し、変数を増加して繰り返し -確保できなかったら、処理を工夫して最終結果を表示 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 10月10日 [5]calloc関数の扱いが良く分からない・・・ よろしくお願いします。
>>593 Visual Studio スレへいってインクルードパスの追加の方法をきいてくればおk
>>595 #include <stdio.h>
#include <stdlib.h>
int allocate_int(unsigned long long sz) {
int *allocated = (int*)calloc(sz, sizeof(int));
if(allocated == NULL) return 0;
free(allocated);
return 1;
}
int main(void) {
unsigned long long sz;
for(sz = 1000; allocate_int(sz); sz += 1000);
printf("failed to allocate memory: %llu bytes (int * %llu)\n", sz * sizeof(int), sz);
return 0;
}
>>592 つまり「自分にほとほと手を焼いている」わけだな?
それならわかるよw
◆QZaw55cn4cの人気に嫉妬?
>>600 どこまでもそういう馬鹿な受け取り方しか出来ない所が自己愛性人格障害
◆QZaw55cn4cに反応する人がいる限り、人気は衰えないね
604 :
デフォルトの名無しさん :2011/10/09(日) 22:21:09.69
605 :
デフォルトの名無しさん :2011/10/09(日) 22:27:19.20
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): 適当な数値を持った要素数 3 の int 型の配列 a を定義し, 以下のようにポインタ p, q, r に a のアドレスを代入する. 1.int *p = &a[0] 2.int *q = a 3.int (*r)[3] = &a 配列 a の各要素の値とアドレスを p, q, r を使って表示せよ. ただし, ポインタ表現をつかい p[i] などという表現は使ってはいけない[3] 環境 [3.1] OS:windows [3.2] コンパイラ名とバージョン:microsoft Visual [3.3] 言語: C [4] 期限:10月10日 [5]ポインタの問題です。よろしくお願いします。
606 :
デフォルトの名無しさん :2011/10/09(日) 22:34:05.88
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): int 型の二次元配列 a[3][4] を定義し, 以下のようにポインタ p, q, r にアドレスを代入して p, q, r を使って配列 a の各要素の値とポインタ (p+i), (q+i), (r+i) のアドレスを 表示せよ. ただし, 配列 a の各要素を表示するときはポインタ表現をつかい p[i][j] などという表現は使ってはいけない. [3] 環境 [3.1] OS:windows [3.2] コンパイラ名とバージョン:microsoft Visual [3.3] 言語: C [4] 期限:10月10日 [5]ポインタの問題です。よろしくお願いします
常々おもうんだけどmicrosoft visualっていうコンパイラ名なの?
608 :
デフォルトの名無しさん :2011/10/09(日) 22:45:08.24
605,606 gccでお願いします。
コンパイラなんてどうでもいいけどさ、 OSのバージョンくらいは教えてくれてもいいんじゃない?
610 :
605 :2011/10/09(日) 23:14:28.35
色々と抜けている部分があり、申し訳ありません。 windows XPです。
スリザーリンク解く人いたら実行速度の競争しよう いなかったらプログラム書かない
613 :
デフォルトの名無しさん :2011/10/10(月) 11:31:17.22
614 :
デフォルトの名無しさん :2011/10/10(月) 11:35:36.35
[1] 授業単元:アルゴリズム [2] 問題文(含コード&リンク): かけ算九九の 20 段までをファイルに書き出すプログラムを作成せよ. (例えば書き出すファイルを output.txt とすると, プログラム実行後に output.txt をメモ帳などで開くと, かけ算九九の 20 段までがファイルに書かれている. [3] 環境 [3.1] OS:windows XP [3.2] コンパイラ名とバージョン:microsoft Visual [3.3] 言語: C [4] 期限:10月12日 [5]ファイル処理の単元です。よろしくお願いします。
615 :
デフォルトの名無しさん :2011/10/10(月) 11:36:45.68
[1] 授業単元:アルゴリズム [2] 問題文(含コード&リンク): 3 x 3 の行列の値が書かれたファイルを二つ用意する. この 2 つの行列の積を新しいファイルに書き出すプログラムを作成せよ. (例えば, 行列 A を MatrixA.txt, 行列 B を MatrixB.txt と用意すると, プログラム実行後には行列 A と行列 B の積の値が ファイル MatrixC.txt に書き込まれているようにする.) [3] 環境 [3.1] OS:windows XP [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C [4] 期限:10月12日 [5]ファイル処理の単元です。よろしくお願いします。
microsoft Visual って何?
>>615 http://ideone.com/6W4Zx cat MatrixA.txt
1 2 3
4 5 6
7 8 9
cat MatrixB.txt
11 22 33
44 55 66
77 88 99
./a.out MatrixA.txt MatrixB.txt MatrixC.txt
cat MatrixC.txt
330 396 462
726 891 1056
1122 1386 1650
2つの引数をもつインスタンスの場合、暗黙的にa,bに入れるにはどう書けばいいのですか? class cc { public: cc::cc(?int a, int b) { } }; int main () { cc c = ????; <<ココ return 0; }
ブラウザで書き込み直し 2つの引数をもつインスタンスの場合、暗黙的にa,bに入れるにはどう書けばいいのですか? class cc { public: cc::cc(int a, int b) { } }; int main () { cc c; c = ????; <<ココ return 0; }
コンストラクタで代入しとけばいいんじゃね
cc c(10, 20);
struct cc { int _a; int _b; cc() : _a(0), _b(0) {} cc(int a,int b) : _a(a), _b(b) {} cc& operator=(const cc& c){ _a = c._a; _b = c._b; return *this; } }; int main() { cc c; c = cc(100,200); return 0; }
>>614 #include<stdio.h>
i;j;main(){FILE*f;f=fopen("o.txt","w");for(;i<21;i++)for(j=0;j<21;j++)fprintf(f,"%3d%c",i?j?i*j:i:j,(j-20)?32:10);}
626 :
デフォルトの名無しさん :2011/10/11(火) 00:58:09.21
ありがとうございます。
627 :
デフォルトの名無しさん :2011/10/11(火) 00:59:57.59
[1] 授業単元:アルゴリズム [2] 問題文(含コード&リンク): scanf で n を受け取り, 要素数 n の乱数配列を作成し, 指定した 2 つの要素番号にある要素を交換するプログラムを作成せよ. [3] 環境 [3.1] OS:windows XP [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C [4] 期限:10月12日 [5]よろしくお願いします。
628 :
デフォルトの名無しさん :2011/10/11(火) 01:01:23.21
[1] 授業単元:アルゴリズム [2] 問題文(含コード&リンク): scanf で n を受け取り, Sn= 1 - 1/2 + 1/3 - 1/4 + 1/5 - 1/6 + ... + (-1)n+1/n を計算せよ. このとき n を大きくすると Sn は log 2 = 0.69314... に近づく. [3] 環境 [3.1] OS:windows XP [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C [4] 期限:10月12日 [5]よろしくお願いします。
629 :
デフォルトの名無しさん :2011/10/11(火) 01:03:10.65
[1] 授業単元:アルゴリズム [2] 問題文(含コード&リンク): scanf により n を受け取り, n×n 行列を二次元乱数配列で定 義する (二次元乱数配列の作成には下記の参考プログラムを利用せよ). その行列の対角より下の成分の和を求めよ. ただし乱数の範囲は 0 〜 3 とする. [3] 環境 [3.1] OS:windows XP [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C [4] 期限:10月12日 [5]連続での投稿しつれいしました。どうかよろしくお願いします。
>>625 コードゴルフするなら型は気にしちゃだめなんだぜ
i,p;main(j){for(p=fopen("output.txt","w");++i<21;)for(j=0;++j<21;)fprintf(p,"%3d%c",i*j,j-20?32:10);}
>>628 #include <stdio.h>
#include <math.h>
int main(void)
{
int i, n;
double s = 0.0;
printf("n = ");
scanf("%d", &n);
for (i = n - 1; i > 0; i--)
s += pow(-1.0, i + 1) / i;
printf("s = %f, log2 = %f\n", s, log(2.0));
return 0;
}
>>628 #include<stdio.h>
double s;n;i;main(){scanf("%d",&n);while(++i<=n)s+=((i%2)?1:-1)*1./i;printf("%f\n",s);}
>>629 #include<stdio.h>
#include<time.h>
**a;n;i;j;s;main(){srand(time(0));scanf("%d",&n);a=malloc(sizeof(a)*n);for(;i<n;i++){a[i]=malloc(sizeof(int)*n);for(j=0;j<n;j++)a[i][j]=rand()%4;}
for(i=0;i<n;i++)for(j=0;j<n;j++)printf("%d%c",a[i][j],(j+1-n)?32:10);for(i=0;i<n;i++)for(j=0;j<=i;j++)s+=a[i][j];printf("%d\n",s);}
>>630 なるほど参考になります
>>633 速いな
pow()とか出来るだけ使わない方がいいのか
nが1ずれてるぞ
-と+入れ替えるためだけにpow使うとか、アホすぎるだろw
「対角より下」って、普通対角成分含まないと思うんだけど
【質問テンプレ】
[1] 授業単元:アルゴリズム
[2] 問題文(含コード&リンク):
http://ideone.com/V0u4z [3] 環境
[3.1] Ubuntu
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: c
[4] 期限: 10/12(水) 8:00
[5] その他の制限: 長いですがよろしくお願いします
> 問1: 整数の配列a[]、前半部分の個数c、全体のサイズn を引数にとり、これをマージする 初っ端から問題の意味が分からんのはオレだけか……?
void merg(int *a, int c, int n) { int *work = malloc(n * sizeof(int)); int i, j, k; for(i = 0; i < n; i++) work[i] = a[i]; for(i = 0, j = c, k = 0; ; ) { if(work[i] > work[j]) { p[k++] = work[i++]; if(i == c) { while(k < n) p[k++] = work[j++]; break; } } else { p[k++] = work[j++]; if(j == n) { while(k < n) p[k++] = work[i++]; break; } } free(work); }
適当に直書きしたらいろいろひどいなw void merge(int a[], int c, int n) { int *work = malloc(n * sizeof(int)); int i, j, k; for(i = 0; i < n; i++) work[i] = a[i]; for(i = 0, j = c, k = 0; ; ) { if(work[i] > work[j]) { a[k++] = work[i++]; if(i == c) { while(k < n) a[k++] = work[j++]; break; } } else { a[k++] = work[j++]; if(j == n) { while(k < n) a[k++] = work[i++]; break; } } } free(work); }
変数増やしたり、ループの外に出して条件判断の回数増やしたり、 余計なことしないで素直にそのまま利用すればいいのに
645 :
デフォルトの名無しさん :2011/10/12(水) 17:40:43.28
[1] 授業単元: C言語 [2] 問題文(含コード&リンク): ■プログラム1: りんごが30個中、腐ったりんごが10個あったとき、 腐ってないりんごを3人で分けると、 一人当たりのりんごの個数は何個になるか、計算し、 "一人あたりのりんごの個数"と"残ったりんごの個数"を 出力するプログラム。 (C言語の足し算、引き算、かけ算、割り算はそれぞれ、 +, -, *, / を使うが、 割った余り(剰余) は % で計算できる。 (例: n を m で割った余りは n % m )) ■プログラム2: 上記プログラム1 のリンゴの個数などの数を scanfを使ってキーボードから 入力することで、任意の個数に対して計算できるように改良したプログラム。 ただし両プログラムの変数名は、最初のりんごの個数をapple、 腐っていたりんごの個数を bad_apple、人数をpersons、 一人当たりのりんごの個数を apple_for_one、余りをrest とすること。 [3] 環境 [3.1] OS:windows [3.2] VC 6.0 [3.3] 言語:C++ [4] 期限:10/13 [5] その他の制限:Visual C++で 問題文リンクが載せられなくてすいません。
//
>>645 #include <cstdio>
// ON:プログラム1 OFF:プログラム2
#define PROGRAM_ONE
int main()
{
int apple, bad_apple, persons;
#ifdef PROGRAM_ONE
// プログラム1
apple = 30;
bad_apple = 10;
persons = 3;
#else
// プログラム2
printf("りんごの個数 >"); scanf("%d", &apple);
printf("腐っていたりんごの個数 >"); scanf("%d", &bad_apple);
printf("人数 >"); scanf("%d", &persons);
#endif
int apple_for_one = (apple - bad_apple) / persons;
int rest = (apple - bad_apple) % persons;
printf("リンゴの個数:%d(うち、腐ったりんごの個数:%d)\n", apple, bad_apple);
printf("人数:%d\n", persons);
printf("一人あたりのりんごの個数は:%d\n", apple_for_one);
printf("残ったりんごの個数:%d\n", rest);
return 0;
}
647 :
デフォルトの名無しさん :2011/10/12(水) 22:51:39.32
すまん。プログラム超初心者でう。 for 文について教えてくれないか・・・・ for 文の中に また for 文を作って 終わり記号(CでもVBでもなんでもいい) を打ったんだけどさ。 中のfor文が1回 終わったあとに、外の forを1回まわすのは、 どうしたらいい・・・ 外の for が一階終わった後に 中の for が 回数上限まで回って、 外のforに制御がわたるんだよ。 for i 1++ <10 i = hoge + 1 for J 1++ <10 J = hote + 1 next next みたいになっちゃってんだよ。これをどうしたらいい?
[1] 授業単元:計算機アルゴリズムT [2] 問題文(含コード&リンク): 設問1-1 下記にあるプログラム例5.2.1を変数xの初期値0と終了値100をキーボードから入力するように機能変更しなさい。 プログラム例5.2.1 #include <stdio.h> int main(void) { int x, y; x = 0; while (x <= 100) { y=3*x*x+2*x+7; printf("x=%d,y=%d\n",x,y); x = x + 1; } return 0; } 設問1-2 上記設問1-1をdo-while文を使って書きなさい。 設問1-3 上記設問1-1の表示がxの値の降順になるように書き換えなさい。 [3] 環境 [3.1] OS:Windows vista [3.2] コンパイラ名とバージョン:visual studio 2008 [3.3] 言語:C [4] 期限:[2011年10月14日8:00まで] [5] その他の制限:変数、算術演算、printf、scanf、繰り返し処理while文、do-while文は習いました。 宜しくお願いします。
[1] 授業単元:C言語システムプログラミング [2] 問題文(含コード&リンク): 複数の整数を入力した後,その一覧に最大(Max)と最小(Min)の印を付けて表示するプログラムを作成せよ. 但し,初めに入力する個数を入力する.(入力数は最大10とする) 実行例↓ Number? 4 Score1? 40 Score2? 90 Score3? 80 Score4? 30 ***Result*** 1 40 2 90 Max 3 80 4 30 Min [3] 環境 [3.1] OS:windows 7 [3.2] コンパイラ名とバージョン: gcc [3.3] 言語:C言語 [4] 期限:[2011年10月17日23:59まで] [5] その他の制限:授業では入出力、制御構造、配列までやりました。 よろしくお願いします。
>>651 #include <stdio.h>
int main(void)
{
int number=0, score[10], max, min, i;
printf("Number? ");
scanf("%d", &number);
if(number>10) number=10;
for(i=0;i<number;i++)
{
printf("Score%d? ", i+1);
scanf("%d", &score[i]);
if(i==0) max=min=score[i];
if(score[i]<min) min=score[i];
if(score[i]>max) max=score[i];
}
printf("***Result***\n");
for(i=0;i<number;i++)
{
printf("%d %d", i+1, score[i]);
if(score[i]==max) printf(" Max");
if(score[i]==min) printf(" Min");
printf("\n");
}
return 0;
}
りっちーが逝ったか
C言語は前世紀/多分今世紀も最高傑作の言語だな
656 :
デフォルトの名無しさん :2011/10/13(木) 21:52:03.83
[1] 授業単元:プログラミング技術 [2] 問題文(含コード&リンク):1^2+2^2+3^2+……+n^2が2000を超えるときのnの値と、そのときの合計を求めるプログラムを作りなさい。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン:bcc [3.3] 言語: C [4] 期限: 2011年10月15日まで [5] その他の制限: while文を使ったプログラムでお願いします。
#include <stdio.h> int main(void) { int n = 1; int S = 1; while (S <= 2000) { ++n; S += n * n; } printf("n = %d, S = %d\n", n, S); }
658 :
デフォルトの名無しさん :2011/10/13(木) 22:23:41.33
[1] 授業単元:アルゴリズム
[2] 問題文(含コード&リンク):
以下を参考に再帰的二分探索を作成せよ。
http://codepad.org/BHEasb4b お手数ですが、詳細はURLでお願いします。
[3] 環境
[3.1] OS:windows
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:c言語
[4] 期限:2011/10/15 23:00
[5] その他の制限:配列は整数で昇順にソートされている前提でした。授業では配列、ポインタは習っています。よろしくお願いします。
>>660 ありがとうございます!
しかし課題の説明では入力は
int x,int v[],int n
の3つと言われたのですが
入力を3つでプログラミングすることは出来ないですか??
注文が多くて申し訳ないです。。
int binsearch(int x, int v[], int n) { int m = n / 2, r; if(n < 1) return -1; if(v[m] > x) return binsearch(x, v, m); if(v[m] == x) return m; r = binsearch(x, v + m + 1, n - m - 1); if(r >= 0) r += m + 1; return r; }
[1] 元:P入門 [2] 文 @ 数字が書かれているtxtFからそれを読み込んで 別のtxtFに出力するCPを作成せよ。 入出力Fはコマンドラインから任意で指定すること。 A 数字のみを標準出力するCPを入力Fとして、txtFに その結果を出力するCPを作れ。 入力、出力Fはコマンドラインから任意に指定すること。 [3] 環境 [3.1] OS 7 [3.2] コ名とバ:gcc [3.3] 言:C [4] 今日 23時まで [5] 制: Aは実行端末においてコマンド | echo cat > <使用禁止。 今日は文長すぎに引っかかるのですいません・・省略してます。
[1] 授業単元:C言語プログラミング [2] 問題文(含コード&リンク): 月の英語名を初期値とした文字列配列(大きさは12x10)を使って キーボードから月の英語名を入力しそれが何月かを表示するプログラムを作成せよ. 実行例↓ $./kadai Month? October October is 10 gatsu $./kadai Month? May May is 5 gatsu [3] 環境 [3.1] OS:windows 7 [3.2] コンパイラ名とバージョン: gcc [3.3] 言語:C言語 [4] 期限:[2011年10月16日まで] [5] その他の制限:特になし、よろしくお願いします
#include <stdio.h> const char* MONTH[] = { "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December", }; int get_gatsu(char* str) { int i; for(i=0; i<12; i++){ if(strcmp(MONTH[i], str) == 0){ return i+1; } } puts("fuck!!!"); exit(1); } int main(int argc, char* argv[]) { char str[100]; printf("Month? "); scanf("%s", str); printf("%s is %d gatsu\n", str, get_gatsu(str)); return 0; }
>>665 『CP』ってCのプログラムって意味か?
関数名だとおかしいよな。
>>667 すいません、補足事項の部分の掲載わすれてました
[1] 授業単元:C言語プログラミング
[2] 問題文(含コード&リンク): 月の英語名を初期値とした文字列配列(大きさは12x10)を使って
キーボードから月の英語名を入力しそれが何月かを表示するプログラムを作成せよ.
実行例↓
$./kadai
Month? October
October is 10 gatsu
$./kadai
Month? May
May is 5 gatsu
[3] 環境
[3.1] OS:windows 7
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語:C言語
[4] 期限:[2011年10月16日まで]
[5] その他の制限
補足事項:
char month[12][10] = {" "," "," ",…}, imonth[10]; // 文字列配列の宣言
scanf("%s", imonth);
for(i = 0; i < 12; i++) {
/* month[i]で文字列配列を指定する */
if(strcmp(month[i],imonth)==0); // この時のi+1が月になる
}
これを参照のこと
解いていただいたのに、申し訳ないです。
条件後だしは死刑ということになっておる
671 :
669 :2011/10/15(土) 02:11:30.11
>>670 テンプレに書いてありましたね汗 すいませんでした。
>>665 Aに関して
1)数字のみを標準出力するプログラム(乱数を規定回数出力するのか?)
2)コマンド引数のファイルに標準に1)の出力を書き込むプログラム
の二つのプログラムを作れって問題か?
しかもリダイレクション禁止って事は2)から1)を起動してその標準出力を読み込むんだから
popen() あたりを使う事になるぞ
そんなレベルの問題なのか?
P入門とかCPとかtxtFとかイミフな略語にする奴には イミフな略語で応えればいい
OS 7ってwindows 7のことだよね? catコマンドなんてあったっけ?
MAC OS 7 じゃないのか?
いつの話だよ
677 :
48 :2011/10/16(日) 20:36:27.32
FM-7だろ。
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク):任意のデータ(1、100、10)など)を入力するとそれぞれを3つの行列テーブルに分けた後、3次元の離散コサイン変換を行うプログラム。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2011年10月31日 [5] その他の制限: 特にないです。
[1] 授業単元:C言語プログラミング [2] 問題文(含コード&リンク): N×Nの行列を入力させ、その転置行列を出力するプログラムを作成せよ. ただしNはプログラム内で記号定数として定義し,ここでは3とすること.転置行列とは、行と列を入れ替えた行列である. 実行した時↓ $ ./kadai 3 x 3 matrix: Row 1? 1 4 5 Row 2? 10 8 9 Row 3? 7 2 11 Transposed matrix: 1 10 7 4 8 2 5 9 11 [3] 環境 [3.1] OS:windows 7 [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C言語 [4] 期限: ([2011年10月17日まで] [5] その他の制限: ヒント:scanf("%d %d %d", row[i][0], row[i][1], row[i][2]); よろしくお願いします
[1] 授業単元:アルゴリズム
[2] 問題文(含コード&リンク):
void concat(struct node *p, struct node *q)
ノード*p以降のリストの後に,ノード*q以降のリストを連結
する関数
[3] 環境
[3.1] OS:windows
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:c言語
[4] 期限:2011/10/17 18:00
[5] その他の制限:授業で習ったことはURLに乗せてあります。配列、ポインタは学習しています。よろしくお願いします。
http://codepad.org/lB3YPaFE
[1] 授業単元:計算機アルゴリズムT [2] 問題文(含コード&リンク): 設問1-1 プログラム例5.3.1で「for(i=0;i<10;i=i+1)」を「for(i=9; i>=0; i=i-1)」に置き換えたとき、元の表示結果と同じになるように「printf("%d番目の繰返し\n",i+1);」を書き換えなさい。 プログラム例5.3.1 #include <stdio.h> int main(void) { int i; for(i=0; i<10; i=i+1) { printf("繰返し\n"); } return 0; } 設問1-2 nを与えてn!を計算するプログラムを作成し、そのプログラムに変数nの値をキーボードから入力するように機能を追加しなさい。 設問1-3 上記設問1-1をwhile文を使って書きなさい。 [3] 環境 [3.1] OS:Windows vista [3.2] コンパイラ名とバージョン:visual studio 2008 [3.3] 言語:C [4] 期限:[2011年10月22日8:00まで] [5] その他の制限:変数、算術演算、printf、scanf、繰り返し処理while文、do-while文 繰り返し処理for文、繰り返し処理for文による総和の計算は習いました。 宜しくお願いします。
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): 1039,976,867,768,654,546,435,321,221,134の降順に並んだ10個の実数データがある。 新たに入力された1つのデータを降順ルールを崩さずに挿入し、結果を表示しなさい。 [3] 環境 [3.1] OS: Windows vista [3.3] 言語: c++ [4] 期限: 2011年10月19日まで [5] その他の制限: リスト構造を利用すること よろしくお願いします。
>>682 void concat(struct node *p, struct node *q)
{
if( ! p || ! q ) return;
while( p-next ) p = p->next;
p->next = q;
}
【質問テンプレ】
[1] 授業単元:プログラミング言語
[2] 問題文(含コード&リンク):
http://www1.axfc.net/uploader/Sc/so/284457 [3] 環境
[3.1] OS: ウィンドウズ7
[3.2] コンパイラ名とバージョン: VC 10
[3.3] 言語: C++
[4] 期限: 今日中
中にはいっているのが自分でつくったCPPファイルです。構造体がうまく処理できず・・・。
よろしくお願いします。
[1] C言語課題(明日まで) [2] キーボードから5個の整数を読み込みそれを小さい順に(5個)表示するプログラムを作りなさい。 [3] Windows 7上にVisual Studio 2008というのが入っています。C言語でプログラミングしなければ なりません。 [4]すみませんが明日中までです。 [5] (1)main関数の下に定義できる変数は文字配列(長さ256)とひとつの整数型の整数だけだそうです (2)main関数以外の関数で呼び出せるのはstdio.hの定義の関数とstdlib.hの関数だけだそうです。 (fgets関数とatoi関数を使えば良いという情報があります。) (3)マクロ関数は使ってはいけないそうです。(てか習ってません)再帰呼び出しも習ってませんし よく知りません。 以上よろしくお願いします。
696 :
695 :2011/10/17(月) 23:31:42.73
抜けてました [5] (4)グローバル変数は使ってはいけないそうです。 (5)入力されるべき整数の範囲は-5から5まででそれ以外は入力されても 警告を出して入力されてないものとみなす仕様だそうです
#include <stdio.h> int main(void) { system("read val; echo $val > tmp"); system("read val; echo $val >> tmp"); system("read val; echo $val >> tmp"); system("read val; echo $val >> tmp"); system("read val; echo $val >> tmp"); system("sort tmp"); return 0; }
ワロタ 変数定義の制約が面倒だとか考えてる間にそれかw
700 :
695 :2011/10/18(火) 00:06:23.97
>>697 早速のご回答ありがとうございます。
実行してみましたが、次のようなメッセージがでてしまいます
'read'は、内部コマンドまたは外部コマンド
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
#include <stdio.h> int main(void) { FILE* fp = fopen("tmp.bat", "w"); fputs("@echo off\n", fp); fputs("set /p val=\n", fp); fputs("echo %val% > tmp\n", fp); fputs("set /p val=\n", fp); fputs("echo %val% >> tmp\n", fp); fputs("set /p val=\n", fp); fputs("echo %val% >> tmp\n", fp); fputs("set /p val=\n", fp); fputs("echo %val% >> tmp\n", fp); fputs("set /p val=\n", fp); fputs("echo %val% >> tmp\n", fp); fclose(fp); system("tmp.bat"); system("sort tmp"); return 0; }
>>703 X if(i<-1 || i>5) {
O if(i<-5 || i>5) {
>>695 #include <stdio.h>
#define i buf[100]
#define j buf[101]
#define inputbuf (buf+128)
#define data ((int*)buf)
int main(void){
char buf[256];
for(i=0;i<5;i++){
while(1){
if(fgets(inputbuf, 128, stdin)==NULL) exit(1);
if(sscanf(inputbuf, "%d", &data[i])==1 && -5<=data[i] && data[i]<=5){
break;
}
printf("警告 : Invalid input. %s\n", inputbuf);
}
}
for(i=0;i<5;i++){
for(j=1;j<5-i;j++){
if(data[j-1]>data[j]){
data[j-1]^=data[j], data[j]^=data[j-1], data[j-1]^=data[j];
}
}
}
for(i=0;i<5;i++) printf("%d\n", data[i]);
return 0;
}
707 :
695 :2011/10/18(火) 00:39:52.82
>>703 ありがとうございます。
良さげですね。これでやってみます。
もしよければポイントだけでもよろしいですから
解説して頂けると幸甚です。
>>704 fopenとかまだ習ってないかも知れません
(結構サボってますのでw)
#include <stdio.h> int main(void) { system("@echo off & echo @echo off > tmp.bat"); system("echo set /p val= >> tmp.bat & echo echo ^%val^% ^> tmp >> tmp.bat"); system("echo set /p val= >> tmp.bat & echo echo ^%val^% ^>^> tmp >> tmp.bat"); system("echo set /p val= >> tmp.bat & echo echo ^%val^% ^>^> tmp >> tmp.bat"); system("echo set /p val= >> tmp.bat & echo echo ^%val^% ^>^> tmp >> tmp.bat"); system("echo set /p val= >> tmp.bat & echo echo ^%val^% ^>^> tmp >> tmp.bat"); system("tmp.bat & sort tmp & del tmp tmp.bat"); return 0; } とせっかくDOS向けにしたのに負の数に対応できてないだと・・・
709 :
695 :2011/10/18(火) 01:58:57.78
>>706 ありがとうございます。
ただ先頭に#が付くマクロ(と言うんですか?)は
使えないと思いますので、参考にさせて頂きます。
コマンドプロンプトとbashの勉強するか
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク):全方位カメラの映像をPC間から取得する。 クライアント側をヒントにサーバー側を作る。 [3] 環境 [3.1] OS:windows 7 [3.2] コンパイラ名とバージョン:microsoft Visual 2005 [3.3] 言語: C [4] 期限:10月24日 [5] 必要なもの、TCP/IPで通信 映像はパノマラまた、ストリームのどちらかです。 サンプルのクライアントは単体でカメラが起動できる。
713 :
712 :2011/10/18(火) 15:54:23.44
通信部分はできましたが、肝心の全方位カメラのプログラムがわかりません
714 :
712 :2011/10/18(火) 15:57:38.57
通信部分はできましたが、肝心の全方位カメラのプログラムがわかりません
2回言ったから失格
716 :
712 :2011/10/18(火) 16:19:16.03
すみません
717 :
665 :2011/10/18(火) 17:17:45.86
>>672 数日たったけどすいません・・・・
数字を出力するファイルmath.cは
#include<stdio.h>
int main(void)
{printf("%d\n",1);}です。
718 :
665 :2011/10/18(火) 17:19:30.18
ただし|などのコマンドを使わず このmath.cかmath.exeをコマンドラインの引数として 別のファイルにリダイレクトするプログラムを作りたいのです。 >bannno.exe math.exe math.txt >cat math.txt >1 が理想です。
719 :
665 :2011/10/18(火) 17:26:19.95
つまりそんなbannno.cを作りたいのです。
720 :
665 :2011/10/18(火) 17:35:04.73
もっとも単純でわかりやすいプログラムでお願いします・・・
#include <stdio.h>
>>665 int main(int argc, char *argv[]){
char buf[256];
if(argc != 3)return 1;
sprintf(buf,"./%s > %s",argv[1],argv[2]);
system(buf);
return 0;
}
セキュリティ?気にすんな
安価の位置がおかしかったw
[1] 授業単元:プログラミング演習 2 [2] 問題文(含コード&リンク) 標準入力に現れた行数と文字数をカウントするCプログラムline_count.cを書きなさい。 実行例は例えば次のようになります $ ./line_count < testfile. txt I am a student. I have a programming C class. lines: 2 letters: 46 ← 欲しいのはこの2つの数字、つまり行数と文字数です. $ [3.1] OS: unix [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限:10月19日(出来れば早めにお願いします) よろしくお願いします。
/*
>>724 */
#include <stdio.h>
int main(void)
{
int lines = 0, letters = 0;
char c;
while ((c = fgetc(stdin)) != EOF)
{
if (c == '\n')
lines++;
letters++;
putchar(c);
}
printf("\n");
printf("lines: %d letters: %d\n", lines, letters);
return 0;
}
>>725 このプログラムだと実行できません 勝手だとは思いますが別のをお願いしますか?
>>726 お願いするかどうかはあんたが決めることだw
726です 日本語おかしくなってましたw あらためて別のプログラムお願いします
>このプログラムだと実行できません 意味不明なんだが
726 正確には実行し 例 I have a studentと入力すると I have a studentと同じ文字が出てしまいます
リダイレクトを受け取るプログラムってどうやるの
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): 2 行2 列の行列a(int 型の2 次元配列とする)の行 列式を計算する関数int determinant(int a[2][2]) を作成せよ.以下の実行例のように,2 行2 列行列の各 要素を入力すると,determinant 関数を用いて行列式 の値を表示し,行列式が0 でない場合には逆行列(要素 は実数)を表示するプログラムを作成せよ. [3] 環境 [3.1] OS:w [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:c言語 [4] 期限:2011/10/20 18:00 [5] その他の制限:授業で習ったことはURLに乗せてあります。配列、ポインタは学習しています。よろしくお願いします。
>>730 入力データをtestfile. txtという名前のファイルに保存し、
以下のようにリダイレクトしてみたら?
$ ./line_count < testfile. txt
736 :
デフォルトの名無しさん :2011/10/19(水) 20:22:38.30
ファイル1(テキスト)に AAA,BBB,CC,DDd,FF OOO,TTT,FF,AAA,VV DDD,EEE,GG,SSS,AA が入っていて、真ん中のCC、FF、GGの部分だけを配列に入れ、 もうひとつのファイルに配列に入れた部分を 保存したいのですが、どうしたらいいですか。
737 :
デフォルトの名無しさん :2011/10/19(水) 20:22:57.07
ファイル1(テキスト)に AAA,BBB,CC,DDd,FF OOO,TTT,FF,AAA,VV DDD,EEE,GG,SSS,AA が入っていて、真ん中のCC、FF、GGの部分だけを配列に入れ、 もうひとつのファイルに配列に入れた部分を 保存したいのですが、どうしたらいいですか。
2回言ったので失格
awk使えばいいんじゃね?
>>737 #include <stdio.h>
int main(void)
{
system("cut -d, -f3 text.txt > out.txt");
return 0;
}
741 :
デフォルトの名無しさん :2011/10/19(水) 20:47:26.03
>>740 ありがとうございます。
無事できました。
742 :
725 :2011/10/19(水) 20:48:43.28
>>724 の実行例で標準入力にテキストファイル渡してたんでそういうコードにした。
コンソールからの入力なら下記のコードで、コンソール上から
I am a student.
I have a programming C class.
Ctrl-D <- EOF入力
でいけると思う。
#include <stdio.h>
int main(void)
{
int lines = 0, letters = 0;
char c;
while ((c = fgetc(stdin)) != EOF)
{
if (c == '\n')
lines++;
letters++;
/*putchar(c);*/
}
/* printf("\n\n");*/
printf("\n");
printf("lines: %d letters: %d\n", lines/* + 1*/, letters);
return 0;
}
743 :
725 :2011/10/19(水) 20:49:45.30
>>742 実行してみた所
./cpy < ./line_count.c
lines: 22 letters: 313
となってしまいます
その後
./cpy < ./line_count.c > ./testfile.txt
./cpy < ./testfile.txtをやってみたら
lines: 2 letters: 24
となってしまいます 原因が解りますでしょうか?
>>733 #include <stdio.h>
int determinant(int a[2][2]) { return a[0][0] * a[1][1] - a[0][1] * a[1][0]; }
int main(void) {
int a[2][2], i, j, d;
for(i = 0; i < 2; i++) for(j = 0; j < 2; j++) scanf("%d", a[i] + j);
printf("行列式:%d\n", d = determinant(a));
if(d) {
printf("%f %f\n", (double)a[1][1] / d, -(double)a[0][1] / d);
printf("%f %f\n", -(double)a[1][0] / d, (double)a[0][0] / d);
}
return 0;
}
[1] 授業単元:アルゴリズム
[2] 問題文(含コード&リンク):
双方向循環リストに関する問題
詳細はリンクに貼ります。
http://codepad.org/b1UQfaJN [3] 環境
[3.1] OS:windows
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:c言語
[4] 期限:2011/10/22 18:00
[5] その他の制限:授業で習ったことは[2]のURLに乗せてあります。よろしくお願いします。
>>747 解こうと思ったが問題の乗っけてるURLの内容を見ると
意味がわからん
[1] 授業単元:楽しいプログラミング [2] 問題文(含コード&リンク): Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday という曜日を表す列挙体 enum Days を定義せよ.以下の実行例のように, 曜日を入力すると,enum Days の列挙定数を利用して 週末,平日,それ以外の場合にそれぞれメッセージを 表示するプログラムを作成せよ. [1] 授業単元:アルゴリズム [2] 問題文(含コード&リンク) [3] 環境 [3.1] OS:windows [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:c言語 [4] 期限:2011/10/21 18:00 [5] その他の制限: [3] 環境 [3.1] OS:windows [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:c言語 [4] 期限:2011/10/22 18:00 [5] その他の制限:
>>748 実行例
曜日を入力して下さい
(0:日1:月2:火3:水4:木5:金6:土):0
やった!週末だ
実行例2
曜日を入力して下さい
(0:日1:月2:火3:水4:木5:金6:土):5
今日も講義頑張ろう!
>>747 リンク先には、「以下の関数を作れ。」ってあるけど、(option)ってあったり、
読んでも解かないといけない問題が分からない。
Josephusの問題(継子立ての問題)を解いてくれってことかな?
>>748 ,
>>751 レスありがとうございます。
オプションは無視していいです。すみませんでした。
・双方向循環リストの長さ(ダミーノードを除く)を求める関数
・双方向循環リストへの「一番先頭への挿入」と「削除」(削除ノードを直接指定)を出きる関数
・それらの関数を用いてのjosephusの問題を解くプログラムを作れという問題です。
よろしければよろしくお願いします。
>>747 ,752
>・それらの関数を用いてのjosephusの問題を解くプログラムを作れという問題です。
先に書いてしまってたんで、参考までに。
#include <stdio.h>
int main(){
int n,m,mm,a[100],i;
printf("n = ");
scanf("%d",&n);
printf("m = ");
scanf("%d",&m);
for(i=0; i<n; i++)a[i]=(i+1)%n;
i=0;
while(n) {
mm=m-1;
while(--mm)
i=a[i];
printf("%d ",a[i]+1);
a[i]=a[a[i]];
i=a[i];
n--;
}
return 0;
}
[1] 授業単元: C言語プログラム [2] 問題文(含コード&リンク): 初項 a,交差 d及びn項目のnを引数で与え 等差数列のn項目の値を戻り値で得る関数を作成する.引数,戻り値は整数型でよい. an = a + (n-1) * d 上の関数を用いて,初項,交差及びn項目をキーボード入力で与え,結果を出力するプログラムを作成せよ. 実行例↓ $./kadai1 a? 2 d? 3 n? 10 Result: 29 [3] 環境 [3.1] OS:windows 7 [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C言語 [4] 期限:2011年10月21日23:59まで [5] その他の制限:関数の単元での課題です。よろしくお願いします。
そーっとやればいいんじゃ
int An(int a,int b,int n) { return a + (n-1) * d ; }
>>754 #include <stdio.h>
int main(void)
{
system("echo -n a? ; read a; \
echo -n d? ; read d; \
echo -n n? ; read n; \
result=`expr $a + \\( $n - 1 \\) \\* $d`; \
echo -n Result: $result");
return 1;
}
[1] 授業単元:プログラミング演習 [2] 問題文: 円1:x^2+y^2=r^2と円2:(x-r)^2+(y-r)^2=r^2が重なっている部分の面積を求めるプログラムを作成しなさい。 ただしπ=3,14159とする。 [3] 環境 [3.1] OS: Linux [3.2]コンパイラ名とバージョン:cc [3.3] 言語: C言語でお願いします。 [4] 期限: 2011年10月23日までです。 [5] その他の制限:制限はないです。よろしくお願いします。
762 :
186 :2011/10/20(木) 23:41:30.73
>>761 #include <stdio.h>
int main(void){
double r=1.0;
printf("%f\n", 0.570795*r*r);
return 0;
}
[1] 授業単元:C言語システムプログラミング [2] 問題文:配列と配列の大きさ(要素の数)を引数で与えて,その総和を求める戻り値で得る関数を作成する. int sum_array(int v[], int n); /* 関数の中で使うfor文 */ for(i = 0; i < n; i++) { } (これらを使用する) そして,関数に以下の配列を与えて,総和を求め表示するプログラムを作成せよ. int num[20] = {44, 29, 84, 37, 29, 28, 2, 93, 6, 42, 75, 69, 31, 99, 55, 38, 81, 73, 8, 93}; 実行例↓ $ ./homework result: 1016 [3] 環境 [3.1] OS:windows7 [3.2]コンパイラ名とバージョン: gcc [3.3] 言語: C言語 [4] 期限:2011年10月22日23:59まで [5] その他の制限:問題文で与えられた物を使って解いていただきたいです。 解答よろしくお願いします。
765 :
デフォルトの名無しさん :2011/10/21(金) 15:57:44.22
[1] 計算機実習応用 [2] 文字列を適当に入力してa〜z、A〜Zの各文字の出現回数を出力するプログラムをつくれ。 大文字小文字を判別できるようにすること。出現回数が0の場合は出力しない。 [3] [3.1]Windows7 [3.2] [3.3]どちらでも可 [4] 本日10時まで [5] ほとんどできてるんですけど最後の細かいところがわかりません。 すでにできているプログラムを書き込むので改善点を教えて欲しいです。 ・出現回数が大文字小文字セットででてきてしまう(aを3回のみだと「a=3,A=0」と出力されてしまう) ・大文字だけ入力すると出現回数が出力されない
766 :
デフォルトの名無しさん :2011/10/21(金) 15:58:37.58
>>765 #include<stdio.h>
int main(void){
int c,i;
int cnt[52]={0};
while((c = getchar()) != '\n'){
if(('a'<=c&&c<='z')||('A'<=c&&c<='Z'))
{
for(i=0;i<26;i++){
if(c=='a'+i) cnt[i]++;
if(c=='A'+i) cnt[i+26]++;
}
}
}
for(i=0;i<26;i++){
if(cnt[i]>0)printf("%c=%d\n",'a'+i,cnt[i]);
if(cnt[i]>0)printf("%c=%d\n",'A'+i,cnt[i+26]);
}
return 0;
}
767 :
デフォルトの名無しさん :2011/10/21(金) 16:00:17.74
>>766 が途中までのプログラムでここから改善点を教えてほしいです
わかりにくくてすいません
>>766 if(islower(c)) cnt[c-'a']++;
if(isupper(c)) cnt[c-'A']++;
769 :
デフォルトの名無しさん :2011/10/21(金) 16:16:17.07
>>765 #include<stdio.h>
int main(void)
{
int c,i,cnt[256]= {0};
while((c = getchar()) != '¥n')
cnt[c]++;
for(i=0; i<256; i++)
if(cnt[i]&&((i>='a'&&i<='z')||(i>='A'&&i<='Z')))
printf("%c=%d¥n",i,cnt[i]);
return 0;
}
>>764 int r=0;
while(n--)r+=*(v++);
return r;
でも良いと思うんだが、引数値を変えてはいけない、とかのガイドでもあるのかな?
774 :
764 :2011/10/21(金) 21:01:32.77
>>772 ありがとうございます
>>773 特に制限はないのですが出来るだけ資料にUPされているものを
使っていただきたかったので指定させていただきました
1] 授業単元: プログラミング [2] 問題文(含コード&リンク):以下の実行例のように,標準入力からgetchar 関数 を使って文字を次々と読み込み,Ctrl-d などで入力が 終了するまでに入力された行数(改行の数)を表示する プログラムを作成せよ 実行例 Hello! I’m Taro KOUKA. I was born in Tokyo in 1991. <--(Ctrl-d で入力終了) 行数: 3 [3] 環境 [3.1] OS: linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2011年10月22日 [5] その他の制限: 特にないです。
>>775 #include <stdio.h>
int main(void)
{
int count = 0;
int c;
while ((c = getchar()) != EOF) if (c == '\n') ++count;
printf("行数: %d\n", count);
return 0;
}
777 :
デフォルトの名無しさん :2011/10/21(金) 23:57:45.12
[1] 授業単元:C言語 [2] 問題文:とある架空の携帯電話会社では、 基本料金の1,000円に、一ヶ月の 通話の合計時間によって通話料が 加算される(1分あたり10円)。 また、1ヶ月の料金は基本料金込みで 10,000円以上は通話料が無料になるものとする。 このとき、1ヶ月の合計通話時間を入力すると 請求される料金を表示するプログラムを作成せよ。 === プログラム === #include <stdio.h> int main() { [3] 環境 [3.1] OS: windows [3.3] 言語:visual C++ [4] 期限:月曜日 よろしくお願いします
>>777 main(n){scanf("%d",&n);printf("%d\n",n>900?10000:n*10+1000);}
>>778 main(n){scanf("%d",&n);printf("%d0\n",n>900?1000:n+100);}
ゴルファーの発想できていいなあ
783 :
781 :2011/10/22(土) 06:19:55.88
784 :
783 :2011/10/22(土) 06:22:10.09
また間違えたので書き直し。
>>761 これは算数的に解いておくとあまりにやさしすぎるようだけれど、
積分で解くプログラムを書けということであろうか。
>>784 それだと円周率いらないのでは? つまり違う。
>>784 残念ながらこのスレで宿題を丸投げにするのは中学レベルの数学ができてないやつが多いんだよ
だからこそ丸投げにするともいうが
回答側にも出来てないやつが多いけどなw
売り言葉に脊髄反射で買い言葉をレスするのもあるって事なんだね
790 :
デフォルトの名無しさん :2011/10/22(土) 12:50:18.90
[1] C言語演習
[2]
http://codepad.org/u4T8ly42 のプログラムを改良して、
1を入力すると右から左へ、2を入力すると左から右へスクロールするように
しなさい。
[3.1] Windows7
[3.3] C言語
[4] 10/24 18時まで
[5] 特になし
わかる方どうかよろしくお願いします。
793 :
デフォルトの名無しさん :2011/10/22(土) 23:49:45.03
795 :
デフォルトの名無しさん :2011/10/23(日) 22:19:57.27
リアルタイムにキー入力を感知する_kbhitってC標準じゃないってことなの?
そういうこと
linuxでkbhitみたいなことするにはどうするんだろう? selectとかになるのか?
テキストファイルの中にある複数の英字の文字列をソートして書きこむプログラム教えてください MOJI EIGO NIPPON ↓ EIGO MOJI NIPPON
>>801 みていただいてありがとうございます。どんなところが「気持ち悪い」か、ちょこっとでいいから教えてください。
[1] 配列操作 [2] 問題文(含コード&リンク): 入力した文字と個数をもとに文字列データを生成する。(^Zが入力されるまで) 以下の実行結果をもとにプログラミングしなさい。 char m[30]; 実行結果 文字、個数==>A,3 文字、個数==>b,3 文字、個数==>c,1 文字、個数==>E,2 文字、個数==>^Z 文字列:AAAbbbcEE [3] 環境 [3.1] Windows7 [3.2] borland [3.3] C言語 [4] 期限: 2011年10月26日13:00まで [5]while文とforを使うこと
>799 int main(){ system("sort < input.txt > output.txt"); return 0; }
>>797 別スレッドで入力待ちするって手は有るかも知れない
でも echo back 無しの _getch() もC準拠じゃないんだな、こっちは curses でも使うか?
>>804 それだと同じファイルから同じファイルへの書き換えができないんですけどどうすればいいですか?
809 :
デフォルトの名無しさん :2011/10/25(火) 01:15:01.68
[1] 授業単元:C言語 繰り返し [2] 問題文(含コード&リンク): 1.キーボードから正の整数を2つ(x y)入力し、縦x個、横y個の文字'*' からなる長方形を表示するプログラムを多重ループを用いて作成せよ。 2.キーボードから入力した10進整数(0以上2^31 -1以下)を二進数にせよ for文を使うこと。例えば2で割った余りと商の値によって下の桁のビットから求める等 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 本日12:00 [5] その他の制限: (どこまで習っているか、for while。(配列、関数、ポインタなどまだです) 宜しくお願いします
>>809 #include <stdio.h>
int main(){
int x,y,t;
scanf("%d %d",&x,&y);
while(x--){
t=y;
while(t--)putchar('*');
putchar('\n');
}
return 0;
}
#include<stdio.h>
int main(){
int i,x;
scanf("%d",&x);
for(i=1;i<=x;i*=2);
for(i/=2;i>0;i/=2)putchar( (x&i)?'1':'0' );
putchar('\n');
return 0;
}
>>809 >[5] その他の制限: (どこまで習っているか、for while。(配列、関数、ポインタなどまだです)
トリッキーなプログラムを求めてるように見えるのな。
実は課題じゃないんじゃ?
>>806 (8) : error C2059: 構文エラー : '}'
(11) : error C2065: 'p' : 定義されていない識別子です。
(12) : error C2065: 'p' : 定義されていない識別子です。
(12) : warning C4047: '関数' : 間接参照のレベルが 'const char *' と 'int' で異なっています。
(12) : warning C4024: 'sscanf' : の型が 1 の仮引数および実引数と異なります。
(15) : error C2065: 'p' : 定義されていない識別子です。
(15) : error C2100: 間接指定演算子 (*) の使い方が正しくありません。
(15) : error C2065: 'p' : 定義されていない識別子です。
(15) : error C2100: 間接指定演算子 (*) の使い方が正しくありません。
(15) : error C2106: '=' : 左のオペランドが、左辺値になっていません。
(16) : error C2065: 'p' : 定義されていない識別子です。
(18) : error C2065: 'p' : 定義されていない識別子です。
(18) : error C2100: 間接指定演算子 (*) の使い方が正しくありません。
(18) : error C2106: '=' : 左のオペランドが、左辺値になっていません。
>>808 頭悪いページだな。
>コマンドプロンプト リダイレクト 画面にも表示
と言う検索に対して、コメントが、
>リダイレクトの意味がわかっていないからこういうおバカなキーワードになる。
>>807 int main( void )
{
system( "sort < infile > outfile" );
system( "rm infile" );
system( "mv outfile infile" );
return 0;
}
816 :
デフォルトの名無しさん :2011/10/25(火) 17:36:28.84
[1] 授業単元: プログラミング基礎 [2] 問題文(含コード&リンク): 1〜10の数が書かれたカードが1枚ずつ、全部で10枚あります。 今、これらのカードを並べ、隣り合った数の差を左から次々に加えて いくことにします。例えば、 2,5,6,8,1,4,3,9,7,10 と並べたならば、 3+1+2+7+3+1+6+2+3=28 ということになります。 この計算結果が最も大きくなるようにカードを並べると、 結果はいくらになるでしょうか。 (注)元の問題は算数の問題なので論理で答えを出すものだが、 ここではプログラムを書いてその最大値を求めて欲しい。 [3] 環境 [3.1] OS: Windows 7 [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2011年10月31日 [5] その他の制限:特になし よろしくお願いします
>>816 #include <stdio.h>
#include <stdlib.h>
void solve(int card[], int card_num, int is_used[], int *maximum){
int i, sum=0;
if(card_num>=10){
for(i=1;i<10;i++) sum+=abs(card[i]-card[i-1]);
if(*maximum<sum){
*maximum=sum;
// printf("sum=%d ", sum);
// for(i=0;i<10;i++) printf(" %d", card[i]);
// printf("\n");
}
return;
}
for(i=0;i<10;i++){
if(is_used[i]) continue;
is_used[i]=1;
card[card_num]=i+1;
solve(card, card_num+1, is_used, maximum);
is_used[i]=0;
}
}
int main(void){
int card[10], is_used[10]={0}, maximum=0;
solve(card, 0, is_used, &maximum);
printf("maximum=%d\n", maximum);
return 0;
}
819 :
デフォルトの名無しさん :2011/10/25(火) 19:06:29.52
>>817 数を並べ替えるアルゴリズム部分に感動した。
これって定石なのかしら?
宿題スレでもよくみるし、初心者でも自分で思いつくレベル
>>820 定石ではあるけど初心者は再帰呼出を嫌うだろJK
823 :
デフォルトの名無しさん :2011/10/25(火) 19:51:37.55
思いつかんかった(´・ω・`) 最初に思いついたのはstd::next_permutationだったYO
>>816 #include <stdio.h>
#include <stdlib.h>
#define CARD_NUM 10
int main(void){
int card[CARD_NUM], sum=0, i;
for(i=0;i<CARD_NUM/2;i++)
{
card[i*2+1]=i+1;
card[i*2]=i+1+(CARD_NUM+1)/2;
}
if(CARD_NUM%2)
{
card[CARD_NUM-1]=CARD_NUM/2+1;
}
for(i=1;i<CARD_NUM;i++)
{
sum+=abs(card[i]-card[i-1]);
}
printf("%d\n", sum);
return 0;
}
825 :
デフォルトの名無しさん :2011/10/25(火) 20:29:29.46
816のかきこみをしたものです。みなさんありがとう!!
[1] 授業単元:クイックソート
[2] 問題文(含コード&リンク):
http://ideone.com/duPFX [3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C言語
[4] 期限: 10月26日 09:00
よろしくお願いします
[1] 授業単元:モンテカルロ
[2] 問題文(含コード&リンク):
http://ideone.com/foLSr [3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C言語
[4] 期限: 10月26日 09:00
連投で恐縮ですがよろしくお願いします
829 :
デフォルトの名無しさん :2011/10/26(水) 05:13:34.17
[1] 授業単元:プログラミング基礎 [2] 問題文(含コード&リンク): ユーザーに入力させた半数英数字の文字列を、char型配列に入れ、一字ずつずらして表示させるプログラムの作成。 入力された順番と同じになったら表示終了とする。 例 abcd bcda cdab dabc abcd ポインタを使うと思います。それから、strlen(c)を使うようです。 [3] 環境 [3.1] OS:Windows7 [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C言語 [4] 期限: 10月26日 15:00 簡単に説明もいただけると大変助かります。 よろしくお願いいたします。
>>829 #include <stdio.h>
#include <string.h>
int main(void)
{
char str[256];
int i, j, l;
scanf("%s", str);
l = strlen(str);
for(i = 1; i <= l; i++) {
for(j = 0; j < l; j++) putchar(str[(i + j) % l]);
putchar('\n');
}
return 0;
}
>>829 #include <stdio.h>
#include <string.h>
int main(void)
{
char str[256],*p=str;
int i, l;
printf("in = ");
scanf("%s", str);
i=l = strlen(str);
while(i--) {
*(p+l)=*p;
*(p+l+1)='¥0';
printf("%s¥n",++p);
}
return 0;
}
832 :
デフォルトの名無しさん :2011/10/26(水) 12:54:45.75
>>831 ありがとうございます。
%sとはどんな働きをするのですか?
調べてみたのですが、よくわかりませんでした><
#include <stdio.h> int main(void) { char str[256], *p, *q; scanf("%s", str); for(p = str; *p; p++) { for(q = p + 1; *q; q++) putchar(*q); for(q = str; q <= p; q++) putchar(*q); putchar('\n'); if(*p == '\0') break; } return 0; }
835 :
デフォルトの名無しさん :2011/10/26(水) 13:44:08.42
>>833 文字を入力する際にはこちらを使うということですね、ありがとうございます。
>>830 と
>>834 はまだ勉強していないやつがあったので、
>>831 を使ってみようと思います。
様々な回答ありがとうございました。
1] 授業単元:プログラム作成 [2] 問題文(含コード&リンク):以下の実行例のように,標準入力からgetchar 関数 を使って文字を次々と読み込み,アルファベットの小文 字は大文字に,大文字は小文字に変えて,それ以外の文 字はそのまま表示するプログラムを作成せよ 例hELLO! I’m Taro KOUKA. <--(入力) i’M tARO kouka. I was born in Tokyo in 1991. <--(入力) i WAS BORN IN tOKYO IN 1991. <--(Ctrl-d で入力終了) [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C言語 [4] 期限: 10月27日9:00
/*
>>836 */
#include <stdio.h>
#include <ctype.h>
int main(void)
{
char c;
while ((c = getchar()) != EOF)
{
if (isalpha(c))
{
if (islower(c))
c = toupper(c);
else
c = tolower(c);
}
putchar(c);
}
return 0;
}
838 :
デフォルトの名無しさん :2011/10/26(水) 19:06:26.15
古いCDを整理してたらVisualAGEが出てきたので インスコしてみたらクソ遅くてわろた 1.2になりかけの頃のやつ Win7 64bit Core3 でEEのIndigo(日本語後入れ)使ってるけど 動作の遅さよりファイル関連の反映の遅さが気になる EclipseをSSDにいれてるヒトの感想がききたい
840 :
デフォルトの名無しさん :2011/10/26(水) 20:13:49.00
>>829 の質問をしたものです。
>>831 の回答をもらったのですが、strlenがどんな働きをするのかと、
a=b = strlen(str);
while(a--) {
*(p+b)=*p;
*(p+b+1)='\0';
printf("%s\n",++p);
この部分が一体全体どうなっているかわかりません。教えてください。
pには文字が入っているはずなのに、どうして*(p+b+1)='\0'のように数字を足すことができるのでしょうか。
また、a=b=strlen(str)とaも文字が入っているはずなのに、a--と数字のように扱えるのはなぜですか?
初歩的な質問で申し訳ありませんが、お願いします。
strlen()は文字数を返す関数 abcd の入力では4が返ってる。 pは配列strのどこかを指すポインタ 初期化時は配列strの先頭を指してる。 whileループはiが偽(0)になるまで、例では4回ループする。 *(p + l) = *p はポインタpが指す位置からl番目、'\0'が入ってる位置にポインタpが指してる文字、 1ループ目では先頭のaが代入される。 *(p + l + 1) = '\0' は、↑で代入した位置の次に'\0'を代入して終端文字の修正をしてる。 printf("%s\n", ++p) は、分解すると ++p; printf("%s\n", p); ポインタpの指す位置から末尾に1文字移動したので、ポインタを一つずらして表示させてる。 長ったらしいのでまとめると、 配列strに文字を入力した後は abcd\0 abcda\0 abcdab\0 abcdabc\0 って具合に一文字ずつ追加しながらポインタpも一つずつずらし、 結果入力された文字が一つずつずれて表示されてる。
844 :
デフォルトの名無しさん :2011/10/26(水) 22:55:25.07
[1] 授業単元:C言語基礎 [2] 問題文(含コード&リンク): 明治元年以降の西暦年を4桁の数で入力すると、 和暦で年を表示するプログラムを作成せよ。 ただし、2つの元号を持つ年 は両方の年を表示すること。 (例: 1989年 → 昭和64年、平成元年) (2つの元号を持つ年の扱いについては 余裕がある人は、月、日も入れて、その日の正しい 元号を表示することによって元号を一つ表示す るプログラムとしてもよい。) 提出例 === プログラム === #include <stdio.h> int main() { [3] 環境 [3.1] OS:Windows7 [3.2] コンパイラ名とバージョン: [3.3] 言語: visualC++2010 [4] 期限: 10月27日 19:00 よろしくお願いします
台形近似法を用いてf(x)=cos(x)を任意の範囲で積分するプログラムを ユーザ関数を定義して作成しなさい. その際の区分間距離も任意に入力できるようにすること。 実行例 積分範囲を入力せよ x0 = 0 xl = 10 区分間距離を入力せよ length = 1 ans = 9.949055 積分範囲を入力せよ x0 = 0 xl = 100 区分間距離を入力せよ length = 5 ans = 49.588107 お願いします。
[1] 授業単元:計算機アルゴリズムT [2] 問題文(含コード&リンク): 設問1-1 プログラム例6.3.1を配列変数xの要素数(変数memberの値)と各要素の値をキーボードから入力するように変更しなさい。 プログラム例6.3.1 #include <stdio.h> int main(void) { int x[10] = {80, 56, 68, 75, 45, 100, 92, 73, 63, 95}; int member = 10; int total; float average; int i; for (i = 0, total = 0; i < member; ++i ) total += x[i]; average = (float)total / (float)member; printf("総和=%d\n",total); printf("平均点=%7.2f\n", average); return 0; } 設問1-2 上記設問1-1と同じ配列変数xの要素をその並びを逆順にして配列変数yへ代入し、yの全要素を表示するプログラムを作りなさい。 [3] 環境 [3.1] OS:Windows vista [3.2] コンパイラ名とバージョン:visual studio 2008 [3.3] 言語:C [4] 期限:[2011年11月1日8:00まで] [5] その他の制限:変数、算術演算、printf、scanf、繰り返し処理while文、do-while文 繰り返し処理for文、繰り返し処理for文による総和の計算、配列変数は習いました。 宜しくお願いします。
1-1 int number, *x, i; printf("要素数:"); scanf("%d", number); x = malloc(sizeof(*x) * number); for (i = 0; i < number, i++) scanf("%d", x + i); 1-2 revert(x, y, 0, 10);とでもして呼び出して。 void revert(int *x, int *y, int i, j) { j--; if (i >= j) return; y[j] = x[i]; x[i] = x[j]; reverse(x, y, i++, j--); return; }
/*
>>849 */
/*設問1-1*/
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int *x;
int member;
int total;
float average;
int i;
printf("member > ");
scanf("%d", &member);
x = (int *)malloc(sizeof(int) * member);
for (i = 0; i < member; ++i)
printf("x[%d] > ", i), scanf("%d", &x[i]);
for (i = 0, total = 0; i < member; ++i)
total += x[i];
average = (float)total / (float)member;
printf("総和=%d\n", total);
printf("平均点=%7.2f\n", average);
free(x);
return 0;
}
つづく
つづき /*設問1-2*/ #include <stdio.h> #include <stdlib.h> int main(void) { int *x, *y; int member; int i; printf("member > "); scanf("%d", &member); x = (int *)malloc(sizeof(int) * member); y = (int *)malloc(sizeof(int) * member); for (i = 0; i < member; ++i) printf("x[%d] > ", i), scanf("%d", &x[i]); for (i = 0; i < member; ++i) y[member - 1 - i] = x[i]; for (i = 0; i < member; ++i) printf("y[%d]=%d\n", i, y[i]); free(x); free(y); return 0; }
] 授業単元:プログラミング基礎 [2] 問題文(含コード&リンク):(列挙体) Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday という曜日を表す列挙体 enum Days を定義せよ.以下の実行例のように, 曜日を入力すると,enum Days の列挙定数を利用して 週末,平日,それ以外の場合にそれぞれメッセージを 表示するプログラムを作成せよ. 例 % ./q3-3 曜日を入力して下さい (0:日1:月2:火3:水4:木5:金6:土):0 やった!週末だ 曜日を入力して下さい (0:日1:月2:火3:水4:木5:金6:土):5 今日も講義頑張ろう! 曜日を入力して下さい (0:日1:月2:火3:水4:木5:金6:土):7 この日はないぞう... [3] 環境 [3.1] OS:Windows7 [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C言語 [4] 期限: 10月28日 10:00 簡単に説明もいただけると大変助かります。 よろしくお願いいたします。
>>853 #include <stdio.h>
int main(void){
enum Days {Sunday, Monday, Tuesday, Wednesday, Thursday,
Friday, Saturday
};
char s[][100]= {"やった!週末だ","今日も講義頑張ろう!","この日はないぞう..."};
int n[]= {0,1,1,1,1,1,0};
int d;
while(1) {
printf("曜日を入力して下さい¥n");
printf("(0:日1:月2:火3:水4:木5:金6:土):");
scanf("%d",&d);
if((d<Sunday)||(d>Saturday))
printf("%s¥n¥n",s[2]);
else
printf("%s¥n¥n",s[n[d]]);
}
return 0;
}
856 :
デフォルトの名無しさん :2011/10/27(木) 16:24:59.71
[1] 授業単元: 画像処理
[2] 問題文(含コード&リンク): bmp、jpg形式の画像の輝度値を表示させるプログラムを作成せよ
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: gcc opencv
[3.3] 言語: C
[4] 期限: 2011年10月29日まで
[5] 以下のURLの画像のような、元々の白黒画像を白と黒の輝度値を表示した画像に変換したいのですが、どうしていいか
全く分からなくて、困っています
http://mcm-www.jwu.ac.jp/~physm/buturi07/robo/genri02.html 画像だけ載せることができればいい課題なので、最悪このような事を行えるソフトウェアがあればいいのですが
ネットでたくさん検索を行ったのですが、私の浅知恵のせいか、よく分かりませんでした
ヒントだけでもいいので、よろしくお願い致します
マルチうぜえ
マルチでごめんなさい 入門編で聞いたんですけどこっちで聞けと言う事なので 5人の学生の成績(100点満点)の値をキーボードから読み込み,それらの平均点と分散(標準偏差の二乗)を求めるプログラムを作れ。 授業の課題です 解説付きでお願いします。
>>858 #include <stdio.h>
#define NINZU 5
int main(void){
int seiseki[NINZU], i, sum = 0;
double average; /* 平均 */
double sampleVariance = 0; /* 標本分散 */
double w;
/* 5人の学生の成績(100点満点)の値をキーボードから読み込み、点数の合計値を出す */
for (i = 0; i < NINZU; i++) {
printf("seiseki[%d] = ", i + 1);
scanf("%d", &seiseki[i]);
sum += seiseki[i];
}
average = (double) sum / NINZU; /* 平均 */
/* 平均との差の二乗の合計値を出す */
for (i = 0; i < NINZU; i++) {
w = seiseki[i] - average;
sampleVariance += w * w;
}
sampleVariance /= NINZU; /* 標本分散を出す */
printf("answer = %g¥n", sampleVariance);
return 0;
}
>>858 #include <stdio.h>
#define f ((a+b+c+d+e)/5)
#define g(x) ((x-f)*(x-f))
main(){int a,b,c,d,e;scanf("%d%d%d%d%d",&a,&b,&c,&d,&e);/*キーボードから読み込み*/
return printf("平均:%d\n分散:%d\n",f,(g(a)+g(b)+g(c)+g(d)+g(e))/5);/*平均と分散を求める*/
}
863 :
858 :2011/10/27(木) 18:36:35.29
>>859 あ、ごめんなさい
[1] 授業単元:数学関数と数値計算
[2] 問題文(含コード&リンク):
>>358 [3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: ごめんなさい。分かんないです。
[3.3] 言語: おそらくどちらでも
[4] 期限: [2011年10月28日15:00まで]
[5] その他の制限: printfとscanfまで習いました。
授業全然ついていけてないんで、あやふやなところ多いです。すいません
866 :
デフォルトの名無しさん :2011/10/27(木) 20:51:39.05
>>857 すみません、初めはこちらにレスしようと思ったのですが
見ていた他のスレにレスしてしまいました
>>863 コードを読み返して、書き直してを繰り返して、
自力で書けるようにならないと今後どんどん悲惨な事になるぞ。
>>863 ソースを壊しても困らない状態(オリジナルは別フォルダに保存、とか)にしておいてから、ソースを色々いじって、なにが起こるかを見るのも役に立つと思う。
>>863 printfとscanfしか理解してないぽいからちゃんと一から勉強した方が良い
>>867-869 正直printfとscanfもあいまいな感じです
分かって無い状態で出すのも気が引けるんで今回の課題は未提出で行こうと思います
一回しっかりと勉強せんとダメですわ
みなさんありがとうございました
871 :
867 :2011/10/28(金) 00:25:22.64
>>870 俺が書いたわけじゃないけど、
>>860 のコードが分かりやすい、
点数入力して合計計算
↓
平均計算
↓
偏差二乗和計算
(コメント/* 平均との差の二乗の合計値を出す */ の部分)
↓
分散を求めて表示
ってなってるから、コードから
点数入力して合計計算
以外を削除して、printf()とscanf()でどうやって表示、点数入力してるかを関数仕様書(cppreferenceとか)見ながら確認するといい。
それがわかると次の
平均計算
部分を追加して確認、本当に平均が計算出来ているかは自分で追加してみてもいい。
それがわかると次のーーー
って具合に、全部一片に勉強するより、コードを処理単位の固まりで捉え、少しずつ勉強するのが分かりやすい。
行数的には
>>861 が少ないけど、こっちのコードはトリッキーだから
>>870 にはまだ早い。
872 :
867 :2011/10/28(金) 00:30:23.66
ちなみに
>>862 はC++11で書いてるからCの履修終わった頃で良いと思うw
>>870 >分かって無い状態で出すのも気が引けるんで今回の課題は未提出で行こうと思います
出したほうが、説明をせざるをえない状況に自分を持っていける、という考え方もある。
教科書とにらめっこして、やっと出来た気がします。 やっぱ簡単に聞こうなんて思ったらダメですね みなさんありがとう! 一応貼っときます # include <stdio.h> int main(void){ int a, b, c, d, e; double f, g; printf(" a, b, c, d, e="); scanf("%d%d%d%d%d", &a, &b,&c, &d, &e); f=(a+b+c+d+e)/5.0; g=((f-a)*(f-a)+(f-b)*(f-b)+(f-c)*(f-c)+(f-d)*(f-d)+(f-e)*(f-e))/5.0; printf("平均点%lf\n, 分散%lf\n", f, g); return 0; }
∧∧ そ〜ら、属国犬取って来るアル / 支\ ,,,_ ( `ハ´)つ `''‐、, ⊂ ノ ∧_∧ ウェー、ハッハッハ `ヽ, ● 人 Y (( 〜(⌒:<*`∀´> ゙:、 r'' レ (_フ (/ーし'ー-J ゙、,,:'゙ ∧∧ 宗主さまぁ /中\ オー、ヨシヨシ! ∧_(`ハ´ ) (( 〜(⌒:<*`∀´> と ) し し し (__(_フ
] 授業単元:プログラム作成 [2]D, C, B, A, S, Invalid という成績を表す列挙体 enum result を定義し,点数(int 型)を引数として enum result 型の値を返す関数 seiseki_hantei(int sc) と,enum result 型の値を引数として,成績を表示する関数も作成する 点数と成績は以下の通とする 0〜59 点: D 60〜69 点: C 70〜79 点: B 80〜89 点: A 90〜100 点: S それ以外: Invalid る関数 print_seiseki(enum result res) を作成せよ.この2 つの関数を使用して,以下の実行例 のように点数を入力すると成績を表示するmain 関数も 作成すること.点数と成績の関係は以下の通りとする. 例. 点数(整数)を入力してください:91 成績はS です。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C言語 [4] 期限: 10月27日9:00
授業単元:プログラム作成 [2]D, C, B, A, S, Invalid という成績を表す列挙体 enum result を定義し,点数(int 型)を引数として enum result 型の値を返す関数 seiseki_hantei(int sc) と,enum result 型の値を引数として,成績を表示する関数も作成する 点数と成績は以下の通とする 0〜59 点: D 60〜69 点: C 70〜79 点: B 80〜89 点: A 90〜100 点: S それ以外: Invalid る関数 print_seiseki(enum result res) を作成せよ.この2 つの関数を使用して,以下の実行例 のように点数を入力すると成績を表示するmain 関数も 作成すること.点数と成績の関係は以下の通りとする. 例. 点数(整数)を入力してください:91 成績はS です。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C言語 [4] 期限: 10月28日11:00
一見簡単そうに見えて問題文の不備から誰にも解けない問題か
881 :
デフォルトの名無しさん :2011/10/28(金) 15:43:20.17
【2】 2次元配列の問題です m行n列の配列aの 各行ごとの合計 gyouwa[i] i=0,1,・・・,m 各列ごとの合計 retuwa[j] j=0,1,・・・,n を計算するプログラムの作成をお願いします •行列サイズ m,n は実行時に 100以内であれば自由に設定してデータを再入力させる機能をつける ◦配列サイズの上限はプログラム中で配列を宣言するとき「100 個」として下さい。これは,プログラム中で大き目の配列を宣言しておいて,指定されたサイズに応じて必要分を使うための練習です。 【3】c言語 【4】10月30日まで
最大値の求め方について教えてください。 配列の最大値を求めたくて 下のプログラムを作ったのですが,うまく動作しません。 for( maa=1 , qxr = qxxr[0] ; maa < 10; maa++) { if( qxr < qxxr[maa] ) { qxr = qxxr[maa]; qxxxr = maa; } } printf("最大のq*rは%dのとき%f\n",qxxxr,qxr); 最大のq*rは0のとき0 と表示されるのですが間違っているところがわかれば教えてください。 配列は下のような感じです. qxxr[0]=40.800000 qxxr[1]=41.600000 qxxr[2]=0.000000 qxxr[3]=0.000000 qxxr[4]=40.000000 qxxr[5]=0.000000 qxxr[6]=0.000000 qxxr[7]=40.000000 qxxr[8]=0.000000 qxxr[9]=0.000000
>>883 qxxr[0]=40.800000は浮動小数点だけど、
printf("最大のq*rは%dのとき%f\n",qxxxr,qxr);
表示はintになってるから。
885 :
884 :2011/10/28(金) 22:32:37.09
あ、勘違いごめ
>>883 これでいいのか?
#include <stdio.h>
int main(void){
double qxxr[]= {
40.800000
,41.600000
,0.000000
,0.000000
,40.000000
,0.000000
,0.000000
,40.000000
,0.000000
,0.000000
};
double qxr;
int maa,qxxxr;
for( maa=1 , qxr = qxxr[0] ; maa < 10; maa++) {
if( qxr < qxxr[maa] ) {
qxr = qxxr[maa];
qxxxr = maa;
}
}
printf("最大のq*rは%dのとき%f¥n",qxxxr,qxr);
return 0;
}
実行結果:最大のq*rは1のとき41.600000
>>883 マルチならせめて、2番目のスレに書き込む時に判るようにしようぜ。
for( maa=1 , qxr = qxxr[0] ; maa < 10; maa++) { ↓ for( qxr = qxxr[qxxxr=maa=1] ; maa < 10; maa++) {
>>890 qxxxr を1で初期化しちゃ駄目だろ
ワロタw
893 :
デフォルトの名無しさん :2011/10/29(土) 18:01:41.27
C言語で5つの整数の中心値(中央値)を求めるプログラムを作成するという問題を出されたのですが さっぱり分かりません for文の課題なのでfor文を使って頂けるとありがたいです
894 :
デフォルトの名無しさん :2011/10/29(土) 18:02:58.53
大阪府島本町の小学校や中学校は、暴力イジメ学校や。 島本町の学校で暴力やいじめを受け続けて、心も身体も 壊されて廃人同様になってしもうた僕が言うんやから、 まちがいないで。 教師も校長も、暴力やいじめがあっても見て見ぬフリ。 そればかりか、イジメに加担する教師もおった。 誰かがイジメを苦にして自殺しても、「本校にイジメは なかった」と言うて逃げるんやろうなあ。 僕をイジメた生徒や教師の名前をここで書きたいけど、 そんなことしたら殺されて、天王山に埋められるかもしれ へん。それで誰にも発見されへんかったら、永久に行方不明のままや。
>>893 大きい順に並べかえ、真ん中に来た値。
>>1 に書いてあるテンプレを使って依頼して。
896 :
デフォルトの名無しさん :2011/10/29(土) 18:31:45.09
出来れば今日中にで、環境はBCCでOSはWindows 7です。言語はCでC++ではありません
>>896 #include <stdio.h>
#include <stdlib.h>
#define DIMX 5
int compare(const void *a, const void *b) {
return *(int*)a - *(int*)b;
}
int main() {
int d[DIMX], i;
for ( i = 0; i != DIMX; ++i ) {
int n;
printf( "数値を入れなさい:" );
scanf( "%d", &n );
d[i] = n;
}
qsort( d, DIMX, sizeof d[0], compare );
printf( "中央値は%d\n", d[DIMX/2] );
return 0;
}
ところでピストグラムとピスト自転車ってなんか関係があるのかなー。
histogram
900 :
デフォルトの名無しさん :2011/10/29(土) 23:54:50.53
集合で、条件を満たす部分集合の数を数える計算をC言語でやりたいと思ってます。 例えば3個の要素からなる集合{a,b,c}でa,b,cは0〜24の任意の数をとるとします。 また一方で{0+i,3+i}(i<=24,i++)のものをredと定義します。 そして、{a,b,c}の中で部分集合{a,b}{b,c}{c,a}がすべてredであるような{a,b,c}の数はいくつであるか計算する方法を教えてください。
>>1 >・質問は【質問テンプレ】を利用してください。
>>2 以降にあります。
903 :
デフォルトの名無しさん :2011/10/30(日) 01:31:24.00
<<902 ありがとうございます!
>>900 >そして、{a,b,c}の中で部分集合{a,b}{b,c}{c,a}がすべてredであるような{a,b,c}の数はいくつであるか計算する方法を教えてください。
0個だと思うんだが、例えば{a,b,c}の例は何だろう?
redの定義がよくわからない
完全に丸投げだから回答が間違っていても 疑うことすらできないんだな
907 :
デフォルトの名無しさん :2011/10/30(日) 09:30:23.44
5つの数字を並び替えることってどうやってやるんですか? win7でBccでstdio.hでやって欲しいです。それと出来ればfor文で作って頂けると嬉しいです
>>907 algorithmをインクルードして
for(random_shaffle(a[0],a[5]);;);
stdlib.hは駄目なん? 駄目ならfor内で並び変える順番入力してswapとか、 もしくはソート、これも並び替えだし。
[1] 授業単元:基礎C言語 [2] 問題文(含コード&リンク):二つの3×3行列A.Bを入力して、その積と、それぞれの逆行列を出力するプログラムを作れ。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C言語 [4] 期限: 11月1日まで [5] その他の制限: 配列を習ったばかりです、参考書に書いてあったのですが、マクロ?とかいうのは習っていません。 よろしくお願いします。
[1] 授業単元:C++ [2]以下のプログラムにコピーコンストラクタを追加しコンパイルできるようにせよ stack::stack(const stack& s) { //max に s.max をコピー; //data に動的割り当てを行う; //sp に s.sp をコピー; //data の指す動的配列に, s.data の指す動的配列をコピー; } stack plus(stack s1, stack s2){ int sz = s1.size() + s2.size(); stack tmp(sz), s(sz); while(!s2.empty()) {tmp.push(s2.top()); s2.pop();} while(!s1.empty()) {tmp.push(s1.top()); s1.pop();} while(!tmp.empty()) {s.push(tmp.top()); tmp.pop();} return s; } int main(void){ stack s1(5); stack s2(5); stack s(10); s1.push(1); s1.push(3); s1.push(5); s2.push(2); s2.push(4); s2.push(6); s = plus(s1,s2); s1.dump(std::cout); s2.dump(std::cout); s.dump(std::cout); return 0; } [3] [3.1] OS: windows[3.2] コンパイラ名とバージョン: g++[3.3] 言語: C++ [4] 期限: 明日まで [5] その他の制限:
>>912 他にstackクラスのヘッダとかないのか?
>>913 問題文にはこれだけしか書かれていませんでした。
classの定義については過去の授業で習ったためだと思われます。
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク):pbmフォーマット画像ファイルを読み込み、左右を反転させた画像をpbmフォーマット画像ファイルとして保存するプログラムを作成せよ. [3] 環境 [3.1] OS: Windows [3.2] Windows visual studio2008 [3.3] 言語: C [4] 期限: [2011年11月2日16:30まで] [5] その他の制限: テンプレートはwin32コンソールプロジェクトです。 よろしくお願いします。
>>917 おっと、ちょいと間違ってた。9行目を以下のように直しといて
正 cv::Mat h_img;
誤 cv::Mat h;
921 :
デフォルトの名無しさん :2011/10/31(月) 02:17:33.95
[1] 授業単元:アルゴリズム [2] 問題文(含コード&リンク): 単方向線形リスト(ダミーセルなし)で、空リストを生成する関数を作れ。 ただし、slist.hに以下の型定義が書かれているものとする。また、関数の第一引数はstruct slist * 型とする。 struct cell { ________struct cell *next; ________int data; }; struct slist { ________struct cell *head; }; [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: わかりません [3.3] 言語: C [4] 期限: 無期限 [5] その他の制限: 特にありません。リスト構造に関して全く理解ができていません><
#include "slist.h" void create_empty_list(struct slist *L) { L->head = NULL; } int main(void) { struct slist L; create_empty_list(&L); return 0; }
923 :
デフォルトの名無しさん :2011/10/31(月) 03:38:08.75
>>920 #defineを使わないという方法はあるのでしょうか?よくわからないのですが、つかわないとめんどくさいのでしょうか?
>>924 代わりに
const in N = 3;
> マクロ?とかいうのは習っていません。
に対してだと思う。
[1] 授業単元: C言語プログラミング [2] 問題文(含コード&リンク): 1以上の整数値を入力すると、以下の条件を満たすピラミッドをoxを使って表示するピラミッドを出力するプログラムを作成せよ *条件 1以上の奇数が入力された時のみピラミッドを表示し、それ以外の場合は「条件をみたしていないので表示しない」と出力する。 ピラミッドの底辺の長さは入力された数値とする。 *実行例 xxxo xxooo xooooo ooooooo [3] 環境 [3.1] OS: Windows7 [3.2] コンパイラ名とバージョン: visual studio 2010 [3.3] 言語: C [4] 期限: [2011.11.3] [5] その他の制限: 多重のfor文で作成するようです。 よろしくお願いいたします。
>>926 #include <stdio.h>
int main(void)
{
int i, j, n;
scanf("%d", &n);
if(n <= 0 || (n % 2) == 0) {
printf("条件をみたしていないので表示しない\n");
return 0;
}
for(i = 1; i <= n; i += 2) {
for(j = n; j > i; j -= 2) printf("x");
for(j = 0; j < i; j++) printf("o");
printf("\n");
}
return 0;
}
[1] プログラミング [2] 入力された整数が偶数だったら2で割り、奇数ならば3倍してから1足す これを1になるまで繰り返し、かつ過程も出力するプログラムを作れ [3] 環境 [3.1] OS: 7 [3.2] visual studio 2010 [3.3] 言語: c [4] 期限: 11/1 [5] その他の制限: forを必ず用いること 聞けスレから誘導されてきたからマルチではない・・・?
#include <stdio.h> int main(void) { int n; scanf("%d", &n); while(n != 1) { if(n & 1) n = n * 3 + 1; else n >>= 1; printf("%d\n", n); } return 0;
>>929 #include <stdio.h>
int main(void)
{
int n;
if (scanf("%d", &n) != 1) {
puts("input error.");
return 0;
}
for ( ; n != 1; printf("%d\n", n)) {
if (n % 2 == 0) {
n /= 2;
} else {
n = 3 * n + 1;
}
}
return 0;
}
forか #include <stdio.h> int main(void) { int n; scanf("%d", &n); for( ; n != 1; ) { if(n % 2) n = n * 3 + 1; else n /= 2; printf("%d\n", n); } return 0; }
>>929 >これを1になるまで繰り返し、かつ過程も出力するプログラムを作れ
#include <stdio.h>
int main(){
int count = 0, s;
printf("自然数を入力して下さい:");
scanf("%d", &s);
for (; s > 1;) {
count++;
printf("%4d : %4d ", count, s);
if (s % 2 == 0)
printf("÷ 2 = %4d¥n", s /= 2);
else
printf("× 3 + 1 = %4d¥n", s = s * 3 + 1);
}
printf("count = %d¥n", count);
return 0;
}
角田の予想だっけ? これって負数の場合は言及されてないけど-1に至ればいいのかな
936 :
デフォルトの名無しさん :2011/10/31(月) 21:28:53.24
下のように定義される等比級数の第1項から第n項までの和 sum を 求めるプログラムを for文を用いて作成せよ。 a1 = 1.0 a i+1 = a i *0.5 n sum= Σ(ai) i=1 すみません。かなりの時間ねばったんですが、できませんでした。 お願いいたします。
>>935 コラッツ、角谷だね。
1になるまで計算。
>>936 #include <stdio.h>
int main(void)
{
int n;
double gs = 1.0;
scanf("%d", &n);
for( ; n > 1; n--) gs = gs * 0.5 + 1.0;
printf("%f\n", gs);
return 0;
}
939 :
デフォルトの名無しさん :2011/10/31(月) 21:47:16.36
>>938 ありがとうございます!
助かりました。
940 :
デフォルトの名無しさん :2011/11/01(火) 06:45:55.52
[1] 授業単元:アルゴリズム [2] 問題文(含コード&リンク): int型の2次元配列がある。このうち1つの変数に注目したとき、その変数の値と同じ値を持つ変数が 上下左右に何個繋がっているかを返すプログラムを作成せよ。 例えば以下のような配列 int array[8][8];があるとき、 左下の1 (array[7][0])を指定した場合、「1」は5個繋がっていることになる。 その右隣の3 (array[7][1])を指定した場合、「3」は3個繋がっていることになる。 0 2 1 3 0 1 1 2 2 2 2 1 1 2 3 3 3 0 2 1 2 3 2 2 1 1 1 2 1 0 0 1 2 3 3 2 1 0 1 0 2 1 1 2 2 3 0 1 1 1 2 1 2 0 3 1 1 3 3 3 0 0 1 1 [3] 環境 [3.1] OS: Windows7 [3.2] コンパイラ名とバージョン: gcc [3.3] 言語:C [4] 期限: ([2011年11月05日まで]) [5] その他の制限:無し よろしくお願いします。 whileや再起を使って考えてみましたが分かりませんでした。
>>940 見難いなら適度に改行入れてちょ
#include <stdio.h>
int main(void)
{
int array[8][8] = {
{0, 2, 1, 3, 0, 1, 1, 2},
{2, 2, 2, 1, 1, 2, 3, 3},
{3, 0, 2, 1, 2, 3, 2, 2},
{1, 1, 1, 2, 1, 0, 0, 1},
{2, 3, 3, 2, 1, 0, 1, 0},
{2, 1, 1, 2, 2, 3, 0, 1},
{1, 1, 2, 1, 2, 0, 3, 1},
{1, 3, 3, 3, 0, 0, 1, 1}
};
int row, col, count, i;
/* 注目する行・列を指定 */
do {
printf("行(row) 列(col):"); scanf("%d%d", &row, &col);
} while (!((row >= 0 && row < 8) && (col >= 0 && col < 8)));
/* 同じ値の個数を数える */
count = 0;
/* 縦方向に数える */
for (i = 0; i < 8; i++) if (i != row) if (array[i][col] == array[row][col]) count++;
/* 横方向に数える */
for (i = 0; i < 8; i++) if (i != col) if (array[row][i] == array[row][col]) count++;
count++; /* 注目する位置分の加算 */
printf("%d\n", count);
return 0;
}
942 :
デフォルトの名無しさん :2011/11/01(火) 07:24:28.08
>>941 ありがとうございます。
それだと指定した場所から十字にまっすぐ伸ばした部分しか数えられませんよね。
問題では、繋がっている部分を全てカウントしなければなりません。
945 :
941 :2011/11/01(火) 07:40:50.15
ああごめん、問題の勘違い
とりあえず
>>941 の後に書いてた再帰版を先ず修正したんで再帰版を
#include <stdio.h>
#include <string.h>
int rec(int row, int col, int y, int x, int n, int a[8][8]) {
if (y < 0 || y > 7) return 0;
if (x < 0 || x > 7) return 0;
if (a[y][x] != n) return 0;
a[y][x] = -1;
return 1 + rec(row, col, y - 1, x, n, a) +
+ rec(row, col, y + 1, x, n, a) +
+ rec(row, col, y, x - 1, n, a) +
+ rec(row, col, y, x + 1, n, a);
}
int solve(int row, int col, const int array[8][8]) {
int a[8][8];
memcpy(a, array, sizeof(int) * 8 * 8);
return rec(row, col, row, col, array[row][col], a);
}
int main(void) {
int array[8][8] = {
{0, 2, 1, 3, 0, 1, 1, 2}, {2, 2, 2, 1, 1, 2, 3, 3}, {3, 0, 2, 1, 2, 3, 2, 2}, {1, 1, 1, 2, 1, 0, 0, 1}, {2, 3, 3, 2, 1, 0, 1, 0}, {2, 1, 1, 2, 2, 3, 0, 1}, {1, 1, 2, 1, 2, 0, 3, 1}, {1, 3, 3, 3, 0, 0, 1, 1}
};
int row, col;
/* 注目する行・列を指定 */
do {
printf("行(row) 列(col):"); scanf("%d%d", &row, &col);
} while (!((row >= 0 && row < 8) && (col >= 0 && col < 8)));
printf("%d\n", solve(row, col, array));
return 0;
}
rec()のrowとcolって必要か?
947 :
デフォルトの名無しさん :2011/11/01(火) 07:50:03.15
>>944 ,945
ありがとうございます。
コードを読んでもなぜそうなるのかいまいち理解が出来ませんが、正しい実行結果が得られました。
948 :
941 :2011/11/01(火) 07:51:31.15
>>946 Oh...、要らないですね、修正時にミスった
落ち着け
この手の問題は端に余分なデータを追加しとくと、境界をチェックする必要がなくなって楽
ペイントでの塗りつぶしのアルゴリズムだな
[1] 授業単元:計算機アルゴリズムT
[2] 問題文(含コード&リンク):
設問1-1
プログラム例7.2.1を、最小値の要素番号idx(x[idx]が最小値となるようなidx)を求めるように変更した後、
その最小値x[idx]と先頭要素x[0]の2つの要素を入れ替え、配列の全要素を表示するようにしなさい。
この実行の結果、x[0]はx[0],x[1],・・・,x[9]の最小値となります。
プログラム例7.2.1
ttp://www.dotup.org/uploda/www.dotup.org2207772.txt.html 設問1-2
次にx[1],x[2],・・・,x[9]に対し上記設問1-1と同じ操作を行い、次にx[2],x[3],・・・,x[9]に対し上記設問1-1と同じ操作を行い、
・・・,最後にx[8],x[9]に対し上記設問1-1と同じ操作を行うという手順で処理を進めると最終的に配列xを昇順にソーティングできます。
そのようにプログラムを作成しなさい。
設問1-3
上記設問1-2をfor文の2重ループで書きなさい。
[3] 環境
[3.1] OS:Windows vista
[3.2] コンパイラ名とバージョン:visual studio 2008
[3.3] 言語:C
[4] 期限:[2011年11月7日8:00まで]
[5] その他の制限:変数、算術演算、printf、scanf、繰り返し処理while文、do-while文
繰り返し処理for文、繰り返し処理for文による総和の計算、配列変数
条件分岐if文、要素番号idx使用の書換、データの入れ替えは習いました。
宜しくお願いします。
957 :
デフォルトの名無しさん :2011/11/01(火) 16:38:20.39
[1] 授業単元:アルゴリズム [2] 問題文(含コード&リンク):n!を1の位まで正確に計算するプログラムをかけ。ただし、nは0以上10000未満の整数とする。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:不明 [3.3] 言語:C [4] 期限:11/6 [5] その他の制限:多倍長整数使ってほしいです。
#include <stdio.h> int main(void) { int i, j, c, d, n, a[1000] = {1}; scanf("%d", &n); for(i = 2, d = 0; i <= n; i++) { for(j = c = 0; j <= d; j++) { a[j] *= i; a[j] += c; if(a[j] >= 10000) { c = a[j] / 10000; a[j] %= 10000; } else c = 0; } if(c) a[++d] = c; } printf("%d", a[d]); for(i = d - 1; i >= 0; i--) printf("%04d", a[i]); return 0; }
>>958 最大36,000桁くらいになるから、
X a[1000]
O a[10000]
1000未満に見えてたw
[1] 授業単元:画像処理
[2] 問題文(含コード&リンク):画像値の(最大値、最小値)平均値、中央値、最頻値、分散の計算
http://codepad.org/BCJ9fKuQ [3] 環境
[3.1] OS:Mac OS X
[3.2] コンパイラ名とバージョン:pkg-config --cflags opencv --libs opencv 124
[3.3] 言語:c++
[4] 期限:11月3日(木)
[5] その他の制限:コンパイラが分からなかったので全部抜き出してきましたが……(opencv ?)
このように計算したら出るよ、でも結構ですのでよろしくお願いします
>>963 おっと、33-35行で間違いだ
正:
double mode = *( max_element( m.begin(), m.end(),
[]( Dimap::value_type lhs, Dimap::value_type rhs ){ return lhs.second < rhs.second; }
) ).first;
965 :
デフォルトの名無しさん :2011/11/02(水) 00:07:35.17
>>965 訂正
参考にさせていただきます→コピペさせていただきます
まあ問題中のソースがCなのにC++11のlambda構文が参考になるとは思えないがw
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク):文字列st の中に含まれる文字ch の個数(含まれて いなければ0 とする)を返す関数 int str_chnum(const char st[], int ch) を作成せよ.以下の実行例のように,関数の動作を確認 例.文字列を入力してください:Koukadai 検索する文字を入力してください:a その文字は2 個含まれています。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2011年11月4日 11:00
969 :
デフォルトの名無しさん :2011/11/02(水) 17:05:04.58
5を入力するまで数字を入力し 入力されたら その数列の最大値と最小値の場所を入れ替えて左から表示するプログラムを教えてください
>>968 #include <stdio.h>
#include <string.h>
int str_chnum(const char *st,int ch){
int index=0, count=0;
char *p = 0;
do{
p = strchr(&st[index],ch);
}while(p&&(count++,index=p-st+1));return count;
}
int main(void){char buf1[100];int buf2;
printf("文字列を入力してください:");fgets(buf1,100,stdin);putchar('\n');
printf("検索する文字を入力してください");buf2 = getc(stdin);putchar('\n');
printf("その文字は%d個含まれています。\n",str_chnum(buf1,buf2));
}
//
>>969 #include<stdio.h>
main(){
while(1){
printf(" ハ,,ハ \n");
printf(" ( ゚ω゚ ) お断りします \n");
printf(" / \ \n");
printf(" ((⊂ ) ノ\つ)) \n");
printf(" (_⌒ヽ \n");
printf(" ヽ ヘ } \n");
printf(" ε≡Ξ ノノ `J \n");
}
}
974 :
デフォルトの名無しさん :2011/11/03(木) 01:39:05.19
C言語でロシア農民の掛け算のプログラムを教えてくれ ください
int russian_multiply_method1( int lhs, int rhs ) { int answer = 0; while ( lhs > 0 ) { if ( lhs & 1 ) { answer += rhs; } lhs >>= 1; rhs <<= 1; } return answer; } int russian_multiply_method2( int lhs, int rhs ) { int head = ( lhs & 1 ? rhs : 0 ); while ( lhs > 1 ) { lhs >>= 1; rhs <<= 1; } return head + rhs; }
なんかの冗談?
[1] 授業単元:基礎C [2] 問題文(含コード&リンク):ガウスの消去法を使って、 n元連立一次方程式をとくプログラミングを作成しろ [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:)C言語 [4] 期限: 11月4日 [5] その他の制限: 配列をすこし習いました、#math.hやマクロなどは使わないいただきたいです
[1] 授業単元:基礎C [2] 問題文(含コード&リンク):以下の実行例のように,姓と名を入力すると,2 つの 間にスペースを入れて連結した文字列を生成するプロ グラムを作成せよ.姓と名はそれぞれ配列family[] と first[] に,連結した文字列は配列fullname[] に格納 すること.入力できる姓と名の長さはそれぞれ30 字ま でとする。 例. Family name: Kouka First name: Dai Kouka Dai [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:)C言語 [4] 期限: 11月4日 [5] その他の制限
[1] 授業単元:基礎C [2] 問題文(含コード&リンク):下のAAを縦20横30くらいのマップ上でこいつを キーボードのAを押せばジャンプして地面まで落下、Sを押せばマップ上を右へ、 Dを押せば左へ行くプログラムを作成せよ。 ↓AA (^ω^) ( ) l l [3] 環境 [3.1] OS: Windows7 [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2011年11月7日 11:00
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):ダイクストラ法のプログラミングを作成し、最短経路を求めなさい
http://ideone.com/db5A8 自分で書いてみたのですが、途中までしか最短経路が求められません
[3] 環境
[3.1] OS: Windows 7
[3.2] コンパイラ名とバージョン:gcc-4.3.4
[3.3] 言語: C++
[4] 期限: 2011年11月6日
よろしくお願いします。
984 :
デフォルトの名無しさん :2011/11/04(金) 00:28:53.00
[1] 授業単元:C++ [2] 問題文(含コード&リンク):文字を一文字入力して、 入力された文字が、英字の小文字であるか、 英字の大文字であるか、数字であるか、それ以外の文字であるか 判別して、判別結果を表示するプログラムを作成せよ。 [3.1] OS: Windows 7 [3.2] コンパイラ名とバージョン:gcc-4.3.4 [3.3] 言語: C++ [4] 期限: 2011年11月5日 よろしくお願いします
985 :
デフォルトの名無しさん :2011/11/04(金) 00:30:17.94
[1] 授業単元:C++ [2] 問題文(含コード&リンク):文字を一文字入力して、入力文字が a-z の範囲のときのみ、 文字コードが一個隣のアルファベットを表示すプログラムを作成せよ。 ただし、zを入力した場合は a を表示し、a-z以外の文字を入力した 場合は入力した文字をそのまま表示すること。 例: aを入力 → b を出力 bを入力 → c を出力 zを入力 → a を出力 3を入力 → 3 を出力 $を入力 → $ を出力 Aを入力 → A を出力 [3.1] OS: Windows 7 [3.2] コンパイラ名とバージョン:gcc-4.3.4 [3.3] 言語: C++ [4] 期限: 2011年11月5日 すみません、こちらも同時にお願いします よろしくお願いします
>>984 #include <iostream>
#include <cctype>
int main()
{
char c;
if (std::cin >> c) {
if (islower(c)) {
std::cout << "英小文字です" << std::endl;
} else if (isupper(c)) {
std::cout << "英大文字です" << std::endl;
} else if (isdigit(c)) {
std::cout << "数字です" << std::endl;
} else {
std::cout << "英字でも数字でもありません" << std::endl;
}
}
}
>>985 #include <iostream>
#include <cctype>
int main()
{
char c;
if (std::cin >> c) {
if (islower(c)) {
c = 'a' + (c - 'a' + 1) % ('z' - 'a' + 1);
}
std::cout << c << std::endl;
}
}
988 :
デフォルトの名無しさん :2011/11/04(金) 01:28:43.26
>>987 すみません、書き込み不足がありました。
include<studio.h>
int main()
固定です
次スレ立てます
C++では、a〜zが連続していることは保障されているのでしょうか?
0から1000までの整数を英語で出力する という課題があるのですが まったくわからないので教えてください
996 :
デフォルトの名無しさん :2011/11/04(金) 10:56:37.13
>>994 もう一度スレの頭から読み返せ
std::cout << "zero\n"
std::cout << "one\n"
...
std::cout << "a thousand" << std::endl;
みたいなのが返ってくるぞ
>>992 不安なら
std::string lower = "abcdefghijklmnopqrstuvwxyz";
std::cin >> inputChar;
if (lower.find(inputChar) != string::npos) {
// 小文字ですよ
} else ....
ってやればいいんじゃね。
std::tolower使っていいしな <cctype>も積極的に使おう
std::うんたらかんたら ってクラスの関数宣言じゃないの? 誰か教えて
定義だった
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。