1 :
名無しさん@そうだ選挙に行こう :
2005/09/10(土) 22:09:01 あなたが解けないC/C++の宿題を片づけます
――【注意点】―――――――――――――――――――――――――
・質問は必ず【質問テンプレ】に従ってください。
・問題文は、解いてもらう方にわかりやすいように全文を書きましょう。
・計算問題は必ず数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。解いてもらっている方に失礼です。
―――――――――――――――――――――――――――――――
【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):
[3] 環境
[3.1] OS: Windows/Linux/等々
[3.2] コンパイラ名とバージョン: gcc 2.9 VC 6.0等
[3.3] 言語: C/C++/どちらでも可 のいずれか
[4] 期限: [yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか (「できるだけ早く」は不可)
[5] その他の制限: どこまで習っているか、標準ライブラリは使ってはいけない等々
【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm 【前スレ】
49代目:
http://pc8.2ch.net/test/read.cgi/tech/1123661447/
質問いいですか? C言語の宿題で、フローチャートと同じプログラムを組んでこいと 言われたのですが、その中に 「〜コードをキーとして、〜ファイルを読む」というのが□(処理ですよね) で囲んでありました。 C言語で「」の処理を1文で出来るものがありましたら、教えてください。 自分ではwhileで繰り返す方法以外分かりませんでした。
>>1 のテンプレに従ってください。また、問題は全文書くよう、お願いします。
〜コードとは何ぞや?
>>7 申し訳ない。
[1] 授業単元: C演習
[2] 問題文(含コード&リンク): ごめんなさい。文は上記の通りです。
渡されたプリントにフローチャートが書いてあって、その通りに作ってこいと。
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン:VC6.0
言語: C
[4] 期限: 今月の12日まで
[5] その他の制限: 特になし。とにかくその通り動けばいいとのこと。
>>9 ごめんなさい。書き方が悪かったです。
出庫先商品別売り上げ月報ファイルというのを作るんですが、
その渡されたフローチャートに
「T_出庫先コードをキーとして、出庫先マスタファイルを読む」と書いてありました。
コードは数字です。
配列
フローチャートとファイルフォーマット、使える関数がわからんと、どうしようもないが。 たぶん1文では無理。 一応↓も1文だけど。 while (fscanf(fp ... ) == ...) if (code == ...) val1 = ... , val2 = ... ;
6です。 みなさんありがとうございました。 while文を使ってがんばってみようかと思います。 遅くに本当にありがとうございます。
16 :
名無しさん@そうだ選挙に行こう :2005/09/10(土) 23:24:17
...データベース使えっちゅーことでは?
C/C++言語スレよりも「教え方スレ」のほうが有益な気が… 既に何回か話題になっているが。
どのスレのことか、分からなかったです。できたら、誘導してください。>17
19 :
名無しさん@そうだ選挙に行こう :2005/09/11(日) 13:40:25
よろしくお願いします。 shell32.dllを書き換える方法がわかりません。 環境は、WindowsXP Home Editionを使用しています。 WFP(システムファイル保護)の為、shell32.dllを書き換える事が出来ません。 この方法さえわかれば、なんとか出来るのですが... 取り敢えず、試した方法として、 レジストリのRunOnceにブチ込んで、起動時に書き換える >> 既に使用中の為失敗 C:/WINDOWS/dllcache/以下を削除してキャッシュを削除後、ファイル入れ替え >> 入れ替えは成功しますが、"システムファイルに変更がありました""Windows Install CD"をドライブに挿入して下さい、等のメッセージが、つらつらと。 そのダイアログを表示させずに入れ替えてしまう方法は無いものでしょうか。 どうぞ、よろしくお願いします。
ありません。
>19 これって宿題? というか、プログラミングの内容じゃないし、激しくスレ違いな予感。 聞くならWindows板へどうぞ。 ここのWindows関連スレや質問スレでも答えてくれるかもしれないけど。 まあ、何にしてもシステムファイルを無闇にいじるものじゃない。
22 :
名無しさん@そうだ選挙に行こう :2005/09/11(日) 13:51:09
えっと一言 >1 乙
23 :
19 :2005/09/11(日) 14:01:33
いや...セーフモードで起動して、手動でファイルを書き換える事は可能なんです。 そこを、C++を使って、セーフモードで起動しなくとも、 せめて、ダイアログのボタンを押すだけ、その後、再起動一発でシステムファイルを書き換える術を知りたくて。
どうも先生の出題ミスのような気がするから もう一度先生に問題を聞き直した方がいいよ。
どう考えても宿題じゃないし、スレ違いな気がするのだが。
>>23 C++でやるなら、Win32 APIを使って
・ダイアログのボタンを押す → FindWindow()+PostMessage()
・再起動(ry → ExitWindowEx()
できるかどうかは知らん。
他に思いつくのはキーボードマクロ+バッチファイル(orWSH)くらい。
後は該当スレへどうぞ。ここには来なくていいから。
26 :
名無しさん@そうだ選挙に行こう :2005/09/11(日) 15:13:59
[1] 授業単元:windowsプログラミング [2] 問題文(含コード&リンク):windowsで動くゲームを作る [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: BCC [3.3] 言語: C++しか知らないでつ [4] 期限:今日中 [5] その他の制限: テトリスを作るぐらいの知能はあります。 しかし、おいらは【迷路】を作りたいと思っています スタートからゴールまで適当なキャラが十字キーで 移動できて、時間制限をつくり、最後にランキング的 なものが表示されるような迷路にしたいと思います。 できれば、高クオリティ高品質なものを・・・・
>>all ネタはスルーで。
>>26 時間無いならテトリスでもいいじゃん。
クオリティ高いのを作りたいって気持ちはわかるが、
それと納期を天秤にかけてよく考えてみ。
つか、GUIを1から作って今日中は無理。
レベルに合わせて作ってみよう。ってことで、テトリス、アップローダーに置いといて。 今日中って具体的な時間がわからんが、暇なんで朝までにはできる・・・かな。
30 :
26 :2005/09/11(日) 15:21:59
とりあえず期限に間に合えばいいです
>>28 そこをなんとかw
描画、入力、ロジック、をうまく切り離して作れば、 テトリスも迷路も大差ないんだがな。
33 :
26 :2005/09/11(日) 15:28:48
34 :
26 :2005/09/11(日) 15:35:05
>>32 そのサイトのシンプルダンジョンみたいなのがいいですね・・・
これってソースはないんでしょうか?
>>34 まさかそのソースをそのまま提出する気じゃないよな・・・?w
36 :
26 :2005/09/11(日) 15:40:14
と、とんでもない(汗 参考ですよ、あくまでも参考。
39 :
26 :2005/09/11(日) 16:13:28
>>37 ありがとうござます〜
これ見て自分で頑張ってみます。
あつかましいですがソースは何とかならないでしょうか?
漏れが作った迷路ソフトでよければソースメールするからメアド晒してよ。 ただし、N88-BASIC(86)とかDISK-BASICとか、精々C w/Motif しかないけど。
42 :
26 :2005/09/11(日) 16:23:07
>>41 N88-BASIC(86)とかDISK-BASICっていう言語ですか?
GUIかC++でないといけないんですが・・・
>26
>>41 は釣りだからやめとけw
つか、ゆとり世代は2chでのメアド晒しに危機感を感じないのか・・・
44 :
26 :2005/09/11(日) 16:31:28
ステアドならいいかなと思っていた頃が私にもありました。
>>26 あのな、「GUIかC++か」、っていうお前の一文はな、
「windowsかコンピュータか」、っていうのと同義なの。。
46 :
26 :2005/09/11(日) 16:46:37
前スレの952=963はいないのかな?
質問投げても返答無いし。
>>26 ここに書き込んでる暇があったらソース書けよw
>テトリス いちおう、望んでるレベルが分かったのでなんとか。 Windowに文字を書くだけでいい、ほぼコンソールなプログラムだな。 ハイスコアうんぬんがあるんで、ちょっと手間が・・・ああ・・・メッセージボックスで代用でいいか。 まあ、朝までにやっとくよ。
49 :
49代目952改定版 :2005/09/11(日) 18:31:08
[1] 授業単元: プログラミング宿題 [2] 問題文(含コード&リンク): 下記に記載 [3] 環境 [3.1] OS: Windows2000 [3.2] コンパイラ名とバージョン: VC 6.0 [3.3] 言語: C言語でお願いします。 [4] 期限: [2005年09月11日23:59ぐらいまで] [5] その他の制限: C言語2ヶ月ぐらい勉強、下記に記載 出力フォーマットからしたの1回目と2回目を出力してほしいです 選挙は行って来ました! $以外は固定出力文字。 構造体の変数にはなにかしらの値が入ってます。(可変) $を構造体のコメント文の変数にあわせて出力してください。 みなさんよろしくお願いします。
こうして、残りわずかな作業時間を、無駄に消費してゆくわけだな。
輝かしき前スレ952の依頼履歴
952 名前:名無しさん@そうだ選挙に行こう[] 投稿日:2005/09/11(日) 10:09:17
[1] 授業単元: プログラミング宿題
[2] 問題文(含コード&リンク): 下記に記載
[3] 環境
[3.1] OS: Windows2000
[3.2] コンパイラ名とバージョン: VC 6.0
[3.3] 言語: C言語でお願いします。
[4] 期限: [2005年09月11日17:00ぐらいまで]
[5] その他の制限: C言語2ヶ月ぐらい勉強、下記に記載
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/912.txt 963 名前:952[] 投稿日:2005/09/11(日) 12:50:39
みなさんすみません、構造体の変数の中にはなんかしら値がはいり(可変)、
コメント文に$3とか$4とか$5の書いてある変数にあわせて出力する。
あとお約束を知らなくてすみません。今度は返します!!
これでわかりますか?
頼むから前スレの
>>967 と
>>968 を読んでくれ
・・・2ヶ月・・・7月からプログラミングか、職業訓練校かなんかかなぁ。 選挙にいける年齢なのだから、もうちょっと考えような。
ネタをきっちりと遊んでるオマエらステキ。
>>49 頼むから↓に反応してくれ。
特に968の方。
−−− ここから −−−−−−−−−−−−
967 名前:名無しさん@そうだ選挙に行こう 投稿日:2005/09/11(日) 13:00
>>963 煽りじゃなくってさっぱり分からん
もう時間ないんだろ?もちついて何すればいいのか教えてくれ
課題の問題文丸ごとコピペの方がいいかもな
968 名前:名無しさん@そうだ選挙に行こう 投稿日:2005/09/11(日) 13:08
はぁ・・・俺はESP対策班ではないのだが。
>>963 とりあえずいくつか質問
1) このプログラムは何をするプログラム?
2) 最終的にprintfの羅列に合わせて結果を出力するようにすればOK?
3) $3とか$4とかの内容はどうやって取得or計算する?
4) 中でCSVファイルを読み込むみたいだけど、その内容は?
5) C言語なのに構造体メンバにCString(C++クラス)が入っててもOK?
つか、
>>967 の言う通り問題をそのまま貼った方が早いかも。
−−− ここまで −−−−−−−−−−−−
ここでの解決をあきらめたんじゃね?
58 :
662 :2005/09/11(日) 21:11:51
[1] 授業単元:C演習 [2] 問題文(含コード&リンク):文字列と削除文字列を入力し、文字列の中から削除文字列を削除。 使用する標準関数:strncmp()、strcpy()、strlen等。 [3] 環境 [3.1]OS:Windows [3.2]コンパイラ名とバージョン:BCC [3.3]言語:C [4] 期限:明日の午前頃まで。 [5] その他の制限: お願いします。
>58 ・インターフェース(関数プロトタイプ) ・文字列"ABCBA"、削除文字列"AB"の時の動作 ・文字列"ABABA"、削除文字列"ABA"の時の動作 を教えてくれ。
>59 はぁ? ABCBA から AB 消し -> CBA だろが? そんな事より、 >58 よ ABCBCA から BC を消すとき AA とすんの?
61 :
662 :2005/09/11(日) 21:25:49
ABBCCAみたいなときは?
まあ感情的になるなよ。 特定の文字を削除ということもあるからな。それかどうか確認したかったわけだ。 文字列とは書いてあるが、えすぱーせにゃならんからな。
CAAABBBC から AB のときは CC にしていいのか?
strncmpがあるから、文字での削除ってのは、ないと思うよん。
オマエら作ってやれよ。
67 :
662 :2005/09/11(日) 21:38:50
>>64 CAAABBBCからABのときはCAABBCとなるようにお願いします。
載っている実行の例です。
文字列:ABCDEFAABCDABC
削除文字列:ABC
結果:DEFAD
結構難しいなー strncmpを使うってことは文字列の単純比較で検索するってことだろ でもそうするとstrcpyの使い場所が無いなー
後から問題付け足すなボケ 例があるなら何故最初から出さない?あぁ?
できたけど載せない
>>68 別に必ず使えというわけではないのではないだろうか。
荒れとるなー。 概要だが。 char *from, *to, *skipstr; size_t len; while (*from) { if (strncmp(from, skipstr, len) == ) { from += len; } else { *to++ = *from++; } あ、たしかにないな・・・strcpy()
こんな感じかな? #include<string.h> char*strremove(char*str,char*remove_str){ size_t remove_str_len = strlen(remove_str); char*i=str,*j=str; if(remove_str_len)do while(!strncmp(j,remove_str,remove_str_len))j += remove_str_len; while(*i++=*j++); return str; } #include<stdio.h> int main(){ char source[80],remove[80]; printf("文字列:");scanf("%s",source); printf("削除文字列:");scanf("%s",remove); printf("結果:%s",strremove(source,remove)); }
ただし、円周率は3とする・・・みたいなもんか>71
全然違うだろ。
77 :
49代目952改定版 :2005/09/11(日) 22:04:51
>>56 1) このプログラムは何をするプログラム?
ただ構造体の変数をつかって$に合わせて表示するだけのプログラムです
2) 最終的にprintfの羅列に合わせて結果を出力するようにすればOK?
OKです
3) $3とか$4とかの内容はどうやって取得or計算する?
$には値が入ってると思ってください。あとで適当に数値を入れます。
4) 中でCSVファイルを読み込むみたいだけど、その内容は?
これも適当に値が入ってます。
5) C言語なのに構造体メンバにCString(C++クラス)が入っててもOK?
Cって言ってたんですけどならべくCでってことなのでC++を使ってもいいです。
78 :
49代目952改定版 :2005/09/11(日) 22:09:31
数年前はバッグに入ってた記憶がある
去年か一昨年くらいだったか、うちの文化祭に来てた希ガス
84 :
デフォルトの名無しさん :2005/09/11(日) 22:24:07
これ参考で入力順と逆に表示するプログラムお願いします。 #include <stdio.h> #include <stdlib.h> #include <string.h> struct MJlist { char name [20]; int homerun; struct MJlist *pointer; }; int main (void) { struct MJlist *head = NULL, *tail = NULL, *temp; char name[256]; int homer; for (; ; ) { printf("batter?:"); scanf("%255s", name); if (!strcmp(name, "end")) break; printf("homer?:"); scanf("%d", &homer); temp = (struct MJlist*)malloc(sizeof(struct MJlist)); strcpy(temp->name, name); temp->homerun = homer; temp->pointer = NULL; if (head != NULL) tail->pointer = temp; else head = temp; tail = temp; } temp = head; while (temp != NULL) { printf("batter:%s, homer:%d\n", temp->name, temp->homerun); temp = temp->pointer; } while (head != NULL) { temp = head; head = head->pointer; free(temp); } return 0; }
ああっ!今わかったぞ!
>>77 はESPを利用したプログラミングか何かを研究してる期間のエージェントで
わざとエスパーにしか解けないような出題をして本物がかかってくるのを待ち構えt(うわなにをs
>>77 3番と4番、適当と答えられても困る。
はっきりさせてこい。
>>84 コレで良い?
#include <stdio.h> #include <stdlib.h> #include <string.h>
struct MJlist {
char name [20]; int homerun;
struct MJlist *pointer;};
int main (void) {
struct MJlist *head = NULL, *temp;
char name[256]; int homer;
for (; ; ) {
printf("batter?:"); scanf("%255s", name); if (!strcmp(name, "end")) break;
printf("homer?:"); scanf("%d", &homer);
temp = (struct MJlist*)malloc(sizeof(struct MJlist));
strcpy(temp->name, name);
temp->homerun = homer; temp->pointer = head;
head = temp;}
temp = head;
while (temp != NULL) {
printf("batter:%s, homer:%d\n", temp->name, temp->homerun);
temp = temp->pointer;}
while (head != NULL) {
temp = head; head = head->pointer;
free(temp);}
return 0; }
89 :
77 :2005/09/11(日) 22:42:16
90 :
26 :2005/09/11(日) 22:43:33
>>48 遅くなりましたが、ありがとうございます
宜しくお願いしますw
>>77 SaveQCResult()だけ書いてほしいってことか?
92 :
77 :2005/09/11(日) 22:59:59
CSVにデータがどんなふうに入ってるかとか、どんな値が異常値なのかとか 最終的に何でtrue/falseの判定をして値を返すのかとかが わからなくてもこの手のプログラムって作れるもんなの?
94 :
77 :2005/09/11(日) 23:51:41
これ以上なにも資料がないんでどうすればいいのかわからないっす・・・ ただ出力ファーマットの出力するプログラムを作って来いって言われました。 自分が考えたのただprintfで固定を作成して、、 あとは変数を$に合わせて出力しようと思いました。。
>>94 寝ぼけてるんで違ってるかも知れないが、ざっと見た感じじゃ
printfで出力するときに、アロー演算子使って構造体の内容参照して
表示させていけばいいだけじゃないのか?
処理といえるようなのはせいぜいlocaltimeでtime_tから変換するぐらいだとおもうが
96 :
26 :2005/09/12(月) 06:23:58
ん? すぐに返事がなかったのと、具体的な時間指定がなかったから、ネタだと思ってやってないよ。
98 :
デフォルトの名無しさん :2005/09/12(月) 07:41:13
Σ(´д`)
>>96 まあ、自業自得だな。
そこそこ技術力があって、なおかつアルゴリズムのヒントが出てるのに
ソースが出てくることを期待して楽をしようとしたのがそもそもの間違い。
・・・と、ここまで書いて気付いたが、
別に
>>96 はやってないとは書いてないので、
もし、一晩かけて自分でちゃんとプログラム組んでだならエライ。
100 :
77 :2005/09/12(月) 12:46:32
>>95 サンクス
小数点の桁数に構造体の変数って使えるのですか?
printf 書式指定子とかでぐぐれ
102 :
77 :2005/09/12(月) 14:00:04
例えばこんな感じですか? %5.QCFUNCRESULT.nDarkAveFltPointf
>>102 ('A`)
お前は本当にprintfを使ったことがあるのかと小一時間ほど問い詰めない
105 :
77 :2005/09/12(月) 14:34:24
printfは使ったことあるけど、書式が可変なんて使ったことがない。103
106 :
103 :2005/09/12(月) 14:52:35
書式指定を使ったことが無いって…
2ヶ月の間何を勉強してきたのかわからんな…。
とりあえずprintfの使い方について調べろ。ググれば例が腐るほど出てくる。
で、自分で書式指定子(%9.2f等)をいじって、出力フォーマットに見合うように調整。
このとき、一気に全部やろうとせず、1つずつ確実にやっていくことをオススメする。
>>104 ┬┴┬┴|∀゚) フフリ
>>94 > だた……って言われました
その唯一言われたことを何処にも書かずに
どうやって理解してもらうつもりだったんだよ
>>103-104 ワロタw
学校で2ヶ月くらいだと何もしてないのと同じくらいだぞ。
実際、始めは全て書いてあるプログラムを入力して動かすくらいで
書いてある意味まで細かく教えたりしないからなぁ…。
半年は#include <stdio.h> /*←おまじない*/で通すくらいだし。
つい最近になってprintf("Hello World!!");でヒャッホー言ってたってとこだろ
#include<iostream> using namespace std; int main() { cout<<" ∧_∧ "<<endl; cout<<" (´∀`)< ぬるぽ"<<endl; return 0; } ちょっとギャグでやってみたら、かわいかった・・・ ごめん、昼間からこんな馬鹿なことやって・・。
[1] 授業単元:C++ [2] 問題文(含コード&リンク): 引数起動。testという引数以外では終了しtestという引数で正常起動するプログラムと ボタンを押すとtestという引数で上記のプログラムを起動させるプログラムを作りなさい。 使用する標準関数:規制無し。 [3] 環境 [3.1]OS:Windows [3.2]コンパイラ名とバージョン:VC++ [3.3]言語:C [4] 期限:無期限 [5] その他の制限:無し。 引数起動がぐぐっても良く解らないです。
>>110 その教官は「testという引数」のフレーズが大好きだな
112 :
デフォルトの名無しさん :2005/09/12(月) 17:32:11
113 :
デフォルトの名無しさん :2005/09/12(月) 17:47:30
int main(int argc,char* argv[]){ if(argc==1){ printf("引数を指定して下さい。\n"); return 0; } if(argc==2){ if(strcmp(argv[1],"test")!=0) return 0; } if(argc>=3){ printf("引数が多すぎます。\n"); return 0; } }
>>112 ____
/∵∴∵∴\
/∵∴∵∴∵∴\
/∵∴∴,(・)(・)∴|
|∵∵/ ○ \|
|∵ / 三 | 三 | / ̄ ̄ ̄ ̄ ̄
|∵ | __|__ | < うるせー馬鹿!
\| \_/ / \_____
\____/
#include <stdio.h> int main(int argc, char **argv) { if(argc == 1 || agrv[1] != "test") {return -1;} return 0; } ごめん上一行しかわかんね・・・
116 :
115 :2005/09/12(月) 17:53:29
>>112 上から
p = tree_search(root, data);
if( data == p->data ) break;
if( data < p->data ) p = p->left;
else p = p->right;
return p;
>>115 文字列へのポインタどうしを比較してどーするよ。
120 :
110 :2005/09/12(月) 18:59:40
int APIENTRY WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { if(strcmp(lpCmdLine,"test")!=0){ MessageBox(NULL , lpCmdLine , TEXT("起動エラー") , MB_ICONINFORMATION); return 0;// 正常起動失敗 } // 以下、正常動作 } これでいけました。 後はコマンドラインを指定して起動できるボタンプログラムですが全く分かりませんorz
C言語ってゆーよりはWindowsプログラミングなので、そっち系で聞くか調べたほうがいいかもね。 ボタンを配置したダイアログボックスで簡易ランチャーっていうサンプルはけっこうあるはず。
122 :
デフォルトの名無しさん :2005/09/12(月) 19:03:04
[1] C言語 [2] 問題1 a=10、b=20とし、a,bの値を入れ替えて表示しなさい。 問題2 文字型配列 m[5][20]を用意し、これを5人分の名字で初期化し、 さらに、文字型配列 n[5][10]を用意し、名前で初期化しそれらを表示しなさい。 問題3 問題2で作成した名字の入った文字型配列 m[5][20]に、名前の入った n[5][10]を 連結コピーして表示しなさい。(strcat()を使用する) [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン:VC 6.0 [3.3] 言語: C [4] 期限:明日まで [5]その他の制限:二次元配列まで習ってます。問題多くてすみません。お願いします
適当にインデントしといて [1] #include<stdio.h> int main(){int a=10,b=20;a+=b;b=a-b;a-=b;printf("%d %d",a,b);} [2] #include<stdio.h> int main(){char m[5][20]={"a","b","c","d","e"},n[5][20]={"A","B","C","D","E"}; int i;for(i=0;i<5;++i)printf("%s %s\n",m[i],n[i]);} [3] #include<stdio.h> #include<string.h> int main(){char m[5][20]={"a","b","c","d","e"},n[5][20]={"A","B","C","D","E"}; int i;for(i=0;i<5;++i)printf("%s\n",strcat(m[i],n[i]));}
125 :
112 :2005/09/12(月) 19:18:36
>ボタンを配置したダイアログボックスで簡易ランチャーっていうサンプル 興味あったので探しているが見つからない。 サンプルURL知っていたら教えてください。
>>122 全角スペースはいってるから気をつけてね
int main()
{
{
int a = 10; int b = 20; int c;
printf("--- Q1 --------\n");/* Q1 */
printf("a=%d, b=%d\n", a, b);
c = a; a = b; b = c;
printf("a=%d, b=%d\n", a, b);
}
{
char m[5][20] = {"Toyota","Suzuki","Honda","Matsuda","HarddGay" };
char n[5][10] = {"Tarou","Jirou","Saburou","Shirou","Foooooo!" };
int i;
printf("--- Q2 --------\n");/* Q2 */
for(i=0; i<5; i++){ printf("i: %s %s\n", m[i], n[i]); }
printf("--- Q3 --------\n");/* Q3 */
for(i=0; i<5; i++){ strcat(m[i], n[i]); printf("i: %s\n", m[i]);}
}
return 0;
}
>>123 それは「プログラム」の間違いか?それとも「汚名挽回という言葉」の間違いか?
129 :
127 :2005/09/12(月) 19:23:38
って、だいぶ前に回答出てたのね・・・ リロードして無かったよorz
131 :
デフォルトの名無しさん :2005/09/12(月) 21:13:16
解りやすいソース有難う(´・ω・`)モットベンキョウシマス
あんた誰だ
あんたこそ誰だ 俺は誰だ
僕が君で 君が僕で・・・えっ!? ドキドキ
137 :
77 :2005/09/13(火) 11:01:19
まだできてなかったのか・・・
139 :
77 :2005/09/13(火) 11:19:37
問題の意味を間違えてました。
えーっと・・・問題の意味を間違えてました。 の一文だけだと、過去のレスをずーっとチェックして、間違い探しをしないといけないのだけれど・・・。 どこをどう間違って、間違いを正すとどうなるか教えていただけませんか?
141 :
77 :2005/09/13(火) 11:39:24
いろいろホントすみませんが、一回自分でやってから、 間違いがあったらそこについてみなさんに聞いてみます。
>>140 過去のスレを読んでいた身としては
>>77 にはそれを説明する能力は無いと思われます。
144 :
デフォルトの名無しさん :2005/09/13(火) 16:10:48
[1] 授業単元:C言語 [2] 問題文: キーボードから数値を読み込み、その数に応じて「+-」のパターン を表示するプログラムを作成しなさい。(例:7を入力すると、+-+-+-+) [3] 環境 [3.1] OS:Fedora CORE [3.2] 判らないですorz [3.3] 言語:C [4] 期限:本日17:00頃まで [5]その他制限:ネスト辺りまで習いました。お願いしますorz
なんか
>>143 がしつけするママみたいw
つーか
>>77 はガキじゃねぇんだからそれくらいわかるよ、なっ!
>>144 #include <stdio.h>
int main()
{
char pm[]="+-";
int i, len;
scanf("%d", &len);
for (i=0 ; i<len ; i++)
{
printf("%c", pm[i%2]);
}
}
>>144 #include <stdio.h>
int main()
{
int i;
int tmp;
char str[256];
scanf("%d", &tmp);
for(i = 0; i < tmp; i++) str[i] = (i%2)? '-': '+';
str[tmp] = '\0';
printf(str);
return 0;
}
148 :
デフォルトの名無しさん :2005/09/13(火) 16:28:34
149 :
147 :2005/09/13(火) 16:29:15
わかったわかったw。・・・でも車はカムリだろ?
[1] 授業単元: C言語講座 [2] 問題文: 縦横100×100で8ビットのBMPファイルを読みこみ、1ピクセルあたりの画素値を CSVファイルにBMPの画像のように同じ様に書きこめ。 [3] 環境 [3.1] OS: Windows2000 [3.2] コンパイラ名とバージョン: VC++ [3.3] 言語: C言語 [4] 期限: [無期限] [5] その他の制限: BMPのヘッダーを構造体に入れてから画素値を取り出しなさい。また2次元配列を使いなさい。 問題文が変で説明しづらく、半端ですがfopenからヘッダーを構造体に入れる途中までのソースもあげておきます。 よろしくお願いします。 void main(void){ FILE *fp; fp = fopen("circle.bmp", "rb"); bmpHead bmpHead1; // ヘッダー情報を構造体へ fread(&bmpHead1.bfType, sizeof(bfType), 1, fp); fread(&bmpHead1.bfSize, sizeof(bfSize), 1, fp); fread(&bmpHead1.bfReserved1, sizeof(bfReserved1), 1, fp); fread(&bmpHead1.bfReserved2, sizeof(bfReserved2), 1, fp); fread(&bmpHead1.bfOffBits, sizeof(bfOffBits), 1, fp); fread(&bmpHead1.biSize, sizeof(biSize), 1, fp); fread(&bmpHead1.biWidth, sizeof(biWidth), 1, fp); fread(&bmpHead1.biHeight, sizeof(biHeight), 1, fp); fread(&bmpHead1.biPlanes, sizeof(biPlanes), 1, fp); fread(&bmpHead1.biBitCount, sizeof(biBitCount), 1, fp); fread(&bmpHead1.biCompression, sizeof(biCompression), 1, fp); fread(&bmpHead1.biSizeImage, sizeof(biSizeImage), 1, fp); fread(&bmpHead1.biXPelsPerMeter, sizeof(biXPelsPerMeter), 1, fp); fread(&bmpHead1.biYPelsPerMeter, sizeof(biYPelsPerMeter), 1, fp); fread(&bmpHead1.biClrUsed, sizeof(biClrUsed), 1, fp); fread(&bmpHead1.biClrImportant, sizeof(biClrImportant), 1, fp);
[2] 5人の学生の3教科(国語・数学・英語)の点数を2次元配列を 用いて処理するプログラムを作成せよ。 (1):科目別の最高点を求める (2):3教科の平均点を求める [3] 1.Windows 2.bcc 3.C Cを勉強しています。2次元配列の使い方がわかりません。 御教授お願いします。
>152 8ビットビットマップ・・・(遠い目) BI_RGBとBI_RLE8、トップダウンとボトムアップ・・・1行を4バイトのアライメントに・・・ あ・・・あはは。けっこう時間かかりそうなんでパス。 >153 あ・・・あはは・・・。独学かあ・・・教科書変えるといいかもよー。
[1] 授業単元:アルゴリズム [2] 問題文(含コード&リンク):配列moji_rを「char moji_r[]="Today I went to church."; と初期化した場合アルファベット1文字を入力し、moji_rの中にその文字が何回現れるかをカウントし、 表示させるプログラムです。 [3] 環境 [3.1] OS: Windows [3.2] BorlandFree [3.3] 言語: C [4] 期限: [2005年09月15日12:30まで] 最近charを習ったばかりでFor文でリピートさせることはわかるのですがそれ以上がわかりません。 よろしくお願いいたします。
int count = 0; char moji_r[]="Today I went to church."; char *s; scanf("%c", &c); for (s = moji_r; *s; s++) if (*s == c) count++; printf("%d\n", count);
#include<stdio.h> int main(){ char moji_r[]="Today I went to church.",*s=moji_r,ch; int count[256]={0}; for(;*s;++s)++count[*s&255]; scanf(" %c",&ch); printf("%d\n",count[ch&255]); }
先にヒストグラム作るのか・・・ふむふむ>157
>>153 #include <stdio.h>
#include <string.h>
int main()
{
int man, kamoku, tensu[5][3], heikin[5], saikou[3];
char kamokumei[3][5]={"国語","数学","英語"};
memset (saikou, 0, sizeof saikou);
memset (heikin, 0, sizeof heikin);
for (man=0 ; man<5 ; man++)
{
for (kamoku=0 ; kamoku<3 ; kamoku++)
{
printf("%d人目、%s=", man+1, kamokumei[kamoku]);
scanf("%d", &tensu[man][kamoku]);
heikin[man] += tensu[man][kamoku];
if (saikou[kamoku]<tensu[man][kamoku])
{
saikou[kamoku]=tensu[man][kamoku];
}
}
}
for (man=0 ; man<5 ; man++)
{
printf("%d人目の平均点は%d\n", man+1, heikin[man]);
}
for (kamoku=0 ; kamoku<3 ; kamoku++)
{
printf("%sの最高点は%d\n", kamokumei[kamoku], saikou[kamoku]);
}
return 0;
}
>>159 大変参考になりました。
ありがとうございます!
161 :
155 :2005/09/14(水) 08:48:42
156 157ありがとうございます<(_ _*)> ポインタを利用しない方法はありませんでしょうか?
>>161 ありません
moji_rへの操作がsizeof位しか使えなくなるからです。
>>161 char *moji_r = "Today I went to church.";
char ch;
int count;
int i;
scanf( "%c", &ch );
for ( i=0, count=0; moji_r[i]; i++ ) if ( moji_r[i] == ch ) count++;
printf( "%d\n", count );
[1]C言語 [2]符号無し整数xのposビット目を、1にした値を返す関数set、0にした値を返す関数reset、 反転した値に返す関数inverseを作成せよ。 [3]1.Windows 2.BCC 3.C言語 さっぱりわかりません。どうぞよろしくおねがいします。
符号なし整数だと基本的には3種類あるわけだが
167 :
165 :2005/09/14(水) 19:33:16
>>165 unsigned int set(unsigned int x, int pos)
{
return x | 1 << pos;
}
unsigned int reset(unsigned int x, int pos)
{
return x & ~(1 << pos);
}
unsigned int inverse(unsigned int x, int pos)
{
return x ^ 1 << pos;
}
>>167 intは符号無しでない罠。
めんどーだからビットフィールド利用しててきとーにかたずけたらぁ
170 :
165 :2005/09/14(水) 19:43:11
>>168 すみません、unsigned int型でした。
わかりやすいコードありがとうございます。
理解できました。
>>169 調べてみましたが構造体?まだ習っていないのでよくわかりませんでした。
精進します。ありがとうございました。
171 :
デフォルトの名無しさん :2005/09/14(水) 20:52:23
n個の要素を持つ配列において、 そのn個のすべての組み合わせの 配列を返すプログラムってどんなですか? 例えば配列の要素が(1,2,3)なら、「すべての組み合わせ」としては [1][2][3][1,2][2,3][1,3][1,2,3]です。 アルゴリズムだけでもよいので教えてください。
>>171 std::uniqueとstd::next_permutationをうまく使って
>>172 std::uniqueって必要あるか?
>>171 できたよー。
#include <iostream>
#include <vector>
#include <iterator>
#include <algorithm>
void get_combi(std::vector<std::vector<int> > &ans,
std::vector<int> tmp, int *begin, int *end){
int index = tmp.size();
tmp.push_back(0);
for(int *p = begin; p < end ; ++p)
{
tmp[index] = *p;
ans.push_back(tmp);
get_combi(ans, tmp, p + 1, end);
}
}
int main(){
int a[] = {1,2,3,4};
std::vector<std::vector<int> > ans;
get_combi(ans, std::vector<int>(), a, a+4);
for(std::vector<std::vector<int> >::iterator it = ans.begin();
it != ans.end(); ++it)
{
std::copy(it->begin(), it->end(), std::ostream_iterator<int>(std::cout, " "));
std::cout << std::endl;
}
return 0;
}
・・・ビットのオンオフに帰結しそうだな・・・。
ケータイから書いていたら意味不明になってしまった。 typedef struct Nd { int v; Nd* prev; } Nd; void printNd(Nd* nd, int last) { printf("[%d", last); while(nd) printf(",%d", ndー>v); puts("]"); } void rec(int* a, int m, int n, Nd* prev) { Nd nd = {a[m], prev}; printNd(prev, a[m]); for(m++; m < n; m++) rec(a, m, n, nd); } int main(void) { int array[] = {...}; int i, ln = sizeof(array) / sizeof(int); for(int i=0; i < ln; i++) rec(array, i, ln, NULL); puts("\n"); return 0; }
>>177 なるほど
#include <iostream>
#include <list>
#include <algorithm>
#include <iterator>
#include <functional>
typedef std::list<unsigned int> CombList;
CombList all_comb(size_t first, size_t last) {
if (first == last) return CombList(1, 0);
CombList res = all_comb(first + 1, last), res2;
std::transform(res.begin(), res.end(), std::back_inserter(res2), bind2nd(plus<unsigned int>(), 1 << first));
res.merge(res2);
return res;
}
int main() {
int numbers[] = {1, 2, 3, 4};
int length = sizeof(numbers)/sizeof(numbers[0]);
CombList s = all_comb(0, length);
for (CombList::iterator it = s.begin(); it != s.end(); ++it) {
for (int i = 0; i < length; i++)
if (*it & (1<<i))
std::cout << " " << numbers[i];
std::cout << std::endl;
}
}
180 :
179 :2005/09/14(水) 22:30:05
素直に1から(1<<length) - 1までインクリメントでいいじゃん。あははははは
なおしました。これであってますかね?自身ないw #include <stdio.h> typedef struct Nd Nd; typedef struct Nd { int v; Nd* prev; } Nd; void printNd(Nd* nd, int last) { printf("[%d", last); while(nd) { printf(",%d", nd->v); nd = nd->prev; } puts("]"); } void rec(int* a, int m, int n, Nd* prev) { Nd nd = {a[m], prev}; printNd(prev, a[m]); for(m++; m < n; m++) rec(a, m, n, &nd); } void main(void) { int array[] = {...}; int i, ln = sizeof(array) / sizeof(int); for(i=0; i < ln; i++) rec(array, i, ln, NULL); puts("\n"); }
typedef struct _Nd { int v; struct _Nd* prev; } Nd; こうしたら、通った。
ビットのオンオフってのは、そのつもりで言った(^^;;>180
無茶苦茶な書き方をしてみる #include <stdio.h> typedef struct List List; struct List { int value; List *next; }; void print_list(List * lis) { for (; lis != NULL; lis = lis->next) printf(" %d", lis->value); puts(""); } void print_combi(int * data, int len, List * tail) { if (len <= 0) { print_list(tail); } else { List head; print_combi(data, len - 1, tail); head.value = data[len-1], head.next = tail; print_combi(data, len - 1, &head); } } int main(void) { int data[] = {1,2,3,4}; print_combi(data, sizeof(data)/sizeof(data[0]), NULL); return 0; }
少なくとも入力チェックやCSVファイル云々より面白いからな。 逆にGUIとかになると面倒くさくなるし。これぐらいが丁度いい。
俺も俺も。表示するだけだけど。 #include <stdio.h> #include <stdint.h> void print(const int a[], const uint8_t size, const uint32_t bits) { uint32_t mask, i = 0; for(mask = 1U << (size-1) ; mask; mask >>= 1, ++i) if( mask & bits ) printf("%d ", a[i]); printf("\n"); } void comb(int a[], uint8_t size, uint32_t mask, uint32_t bits) { if( mask == 0) print(a, size, bits); else { comb(a, size, mask >> 1, bits | mask); comb(a, size, mask >> 1, bits & ~mask); } } main() { int a[] = {1,2,3,4,5}; uint32_t size = sizeof(a)/sizeof(*a); comb(a, size, 1U << (size-1), 0); }
188 :
187 :2005/09/14(水) 23:48:56
こっちのがいいかな void print(const int a[], const uint8_t size, uint32_t bits) { if( bits != 0 ) { uint32_t i; for(i = 0; i < size && bits; ++i, bits >>= 1) if(bits & 1U) printf("%d ", a[i]); printf("\n"); } }
>>171 は出題者が知恵者だなぁ。
宿題の回答を読んで楽しむ姿が想像できる様だ
まあ・・・宿題でわないと思うが(^^;; おもろい出題だわな。 Cだと二次元の長さが一定でない配列をどう表現するか・・・ てな話も入ってくるんでprintだけになってしまうのが残念だが。
何か今更な気がするけども
>>171 のを俺もやって見た。
表示しかしないし順番も滅茶苦茶だが。ビット演算とか知らないから他の人の見てもよくわからんorz
void printlist (int list[], int szlist) {
int i, j, k, temp;
for(k = 0; k < szlist; k++) {
for(i = k; i < szlist; i++) {
for(j = i; j < szlist; j++) {
printf("%d ", list[j]);
}
printf("\n");
}
temp = list[szlist - 1];
list[szlist - 1] = list[k];
list[k] = temp;
}
}
void main() {
int test[] = {1, 2, 3};
printlist(test, sizeof(test) / sizeof(int));
}
192 :
191 :2005/09/15(木) 01:14:51
訂正orz void printlist (int list[], int szlist) { int i, j, k, temp; for(k = 0; k < szlist; k++) { for(i = k; i < szlist; i++) { for(j = k; j < i + 1; j++) { printf("%d ", list[j]); } printf("\n"); } temp = list[0]; list[0] = list[k]; list[k] = temp; } }
あーあー貼るソース間違えたorz もう駄目。回線切ってつってくる(´;ω;`)
>>171 アルゴリズムだけっていうことで次を参考にして関数に仕上げて下さい。
#include <stdio.h>
#include <stdlib.h>
void power(int *p, char *s){
char *buf;
if(*p==-1){printf("%s\n",s);return;}
power(p+1,s);
buf=(char *)malloc((sizeof(char))*(strlen(s)+2));
sprintf(buf,"%d %s",*p,s);
power(p+1,buf);
}
main(){
int x[]={3,2,1,-1};
power(x,"");
}
>>195 >そいつはすごい、どこまでも胡散臭くて、安っぽい宝の地図
まで読んだ。
俺は >「こいつはすごい財宝のありかなんだ」信じきった彼はとうとうその真偽を まで読んだ
198 :
195 :2005/09/15(木) 21:27:29
199 :
155 :2005/09/16(金) 00:59:42
162.163ありがとうございます。 あれから自分で考えたのですが #include<stdio.h> void main(void) { char moji_r[]="Yesterday I went to church,it was a splendid experience."; char search; int i,count=0; printf("調べる文字を半角1文字を入力==>"); scanf("%d",search); for(i=0;moji_r[i]!='\0';i++){ if(moji_r[i]==search){ count++; } } printf("Yesterday I went to church,it was a splendid experience.の中に\n"); printf("%cは、%d個入っています",search,count); } という方法で実行したのですがうまくいきません。 コンパイラはエラーがでないのですが実行すると何を入力しても下記のようになってしまします。 C:\>test 調べる文字を半角1文字を入力==>w Yesterday I went to church,it was a splendid experience.の中に は、0個入ってます となってしまいます。どこが悪いのでしょうか?
scanf("%d",search); ↓ scanf("%c", search); な。
まちがった。すまん。 scanf("%c", &search); な。
強いて言えば宿題というわけではないのですが char*型の文字列をchar*型の配列に代入して表示させたいのですがどうすればいいんでしょうか //---------------- int i,len; char * mojiretu = "hogehoge"; char * mojihairetu[64]; //mojiretuを1文字ずつmojihairetu[]に代入 len = strlen(mojiretu); for(i=0;i<len;i++){ printf("%s", mojihairetu[i]); } //---------------- ・出力予想 hogehoge char型の配列になら代入できたけどchar*型となるとうまくいかないようだ 1ヶ月間やってそこそこ分かってきたぜ、と思ってたらこんなところで引っかかるとは・・・
>>202 以下は全部同じ
char * mojiretu = "hogehoge";
char mojiretu[] = "hogehoge";
char mojiretu[] = {'h', 'o', 'g', 'e', 'h', 'o', 'g', 'e'};
「char*型の文字列」ではなく「char型の文字列」な。
char * mojihairetu[64] というのはポインタの配列。
この中に入るのchar型のデータを指すポインタ(char*)。
204 :
203 :2005/09/16(金) 10:46:17
× char mojiretu[] = {'h', 'o', 'g', 'e', 'h', 'o', 'g', 'e'}; ○ char mojiretu[] = {'h', 'o', 'g', 'e', 'h', 'o', 'g', 'e', '\0'}; だったorz
すまん、ソースで直入力じゃなくてmojihairetuに代入をする話らしいんだ どんな時に使うのかは経験が浅くて分からないが・・・ 取りあえず流石にこれは通らなかった mojihairetu = mojiretu;
>>202 おまいのやりたいことを実現するにはこうするしかない。
for (i = 0; i < len; i ++)
{
mojihairetu[i] = (char *) malloc(2);
mojihairetu[i][0] = mojiretu[i];
mojihairetu[i][1] = '\0';
}
/* freeもしてね */
そしてここは宿題スレなので
>>1 にしたがってテンプレ使ってください。
サンクス、希望通りの動作をしたよ そして手間を取らせてすまんかった。 この問題は宿題と言うか課題と言うか先輩の命令と言うかだったんだ・・・
>>205 int i,len;
char * mojiretu = "hogehoge";
char mojihairetu[64];
len = strlen( mojiretu );
for ( i=0; i<len; i++ ) mojihairetu[i] = mojiretu[i];
for ( i=0; i<len; i++ ) printf( "%c", mojihairetu[i] );
文字列末尾のnulコードはターミネーターである
って理解している?
つーか、素直に判らないと先輩とやらに言えばいいものを……
怖くていえないんだもん( ";ω;" );
>>208 > 文字列末尾のnulコードはターミネーターである
> って理解している?
といいながら自分は入れてないのなw
ヌル文字入れればprintf(mojihairetu)とかprintf("%s", mojihairetu)で済むよ
長さ n の配列の部分列(連続する部分) の中で,部分列を合計がある数 x に最も近いものを求めよ. O(n^2) 未満で解けませんか? 例ですが, [-10,31,40] から 合計が 15 に最も近い部分列を求める場合 まず部分列は以下の6つになり, [-10], [31], [40], [-10,31], [31,40], [-10,31,40] これらの合計の中で最も 15 に近いものは -10, 31, 40, 21, 71, 61 の中から選択するので 21 つまり,(要素 1〜2) が答えになります. よろしくおねがいします.
アルゴリズムの質問か。しかもテンプレに沿っていない。 サヨウナラ
>>213 ,214
ごめんなさい
[1] C演習
[2]
>>212 [3] 環境
[3.1] OS: Linux
[3.2] gcc 2.9
[3.3] 言語: C
[4] 期限: 2005/09/30
[5] その他の制限: ありません
>>202 for(int i = 0; i < strlen(mojiretu); i++) {
sprintf(mojihairetu[i], "%c", mojiretu[i]);
}
じゃ駄目なの?試してないから動くかわかんないけど。
>>216 mojihairetu[i]のポインタに領域が割り当てられていない。
ああ、なるほど。動的な二次元配列なのか。 C++ならstd::vector <std::string> mojihairetu; とかで済むのにねぇ。
>>203 嘘を教えるな
> char * mojiretu = "hogehoge";
は、ポインタ
> char mojiretu[] = "hogehoge";
は、char配列
>>203 はアフォだが、初心者はそこまで気にしなくてもいいでしょ別に
>>219 そのポインタ(配列)を使う時に、実際に何か差があるのですか?
同じ結果を出すための別解と解釈してよいでしょうか
覚えたての知識をちょっとひけらかしてみたくなった。今は反省している。
>>221 > char * mojiretu = "hogehoge";
こっちはスコープ内に確保される領域はポインタ1つ分で
"hogehoge"はリテラル文字列であり、プログラム起動時から終了時まで寿命がある
外部変数として
char hogehoge[9]={'h','o','g','e','h','o','g','e','\0'};
があり、
char *mojiretu;
mojiretu = hogehoge;
としているようなもの
> char mojiretu[] = "hogehoge";
こっちはスコープ内に確保される領域はchar9つ分でその初期値を設定しているだけ
char mojiretu[9];
mojiretu[0]='h';mojiretu[1]='o';mojiretu[2]='g';mojiretu[3]='e';
mojiretu[4]='h';mojiretu[5]='o';mojiretu[6]='g';mojiretu[7]='e';mojiretu[8]='\0';
としているようなもの
インクリメント出来るか出来ないかの違いだと思ってた
>>215 それってO(n^2)未満にすることも宿題の条件なの?
部分集合は2^n-1個あるのにその条件は無謀な気がするが
また面白そうな問題が。 一旦ソートするとかどう?
部分集合ではなく部分列なので、単純に「i 番目から始まる部分列で一番近いもの」 を求めるのは O(n)で、 i を1 からまで動かすのでO(n^2)
分割統治でも結局は全組み合わせを走査しないとならないからO(n^2)の壁は打ち破れんな。
やっぱり
>>227 の言う通り何らかのソートが必要かも。
元の配列の「順番」はキープしつつ、「和」にあたる部分を間接的にソートか・・・難しいな。
たぶんこれ宿題とかじゃないだろw
230 :
226 :2005/09/16(金) 16:37:42
1)準備 開始位置、終了位置、和のテーブルを作る O(n^2) テーブルを和をキーにソート O(n log n) テーブルの和の重複チェック O(n) 2)検索 バイナリサーチ O(log n)
ケータイで書いてたら意味不明になってしまった。 間違ってなかったらO(n^2/2)位かな? void search(int* a, int ln, int t, int startEnd[2]) { int m, n, M, N; int unko; startEnd[0]=startEnd[0]=-1; for(M=0, N=ln; M < N;) { int sum; for(m=M, sum=0; m < N; m++) { int sAbs; sum+=a[m]; if(unko > abs((sAbs = (sum - t)))) { unko = sAbs; startEnd[0]=M; startEnd[1]=m; }} N--; for(n=N, sum=0; n > M; n--) { int sAbs; sum+=a[n]; if(unko > abs((sAbs = (sum - t)))) { unko = sAbs; startEnd[0]=N; startEnd[1]=n; }} M++; if(unko == t) break;}}
O(n log n)を思いついた。検証よろ。 1.左端からi番目の要素までの和からなる列を作る。元が -10, 31, 40 なら、 0, -10, 21, 61 になる。ここから二数を選んで、右から左を引くと対応する部分列の和になる。O(n)。 2.この列を覚えておいて、ソートしたコピーを作る。O(n log n)。 3.できたコピーを双方向リストと平衡木の二重構造に入れる。O(n)。 この平衡木は、削除O(log n)、探索O(log n)で、「あるキーに最も近い要素」の探索もO(log n) 4.覚えておいた列の左から順にポインタpが動く間、次のことをする。O(n log n) i: 平衡木から*pを削除。O(log n) ii: *pとの差が問題の数に最も近くなる要素を平衡木から探索。O(log n)
235 :
234 :2005/09/16(金) 17:50:10
つか、平衡木の実装とかやってられんのだが。 もっといいアルゴリズムきぼん。
>>234 うーん、なんか着眼点よさげかも。
ちょっと後半がよくわからんな。
双方向リストと平衡木の二重構造とやらのノードの構造体だけでも書いてみてよ。
>>236 struct k
{
int value;
struct k *next; /* 次に大きいノードを指す */
struct k *prev;
struct k *left; /* 左部分木を指す */
struct k *right;
};
>>234 おお、凄い。確かに実装するのは辛そうだがw
>>234 素晴らしい。ただ、右から左を引かなければならないので、
そこはうまく工夫して「右のもので最も求める値に近くなるもの」が検索
できないと駄目かも。
ただ、これが O(log n) でできれば、ここの候補を馬鹿サーチしても
O(nlogn)だね。
うまく、「自分より右でかつ値に近い」というのを順序でできれば
解決だね。
>>239 誤って左と比べないように4-iで順番に削除してるんだが、だめか?
241 :
239 :2005/09/16(金) 18:48:52
>>240 書いたあと気づいたけど、それで大丈夫みたい。ごめんなさい。
すばらしい。
>>235 平衡木は2色木誰かやってなかったっけ。
>>234 ソートしたコピーと双方向リストは何に使うの?
245 :
234 :2005/09/16(金) 20:55:23
246 :
234 :2005/09/16(金) 21:01:20
>>244 ソートしたコピーは特に使わない。ソートしながら木を構築できるならそれでもよし。
双方向リストは、「キーにもっとも近い要素」の探索を対数時間でできるようにするための仕組み。
通常の木の探索で「キー以上の値を持つ要素のうち最小のもの」を見つけた後、
リストを一つ前に辿ってそれも検討する。
>>243 >削除する時は今回は2度と挿入しないんだからrebalanceする必要ないしな
気づかなかった…
考えてみればリストは双方向である必要はないし、木は平衡木である必要はないな。
>>246 > 木は平衡木である必要はないな。
いや、平衡木だからこそlog nで検索できたんでは内科?
まあ何はともあれ、
・和で配列を作る
・平衡木を使う
の2点はカッコヨカッタ
漏れの脳では二分探索木で、値に最も近い数を求めるってのが出来ん。 はふぅ。
249 :
215 :2005/09/17(土) 06:42:51
皆様ありがとうございます.なんとか理解できたつもりです.
1. 累積させた配列を作成してソートする.
2. その配列を左から順に見ていき(a[i], 1 ≦ i ≦ n),右の残りの配列の中でa[i] との差が最も x に近い値を求める.
2.1 その際に二分探索で求める.
ということでしょうか.
これなら,確かに n * log n です.
これは思いつきません.ソートと二分探索が効いてますね.
二分探索は探索して見付からなかったときに最終位置と
左右どちらかで近い方を選択することでできるのかな..
>>234 累積配列の最初に,0 があるおかげで,a[2] 〜 a[n] じゃなくて a[1] 〜 a[n]
の部分列が求められるのか.こういうの苦手です.
>>245 便利な関数がいっぱいあるのだと勉強になりました.
partial_sum とかそのまんまのがあるんですね.
find_nearest がむずい…(´・ω・ :;.. 頑張ります.
感心してばかりでした.ありがとうございました.
>>248 レフトポインタとライトポンタが重なったら、その左右の値を調べればいいんじゃないの?
random access iteratorでないとlowerbound()やupperbound()が 使えないのは、二分探索が使えないからだよね。
254 :
234 :2005/09/17(土) 18:19:27
>>249 >1. 累積させた配列を作成してソートする.
>2. その配列を左から順に見ていき(a[i], 1 ≦ i ≦ n),右の残りの配列の中でa[i] との差が最も x に近い値を求める.
>2.1 その際に二分探索で求める.
微妙に違う気がする。左から見ていくのはソートする前の配列ね。
>find_nearest がむずい…(´・ω・ :;.. 頑張ります.
>>245 のfind_nearestは間違ってた。
結果は正しいし、計算量も問題ないけど、これだとリストの価値がない。
つまり、そもそもリストは要らなかった。(thx
>>252 )
ついでに、
>>253 も俺です。
最大部分和(?)だったかな、 これ配列を1度だけ見ていくだけで求まるロジックがあるので そいつを応用すればO(n)だと思う ちょっと探してみるよ
256 :
デフォルトの名無しさん :2005/09/17(土) 23:54:51
気のせいならいいのだが。 4要素{A,B,C,D}に対して、 生成される部分列は{A,B,C,D, A+B,B+C,C+D, A+B+C,B+C+D, A+B+C+D} つまり、n要素に対する部分列の個数はn(n+1)/2である。 A,B,C,Dの何れも正負の符号を取るのならば、 部分列に新たな要素を加算した総和が元に比べ単純増加するとは限らない。 (A+B)>(A+B+C)という可能性もある。 結局、全ての部分列の要素について総和を求める必要がある。 これは数列の要素数nが2以上の場合になりたち、この問題の計算量は最小でもO(n^2)である。 のではまかろーに?
257 :
256 :2005/09/18(日) 00:02:39
0xff get失敗です…(´з`)
258 :
256 :2005/09/18(日) 00:03:27
ぐはっ、、、2連でsage忘れた、、、申し訳ない。
>>256 漏れもそこ気になった。要素が全て正ならば成り立つけれど、
負も含まれてしまうと問題になる希ガス
Cでコンパイラー開発できる人いますか?
います
263 :
59 :2005/09/18(日) 00:17:06
コンパイラー開発って、色々な概念があるんですか? それとも、基本的にはある概念にそって開発するんですか?
何を何にコンパイルするかによってぜんぜん違う。
>>256 気のせいだ。
木の中には
{ 0, A, A+B, A+B+C, A+B+C, A+B+C+D }...(1)
が小さい方から順に入っている
この木からxに最も近いもの,x+Aに最も近いもの,...,x+A+B+C+Dに最も近いもの
を探している。そうやって擬似的に
{ B, B+C, B+C+D } ...(2)
{ C, C+D }
:
という集合を作り出してその中からxに近いものを探索しているわけだね
(1)からx+Aに近いものを探索するのと(2)からxに近いものを探索するのは同じことだ(ただし
>>239-240 参照)
また、すべての要素から一定の値が引かれてるから順序関係は変わらない
故に、その探索はそれぞれ O(log n)ですむ(全部調べなくていい)
それをn回やってその中で1番xに近いものはすべての組み合わせの中でもxに一番近い
だからオーダーはO(n log n)だ。と
267 :
255 :2005/09/18(日) 00:43:53
とりあえずできたみたいなんだけど... int tbl[]={-10,31,40}; #define TBL_SIZE (sizeof(tbl)/sizeof(int)) #define KEY 15 int main(void) { int i,max,sum,maxst,maxed,st,ed; max=sum=tbl[0]; maxst=maxed=st=ed=0; for(i=1; i<TBL_SIZE; ++i){ if(sum!=0){ sum+=tbl[i]; ed=i;} else{ sum=tbl[i]; st=ed=i;} if(abs(sum-KEY)<abs(max-KEY)){ max=sum; maxst=st; maxed=ed;} } printf("\n%d <- [%d]-[%d]\n", max,maxst,maxed); return 0; }
あれ? find {x+A+B+C} from sort{0,A,A+B,A+B+C,A+B+C+D}をしてしまったら AやA+Bが選択される危険性があるような…
269 :
256 :2005/09/18(日) 00:56:27
>> { B, B+C, B+C+D } ...(2) >> { C, C+D } を生成しているつもりで、 { -A , 0 , B , B+C , B+C+D} { -A-B, -A, 0 , C , C+D} を生成している罠。 しかもソートされているので、不要な要素(0から左)が消せないのでは?
270 :
256 :2005/09/18(日) 01:03:11
単に削除する順序を記述した表を作成すればいいのかな? そうすればO(1)でできそう。
271 :
デフォルトの名無しさん :2005/09/18(日) 01:05:32
C言語のプログラムで次の数列を表示するのですが、 やり方を教えてください! 1 1 1 1 2 4 8 16 3 9 27 81 4 16 64 256 宜しくお願いします!
>>271 #include <stdio.h>
int main()
{
int i,j,num;
for (i=1 ; i<5 ; i++)
{
num=i;
for (j=0 ; j<4 ; j++)
{
printf("%d ", num);
num*=i;
}
printf("\n");
}
return 0;
}
どこが原因かわからないが、、、
>>253 で
arr={10,30,-5}で15となる組合検索(解- 0 1 2)を実行しても(0 2)が蛙。
>>267 int tbl[]={-10,40,31};
>>267 > int data[] = {-10, 31, 40, -30, 8, -9, 3, 10, -67, 45}; /* => 13:[6, 7] */
278 :
デフォルトの名無しさん :2005/09/18(日) 01:48:36
>>273 ありがとうございます!
せっかく解いてもらったのに申し訳無いのですが
自力で出来ました。
また、分からない時はぜひお願いします!!
C、c++どちらでもいいのですが 最尤系列推定のプログラムおしえてください。
>>267 それじゃ駄目だろう。
区切られた部分列が解の部分列の一部になっている場合はどうする?
>>281 配列の要素数、或いは終端条件を提示してください。
>>281 配列のデータ入力方法も、だな。
コマンドラインから入力するのか、ソースにベタ書きでいいのか。
>>281 配列の要素数は?
確か先頭へのポインタとして渡された場合、ヌル終端されてるとか
負数があるとかの決まりがないと、関数側じゃ要素数は取得できないと思うが
以下、要素数をnとしたときのソース@脳内コンパイラ
double Average(int *p)
{
unsigned long diff=0;
int i;
for (i=1;i<n;i++)
diff += p[i] - p[i-1];
return (double)p[0] + ((double)diff)/n;
}
>>284 訂正
誤)diff += p[i] - p[i-1];
正)diff += p[i] - p[0];
>>281 適当に仕様を想像した結果
#include<stdio.h>
double Average(int *p){
double d=0.0;
int i;
for(i=0;p[i]!=-1;i++){
d+=(double)p[i];
}
if(i==0)return -1.0;
return d/i;
}
int main(){
int a[11],i;
for(i=0;i<10;i++){
printf("整数[%d]==>",i);
scanf("%d",&a[i]);
if(a[i]==-1)break;
}
a[i]=-1;
printf("\n平均:%.1f",Average(a));
return 0;
}
実行画面とやらを眺めてて思ったが、ひょっとして 10個若しくは要素にー1が現れるまでが条件か・・・? つーか、問題はちゃんと全部書けと散々言ってるだろう それで問題全部なら、出題した奴の頭に蛆でも沸いてるんじゃねーの
>>287 条件はそういうことだと思います。
問題はこれで全部です。
配列のデータのaveをAverageのプロトで返せってことだろ。 配列の[9]には-1が格納されるべき。
ごめん言いたかったのは、 もし-1が要素の終了条件であるならば、実行画面1の[9]には-1が格納される筈。 ってこと
>>289 実行例1には[9]にも90と入ってるぞ
とりあえず287に書いた条件で手直ししてみた
例によって相変わらずの脳内gccだから違ってるかも知れない(特にキャスト周辺)
ちゃんと動くか確認してみてくれ
double Average(int *p)
{
unsigned long diff=0;
int i;
for (i=1;i<10 && p[i] != -1;i++)
diff += p[i] - p[i-1];
return (double)p[0] + ((double)diff)/((double)i);
}
>unsigned long ダメだと思う 素直にdoubleにしとけよw
別に問題の中では正の値なんだしunsignedでも構わないだろ。 まぁ減点対象だろうが
>292 -1が入ってたら打ち切り、なんだろ? 負数が無いと仮定した方がしぜんジャマイカ
>>294 ちゃんと>291を読めよ。
負の数を代入する可能性があるのは見えないか?
>295 見えない つーかあったとしても-1だけ例外なのはおかしいし
>>296 そうではなくて、p[i] - p[i - 1] も見えないのか?
ということだよ>293
291を書いた物ですが、寝ぼけてたせいかとんでもない大チョンボやらかしてた・・・('A`) unsignedじゃダメじゃんか・・・longだよlong_| ̄|○
しかも、p[i]-p[i-1]じゃなかった、p[i]-p[0]だよ・・・ もう寝る('A`)ノシ
>>301 >>1 >・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
ソース見ただけで適当に答えてみる。 printf("文字列を入力してください:"); fgets(st, 100, stdin); printf("調べたい文字を入力してください:"); ch = getchar();
文字を%dで出力してるけど、たぶん%cの間違い
あとは
>>303 の修正で良いと思う(or scanf("%s ",st))
305 :
304 :2005/09/19(月) 13:56:17
ミスった ×(or scanf("%s ",st)) ○(or scanf(" %c",&ch))
>>269 >{ -A , 0 , B , B+C , B+C+D}
>{ -A-B, -A, 0 , C , C+D} を生成している罠。
実際生成していないんだが、ソース読んでるか?
>>305 それだと、int chも変更せんとな。
scanf がstdinの最後の\nを読み残してるんだろうなぁ。
多分
>>303 で正解。
[1] 授業単元: C言語講座 [2] 問題文: 縦横100×100で8ビット256色のBMPファイルを読みこみ、1ピクセルあたりの画素値を CSVファイルにBMPの画像のように同じ様に書きこめ。 [3] 環境 [3.1] OS: Windows2000 [3.2] コンパイラ名とバージョン: VC++ [3.3] 言語: C言語 [4] 期限: [無期限] [5] その他の制限: BMPのヘッダーを構造体に入れてから画素値を取り出しなさい。また2次元配列を使いなさい。 以前同じ質問をしたのですがいまだに解き方がわからないので再度質問させてください。 freadで一行分のピクセルデータから1バイトずつ抜き出していく方法を考えているのですが、これをどう0〜256の 画素値にするのかがわかりません。 ビットマップのピクセルデータをどう扱うか、また1ピクセルごとにどうファイルから読んで二次元配列に入れていくのか という根本的なところが理解できていないのが解らない原因ですが、どうかご教授ください。
>>306 ソースを見直してようやく分かった。
sums[i]要素を削除するremove_lt()で処理してるんだな。
まあ、このスレに助け求めている人間があんなコードを渡されても…という感は否めないがw
>>309 そもそも主がどこまでやったかわからん。晒せ。
ttp://www.kk.iij4u.or.jp/~kondo/bmp/index.html 参考になればいいが、
8bitなら2^8=256個、赤、青、緑の色情報を格納する構造体を宣言する。
(構造体でなくとも、long int型でもいい)
画像からカラーパレット情報を読み出したら、上の構造体に保存しておく。
画像からイメージ情報を読み出したら、カラーパレット番号に対する色情報を出力する。
(long int型を使ったら、表示するときに色成分を分ける)
こんな感じか...
とりあえずカラーパレット一覧をCVSにするプログラムを作るのが先か。
Concurrent Versions System
313 :
309 :2005/09/20(火) 00:58:29
ほとんど出来ていないんです。ちょっと間を空けてしまったせいもあるのですが、 画像ファイルからのデータの抜き出しという考え方が頭の中でイメージできなくて。 テキストファイルだと一文字や一列づつ読み込むと言うのは解るのですが、ビットマップは1マスずつの扱い方が どうも理解が出来ないんです。 Cを初めて全然たっていないんですがポインタと配列の関係でもつまづくくらい覚えが悪いんです。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
ポインタとか配列の考えが必要なので、なんとも・・・。 ところで・・・・C言語講座じゃないでしょ? ホントのところは、なんなのさ。
318 :
314 :2005/09/20(火) 01:49:49
エラー文を晴らせていただきます In file included from makecodebook.c:8: common.inc.c: In function `colorrgb2coloryuv': common.inc.c:188: parse error before `unsigned' common.inc.c:192: `coloryuv' undeclared (first use in this function) common.inc.c:192: (Each undeclared identifier is reported only once common.inc.c:192: for each function it appears in.) よろしくお願いいたします
>>314 コンパイルオプションに-std=c99を追加すればいいんじゃないかと、推測してみる。
俺はc89でしか書かんが。
関数冒頭で変数宣言してないからだな。defineのコメントアウトで エラーのあるなしが変わるのはコンパイル前処理で#ifdefが無くなるから。
>>319 ありがとうございます。
gcc ファイル名 -lm -std=c99
ということでしょうか?
>>320 > 関数冒頭で変数宣言してないからだな。defineのコメントアウトで
> エラーのあるなしが変わるのはコンパイル前処理で#ifdefが無くなるから。
ありがとうございます。
176行目で、
UINT32 coloryuv;
とすればよろしいのでしょうか?
>>314 宿題の内容とは全く関係ないが、
common.inc.cをインクルードしてるのがちょっとな・・・
実行ファイル名がa.outなのもどうかと。
そろそろMakefile作ってソース構成まとめたほうがいいんでない?
(構成例)
common.h :共通定義
common.c :共通ソース
codebook.c :コードブック作成処理
encode.c :エンコード処理
decode.c :デコード処理
Makefile :以下の実行形式ファイルを生成
→ codebook(コードブック作成)
→ encode(エンコード)
→ decode(デコード)
この辺は人それぞれだから、別に強制するわけではないけどね。
>>322 同意。
>321
すこしは自分でやるとか調べるとかしようよ。
Linuxからでもネットはできるんだからさ。
>gcc ファイル名 -lm -std=c99
>ということでしょうか?
実際にやってみてどうでしたか?
コンパイルオプションを調べましたか?
>176行目で、
>UINT32 coloryuv;
>とすればよろしいのでしょうか?
実際にやってみてどうでしたか?
エラーは出なくなりましたか?
>>322 ありがとうございます。できればやってみようと思います。
>>323 ありがとうございます。
実際にやってみたのですがだめでした。
コンパイルオプションについて調べてみました。
http://okuyama.mt.tama.hosei.ac.jp/unix/C/slide05-1.html ここを参考にして身ました。
UINT32 coloryuv.c;
をやってみました。エラーは減ったのですがやはりだめでした。
In file included from makecodebook.c:8:
common.inc.c: In function `colorrgb2coloryuv':
common.inc.c:189: parse error before `unsigned'
170行目で、UINT32 colorrgb ,UINT32 coloryuv
にしてみましたがこれまただめでした。
知り合いの環境だといままでやったことを何もせずともコンパイルが通ったそうです。
段落ごとに。 -mはリンカオプションなんで最後に書くけど、コンパイルオプションは最初に書くべきでしょうね。 参考にしたというページの例でもそうなってますね。 変数の宣言を2回してませんか? 知り合いの環境で動くなら知り合いの環境で組むのがいいでしょうね。
>>325 ありがとうございます。
ggc -ostd=c99 ファイル名 -lm を実行しましたがだめでした
変数の宣言を二回しています。
ということは170行目で宣言してはいけないということですよね?
知り合いの環境では動きました。ということは新たに加えて宣言してはいけないようなプログラムだと
いうことですか?
知り合いは遠くの人なので何度も実行結果を送ってもらうわけにはいかないので
なんとかしたいです。
>>326 ・知り合いが面倒なので適当に出来たとだけ言っている
・知り合いがなにか修正したり、コンパイル時に何かしてるのに報告してない
・あなたが知り合いをでっち上げている
どれだろうね。
328 :
314 :2005/09/20(火) 04:34:48
知り合いの環境では動くということは何か環境の問題だと思うのですが 何か思い当たるようなことはないでしょうか? どうかよろしくお願いいたします
その知り合いさんの環境とコンパイル方法がわからんとなんとも・・・・。
330 :
314 :2005/09/20(火) 04:37:28
>>327 ありがとうございます。
どれもないかとおもいます。というのはRGBの場合だと問題ないのに
YUVだと問題があるということから真ん中は消えます。
(RGBとYUVでコンパイル時に別のことはしていない)
一番上は、実際に処理ファイルを送ってもらったことや、信頼できるやつなので違うと思います
一番下は違います。
環境は linux gcc です。 細かいことは聞いてないのでわかりません(もう寝てしまった・・・) コンパイル方法は gcc ファイル名 -lm です。
どなたかリナックスをお持ちの方で実際にコンパイルしていただけないでしょうか?
C99デフォな奴なのかなぁ・・・。 gcc -std=c99 ファイル名 -lm でどんな?
>>333 ありがとうございます。
gcc -std=c99 makecode.c -lm
をすると -std=c99 を抜かしてコンパイルしたのと同様にしたのようなえらーがでました
In file included from makecodebook.c:8:
common.inc.c: In function `colorrgb2coloryuv':
common.inc.c:188: parse error before `unsigned'
common.inc.c:192: `coloryuv' undeclared (first use in this
function)
common.inc.c:192: (Each undeclared identifier is reported
only once
common.inc.c:192: for each function it appears in.)
>>334 結構助言があるみたいだが・・・。
upしたり、知人に送ったファイルと、コンパイルしているファイルが違うとかな・・・まさか、そんなオチは嫌だぞ。
検証方法:
・ファイルをダウンロードしてコンパイル
・知り合いをはたき起こして送ったファイルを送り返してもらってコンパイル
検証結果報告待つ
>>336 ありがとうございます。
今まで私が出来うる限りのことをしていました。
しぐうぃんでやってみるという方法を思いつき、やってみたところ成功いたしました。
linux gcc ではならなかったのですが、自分では原因がどうしてもわかりません。
知人の環境を詳しく聞いてみたいと思います。
338 :
314 :2005/09/20(火) 07:13:40
やはり知人のかんきょう、そしてCgwinでコンパイルが通ったという事実と Linuxの場合だとコンパイルが通らなかったという事実からみちびかれるのは gccのバージョンですか? 最近十分に寝て無くって頭がおかしくなってきて何かいてるかも少しおかしいですが よろしくお願いします
大丈夫、もともとおかしいのだろうから。
>>338 gccのバージョンですか?
そうやって気づいたのなら、自分で試してみるといいよ。
結局脳内知人の環境については語らずじまいですか?
質問でつ。
1)
>>338 って何者でしょうか?
2)同僚に彼みたいなのが来たらどうしますか?
>>342 質問は
>>1 に従ってやってください。でないと嵐と見なされ放置されます。
荒らしのつもりだったんだろう。 荒れる上に脱力だねぇ。
345 :
314 :2005/09/21(水) 00:42:32
みなさんありがとうございます。 すみません。荒らすつもりはありません。 知人の環境は OS:KNOPPIX 3.9 コンパイラ:gcc (GCC) 3.3.6 (Debian 1:3.3.6-5) です。 私の環境は OS:Vine Linux 2.6r3 コンパイラ:gcc version 2.95.3 です。 これだとコンパイルが通りませんでした。 しかし、WINDOWSXP、Cygwinのgcc versionは3.4.4(Cygwin special)だと コンパイルが通りました。 おそらくコンパイラのバージョンが問題だということまではわかったのですが解決方法が わからず、困っております。 コンパイルオプションに-std=gnu89(gcc 3.3.6でのデフォルトです)をつけてみたりもしたのですが だめでした。
>>314 知人の環境を Vine Linux 2.6r3 にバージョンダウンしてもらって、
知人の環境でもコンパイルエラーがでるようにしてもらい、
その上で単なるバージョンが古いと出るエラーに
不毛な対処法を考えてもらい手とり足とり教えてもらうのがベストかなぁ……
文字コード、って事は内科...
2.95.3はC99に対応しとらんだろ。 まあ・・・素直にC89(C90)で通るソースを書くほーがマシだな。 -ansi -Wallで文句いわれないソースにすればよろしい。
>>346 ありがとうございます。
さすがにそこまではたのめないので・・・
>>347 RGBだと大丈夫だったのでそれはないかな?と自分では思っております。
>>348 ありがとうございます。
コンパイルオプションに-std=c89をつけて両方の環境(知人と私の環境)でコンパイルが通るようにするべきかなと
言われました。
えーっと。俺、日本語の読解力ないのでしょうか。 349が何をしたいのか、ここの回答者に何をさせたいのか、さっぱりわからんのですが。
Vine 2.6r3 にもし wine が入っていたら、それを利用して Cygwin をインストールするというのはどうだろうか?
>>350 ありがとうございます。
昨日みなさんに質問し、さまざまなことを試すことである程度の解決を図ることができたので
報告、そしてもっといい解決方法があれば教えていただきたいという意味で書き込みを
させていただいております。
>>351 ありがとうございます。
wineというのがよくわからないのですが、後日その方法についても調べてみます。
common.inc.cの176行目に
UINT32 coloryuv;
を入れて188行目(↑の変更前の行数)を
変更前> UINT32 coloryuv = (UINT32) ai << 16
変更後> coloryuv = (UINT32) ai << 16
と変更。多分
>>322 ではこの変更をしてない。
あとは-Wallを片付けるならメインのファイル(930.txt)の90行目
変更前> fprintf(fp_o," %3d, %08X, %3d\n",i , tmp_hist->coloryuv, tmp_hist->count);
変更後> fprintf(fp_o," %3d, %08lX, %3ld\n",i , tmp_hist->coloryuv, tmp_hist->count);
と変更。
これでこの話題終了。
>>353 ありがとうございます。
早速学校に試そうと思います。
直すべきところは
common.inc.cの176行目に
UINT32 coloryuv;
を入れて188行目(↑の変更前の行数)を
変更前> UINT32 coloryuv = (UINT32) ai << 16
変更後> coloryuv = (UINT32) ai << 16
あとは-Wallを片付けるならメインのファイル(930.txt)の90行目
変更前> fprintf(fp_o," %3d, %08X, %3d\n",i , tmp_hist->coloryuv, tmp_hist->count);
変更後> fprintf(fp_o," %3d, %08lX, %3ld\n",i , tmp_hist->coloryuv, tmp_hist->count);
と変更。
とこの二つを変更すればよろしいのでしょうか? -Wallを片付けるならという意味がよくわからなかったもので。
>早速学校に試そうと思います。 日本語が分かりません。 学校「で」試す必要ないでしょーが。 自宅にLinux環境あるんでしょ?
せんせー、-ansiを入れると死ぬほどエラー出るんすけど・・・。 エレガントな修正法をおしえてつかーさい。
>エレガントな修正法 作り直し
ら・・・らじゃー。<作り直し まあ、いいか。俺のじゃないし、依頼も受けてないから、放置しとこう。
>>356 学校にいろんなデータをおいてきてしまったので、学校に行かなくてはだめでした
>>359 できれば、エラーがでないように作り直していただきたいなと思います。。。
まず、ここを直せよ... /* RGBαベクトル値からYUVαベクトル値を取得 */ UINT32 colorrgb2coloryuv( UINT32 colorrgb ) { :
362 :
361 :2005/09/21(水) 03:27:50
>361 そこじゃよくわからんぞw >353の指摘ってことだ
>>350 大丈夫、きっとみんな理解できてない
ソースとレスの端々の単語から推測しているだけさ
そして、詳しい説明を求めても、無駄だということを確信しているんだ
ら・・・らじゃぁ・・・<エラーがでないように作り直していただきたいなと思います。 ふむふむ>362
common.inc.cの176行目に
UINT32 coloryuv;
を入れて188行目(↑の変更前の行数)を
変更前> UINT32 coloryuv = (UINT32) ai << 16
変更後> coloryuv = (UINT32) ai << 16
にすることでエラーがなくなりました。ありがとうございました。
しかし、これはCB作成だけのプログラムで、エンコートのプログラムをコンパイルしたら
これまたエラーが出ました。デコードのプログラムではエラーは出ませんでした。
新たにエンコードのプログラムをアップしてもよろしいでしょうか?
添削していただけないでしょうか?
どうかよろしくお願いいたします。
>>364 ありがとうございます
> 新たにエンコードのプログラムをアップしてもよろしいでしょうか? 俺としては、やめて欲しいな。
>>366 すいません・・・。
コンパイル方法は gcc 932.c -lm
です。
369 :
367 :2005/09/21(水) 03:49:01
エラー文を張り忘れましたすいません。 encode.c: In function `main': encode.c:102: parse error before `int' encode.c:117: `found' undeclared (first use in this function) encode.c:117: (Each undeclared identifier is reported only once encode.c:117: for each function it appears in.)
あ、ansiって事は // コメントがダメじゃん...って今頃 orz
>>369 このエラー英語で書いてあるから辞書とかひけない奴には
絶対理解不能なんじゃないかなぁ……
少なくとも小学生が読めるようなものじゃないと思う。
372 :
367 :2005/09/21(水) 03:57:12
>369 そのソースの意図に従ってコンパイルを通すだけでいいなら ・103行目 /* int found = FALSE; */ ・118行目 if(1){ ってすればいい。 でもやりたい事は違うと思うけどなw
ありがとうございます。 いろんな実行をした結果、Cgwinででたとおりの結果になりました。 ありがとうございます。大変助かりました。
質問です。 VC++を利用しているものですが、 あるボタンを4回クリックして、1回目から2回目クリックまでの時間、 2回目から3回目クリックまでの時間、3回目から4回目クリックまでの時間の 平均時間を計測したいのですが、どのような方法をとればよいのでしょうか。 ご教授お願いします。
>>375 WM_LBUTTONUPが来た時点でWinProcにstatic宣言でもした変数に
時間入れて、なんらかのフラグセット
2回目のが来たらフラグがあるかどうか見て、あったらその時の時間と
1回目で保存した時間とを比較で間隔出せるんじゃまいか?
377 :
デフォルトの名無しさん :2005/09/21(水) 13:59:33
378 :
デフォルトの名無しさん :2005/09/21(水) 14:13:45
@アルゴリズム演習U A配列に入ってる整数形のデータのうち、偶数があれば削除して、 前につめる関数、あいた部分には0を入れる del_gusuu(int data[],int size)を使用。(サイズsizeの配列) Bビジュアルスダジオ/c++ C21日(本日中・・・できるなら今!w) どなたか助けてください。。。お願いしますm(__)m
379 :
375 :2005/09/21(水) 14:19:36
早々のレスありがとうございます。 説明不足で申し訳ないのですが、ボタンをタップすることでの音楽のテンポの測定を したいと考えているので、 秒単位ではなくmsでの計測をしたいです。
>>378 void del_gusuu(int data[], int size)
{
int *p = data;
for (int i=0; i<size; i++) {
if (data[i] && (data[i] & 1)) {
*p++ = data[i];
}
}
while (p != (data+size))
*p++ = 0;
}
381 :
380 :2005/09/21(水) 14:28:48
0も含めてしまったorz if (data[i] && (data[i] & 1)) { ↓ if (!data[i] || (data[i] & 1)) {
>>379 ms単位で時間を取得すればいいだろうに。
GetTickCountでもマルチメディアタイマーでも好きなものを使えばいい
>>383 0も偶数扱いになるのを避けてるんじゃない?
0も偶数でいいんじゃねーの?
質問者が適宜判断ということで
387 :
378 :2005/09/21(水) 14:45:48
そうそうのカキコありがとうございます。 えとたしか授業では0も偶数でやってましたです。
388 :
375 :2005/09/21(水) 14:49:33
解決しました!ありがとうございます。
390 :
378 :2005/09/21(水) 14:54:51
せんせーい></ まだできませーん。。。
どうできないのか
392 :
378 :2005/09/21(水) 14:58:17
メイン関数がよくわからんとです。
ワロタ 関数だけじゃないのかYO
395 :
378 :2005/09/21(水) 15:00:39
380の続きをどうやれば完成なのでしょうか?
ならmainのスケルトンに配列宣言+初期化と関数呼び出し・配列表示を書けばいいだろ
>>395 #include <iostream>
#include <iterator>
using namespace std;
// ここに
>>380 ,383
int main()
{
int array[] = {1,2,3,4,5,6,7,8,9,10};
int size = sizeof(array)/sizeof(int);
del_gusuu(array, size);
copy(array, array+size, ostream_iterator<int>(cout, " "));
return 0;
}
398 :
378 :2005/09/21(水) 15:19:51
ご親切にほんとありがとうございます。 でもビルドすると72件のエラーが。。。 0×40の文字は認識できませんってでるのですが・・・・ いったいどうすればいいんですか?? ばかでもうしわけない。
>>398 そう来るとは思ってたが・・・
全角スペースを全部半角スペースかタブに置き換えれ。
>>399 おいおい、そう来ると思ったなら次からは にしようよ。
>>389 これでいいはず。インデントは自分でよろしく
#include <iostream>
#include <iterator>
void del_gusuu(int data[], int size)
{
int *p = data;
for (int i=0; i<size; i++)
if(data[i] & 1) *p++ = data[i];
while (p != (data+size)) *p++ = 0;
}
int main()
{
int array[] = {1,2,3,4,5,6,7,8,9,10}; int size = sizeof(array)/sizeof(int);
del_gusuu(array, size);
std::copy(array, array+size, std::ostream_iterator<int>(cout, " "));return 0;
}
402 :
378 :2005/09/21(水) 15:26:55
でけたーー ほんとうにありがとうございました。 これで宿題提出して帰れます。 ありがとうございました。
うちのような低レベル大学じゃostream_iteratorなんて使ったら教授からツッコミが来そうだな・・・
iteratorとか言う以前に、ビジュアルスダジオとかいってる奴にしては del_guusuが綺麗すぎるだろw
>>405 初心者でも、あれ位なら大丈夫だろ。
むしろ こういう関数を書いて反応を見たいw
void del_gusuu(int data[], int size){
std::fill(std::remove_if(data,data+size,std::not1(std::bind2nd(std::modulus<int>(),2))),data+size,0);
}
>>406 俺はC++まだほとんどやってないが、とりあえずSTLをふんだんに使ってるということは分かった
>>407 いい読みだな。未経験者の割には、
俺の周りにいる奴ら(俺含む)よりはできるな。やらないか?
>>408 ウホッ!いい男・・・
まぁ冗談はおいといて、やってないとはいっても独習を関数のオーバーロード辺りまでは
読み進めたし、C++にはSTLという大層便利な物があるってことぐらいは知ってたからな
[2] 問題文(含コード&リンク): struct pair { int a; int b;}; void f(struct pair **s){ s[1]->a=100; } main(){ struct pair *A[10]; struct pair B; B.a=50; A[1]=&B; f(A); printf("%d",A[1]->a); } 2行目の**は何でしょうか? ちなみに今、ポインタ等を勉強中です。 *は間接参照演算子というらしいのですが**が解りません。 よろしくお願いします。
>>410 スレ違い。
が、一応書くと struct pairへのポインタへのポインタ
>>410 次からはCの質問スレな
んで、アスタリスクの意味を知ってるならそれが2つ重なってるだけ
A→Bという関係なら、*AでBが参照できるわけだが、
A→B→Cとなってるなら、**AでCが見れる
413 :
410 :2005/09/21(水) 18:39:09
414 :
デフォルトの名無しさん :2005/09/22(木) 19:36:54
[1] 授業単元: C言語プログラミング [2] 問題文(含コード&リンク):課題:ビット演算子 (1)サブネットマスクを入力し、そのネットワークで使用できるホストの最大数を求めるプログラム。 (2)32ビットのパターンを表示する関数を作成して、それを呼び出して実行するプログラム。 (3)32ビットのデータを指定数だけ左にシフトする関数を作成し、それを呼び出して実行するプログラム。 ※(2)で作成した関数によりビットパターンを表示。 左シフトであふれた分は下から入れる。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: [3.3] 言語: C [4] 期限: 9月23日0:00 教科書等を見たのですが、理解できませんでした。 ご指導お願いします。
(1)えーっと、0と最大は特別扱いするんだっけ?<ネットマスク (2)ビットのパターンを表示って2進数表記ってことでしょうか?
#include <stdio.h> int main() { unsigned char array[4] = {0, 0, 0, 0}; unsigned long mask = 0; int i; printf("サブネットマスクを入力(例 : 255.255.255.0)\n"); printf("->"); scanf("%u.%u.%u.%u", &array[0], &array[1], &array[2], &array[3]); for(i = 0; i < 4; i++){ mask = mask << 8; mask = mask | array[i]; } mask ^= 0xFFFFFFFF;// ノード数 mask -= 2;// 使用不可アドレス printf("%u", mask); return 0; }
#include<stdio.h> void showBits(int value){ int index = 32; do putchar('0'+(value>>--index&1));while(index); } unsigned shiftLeft(unsigned value,unsigned shift){ if(shift >= 32)return 0; else return value << shift; } int main(){ showBits(shiftLeft(1,3)); }
すまんよく見直すと回転シフトなのね......
unsigned shiftLeft(unsigned value,unsigned shift){
return value << shift|value
>>32 -shift;
}
>unsigned char array[4] = {0, 0, 0, 0}; >scanf("%u.%u.%u.%u", &array[0], &array[1], &array[2], &array[3]); 再提出
420 :
414 :2005/09/23(金) 00:03:58
421 :
419 :2005/09/23(金) 03:00:50
単に誤ってるということを指摘しただけで何も訂正してないんだが…直したんだろう、きっと。
423 :
416 :2005/09/23(金) 12:12:48
unsigned
[1] 授業単元: データ構造とアルゴリズム [2] 問題文(含コード&リンク): 問題イ 名前、年齢を持つリストを作成し、その中から指定したkeyを検索し、 その後ろに新たなデータを挿入するプログラムを作成してください。 ただし、指定したkeyが見付からなかった場合は、リストの最後に挿入すること。 問題ロ 名前、年齢を持つリストを作成し、そのリストからあるデータを削除するプログラムを作成してください。 [3] 環境 [3.1] OS: solaris [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C言語 [4] 期限: 9月30日
keyが何なのかはっきりさせてください。 名前なのか年齢なのか。
427 :
425 :2005/09/23(金) 14:57:35
>>426 さん
名前です。
はっきりせず申し訳ありません。
struct node * new_node(const char * name, int age, struct node * next) { struct node * n = (struct node *) malloc(sizeof(struct node)); if (n == NULL) { fprintf(stderr, "Memory error.\n"); return NULL; } strncpy(n->name, name, sizeof(n->name) - 1); n->name[sizeof(n->name) - 1] = '\0'; n->age = age; n->next = next; return n; }
insert_node と remove_node は keyを持つノードを見つける find_node を利用して作るとすっきりするとおもた
>431 あとinsert_nodeには nextがNULLの香具師を見つける get_last_node とかも
質問っす。 参加者N人がM人ずつで対戦する大会の日程を再帰を使わず、書け。とのお題。 例えば、N=6、M=2 のとき 1日目 1-2 3-4 5-6 2日目 1-3 2-5 4-6 3日目 1-4 2-6 3-5 4日目 1-5 2-4 3-6 5日目 1-6 2-3 4-5 さっぱりわかんねっす。
433 です。失礼しました。
[1] 授業単元:ありません
[2] 問題文(含コード&リンク):
>>433 [3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: ありません
[3.3] 言語: C
[4] 期限:ありません
[5] その他の制限: 基本情報技術者試験を受けよかな?ぐらいな実力
コンパイラも書けないんだったら違う道行った方がマシかと思われ
気が向いたとき、コード考えてる社会人です。 面白いお題もらったもので、考えたのですが、 自分には難しく、質問した次第です。 スレ違いのようですと、あきらめます。 コンパイラはこだわらないといいますか、違いがよくわかってません。
適当に書いてみたけど最長の日数を素直に求める方法しかわからんかった。
スマートに書くにはどうすればいいんだろ
#include<stdio.h>
unsigned pop(unsigned x){
x -= x
>>1 &0x55555555;x = (x&0x33333333) + (x
>>2 & 0x33333333);
x = x+(x
>>4 ) & 0x0f0f0f0f;x = x + (x
>>8 );x = x + (x
>>16 );
return x & 0x3F;
}
unsigned snoob(unsigned x){
unsigned smallest = x & -x,ripple = x + smallest;
return ripple | ~(-1<<(pop(x^ ripple)-2));
}
void show(unsigned N,unsigned M){
unsigned n,bits,i;
for(n=0,bits = (1<<M)-1;bits<(1<<N);bits=snoob(bits)){
printf("%2d日目 %u",++n,pop((bits&-bits)-1)+1);
for(i=bits&bits-1;i;i&=i-1)printf("-%u",pop((i&-i)-1)+1);
printf("\n");
}
}
int main(){show(6,2);}
ありがとございます。読むのにかなり時間がかかります。 ほんとうれしいっす。
441 :
デフォルトの名無しさん :2005/09/24(土) 20:54:03
[1] C実習 [2] 最大10文字のchar型の配列に範囲を指定して文字列を置換していく。 範囲n〜n2以下の文字列の場合は範囲末尾以降を前詰めし、 範囲以上なら後ろにずらしていく。 '\n'は文字に含まず、 '\n'のみ入力があった場合はその範囲内の文字列を削除して前詰めする。 ずらす文字がオーバーフロウする場合は消していく。 [3] 環境 [3.1] WindowsXP [3.2] BCC [3.3] C言語 [4] 期限:月曜まで [5] その他の制限: 無し 削除、前詰めまでは出来たのですが、範囲以上の文字列の場合にずらしていく処理がうまくいきません。 よろしくお願いします。
442 :
441 :2005/09/24(土) 20:55:07
追記:ここで書いている範囲とは要素の事です。
443 :
439 :2005/09/24(土) 21:08:47
>>440 いや読んでもいいけどビット演算を平気で多用してるから理解は難しいかとw
一応読むのが非常に困難な場所だけ言っておくと、
popは受け取った整数の立っているbitの数を返す関数
snoobは受け取った整数の立っているbitの数が同じで元の数より大きい最小の数を返す関数
この2個の関数は書籍「ハッカーの楽しみ」のコードがベース
あとはshowで右Nbitの整数からMビット立っている全ての数を列挙して
その組み合わせを表示しているだけ。
#ただ一日に複数の試合が行う方法が思いつかなかったのが少し心残り
なるほろれす。 いや、ほとんど理解できてませんが、なるほどです。
すみません、お願いします_| ̄|○ [1] C言語特別講座 [2] 問題文 n!を求める関数factorialを再帰を用いて作成 /*nの階乗*/ #include<stdio.h> intfactorial(int n) { if(n==0){ * *; } else{ * *; } } void main(void) { int n; printf("n->"); scanf("%d",&n); printf("%dの階乗=%d\n",n,factorial(n)); } **で囲まれてる部分がわかりません [3] 環境 [3.1] OS: WindowsXP [3.2] VC 6.0 [3.3] 言語: C++ [4] 期限: 明後日まで
はいよ。 int factorial(int n) { if(n==0){ return 1; } else{ return n * factorial(n-1); } } #末尾再帰にしたいなぁ……
ありがとう。馬鹿でごめんね 勉強してくる
>441 もちっと具体例キボンヌ
実は、再帰を使ってもできるかどうか・・・エヘヘッ
450 :
441 :2005/09/25(日) 00:48:14
buffer[11] = "ABCDEFGHIJ\0" の配列の要素[2]〜[3]に"WXYZ"を置換します。 範囲指定が2文字の所("CD"の箇所)に4文字の文字列(2文字多い)を置換するので buffer[11] = "ABWXYZEFGH\0" となってE以降の文字列が2文字ずつズレていく(要素10は常に\0)といった感じです。
char buffer[11] = "ABCDEFGHIJ"; char temp[11] = {0}; char* p; char insert[] = "WXYZ"; int n, n2; if((n2 - n) < strlen(insert)) { strncpy(temp, buffer, head); strcat(temp, insert); p = &buffer[n2]; strncat(temp, buffer, strlen(p)); strcpy(buffer, temp); }
× strncpy(temp, buffer, head); ○ strncpy(temp, buffer, n);
あー、微妙にnとn2の指定が間違ってるかも…
しかもstrlen(p)じゃないorz sizeof(temp) - strlen(temp) - 1か? pいらね。もう間違いすぎ。おとなしく寝よう…。
お待ちくだされ!!
orz strncat(temp, p, sizeof(temp) - strlen(temp) -1);
やはり、そうでしたか。いやー、思い過ごしかと思ったんだけどね。 ヒント頂いたし、thx。 答える側になれるようがんばろっと。
>>450 その場合、nは2でn2は4ということでいいのかな?
だとしたらこんな感じで。
void trunc(char * buffer, char * insert, unsigned n, unsigned n2)
{
char tmp[11];
strcpy(tmp, buffer);
sprintf(buffer, "%.*s%s%.*s", n, tmp, insert, strlen(tmp) - n - strlen(insert), tmp + n2);
}
[1] プログラミング [2] 問題文 #define N 8 for(i=0; i<N-1; i++) { k=0 for(j=0; j<=N-1; j++) if(a[b]>a[j])k=j; b[i]=a[k]; a[k]=9999; } bが完成したときaにはすべて999が入っている 以上を参考にし単純選択法のプログラムを完成せよ ただし配列a[ ]にデータを読み込ませる部分は int a[ ]={8,3,5,9,1,2,4,6}; としてもよい scanfを取り込んでもよい [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C言語 [4] 期限: 9月27日 [5] その他の制限: 特に無し よろしくお願いします
>>458 sprintfってそんな使い方が出来たのか。知らんかった
>>459 bってint型の配列だよな?
この部分あってる?なんか間違ってたりしない?
if(a[b]>a[j])k=j;
b[i]=a[k];
>a[k]=9999; >aにはすべて999が入っている >問題文に間違いは無いようです うそつき
if(a[k]>a[j])k=j; a[i]=a[k]; だっとえむおー toうそつき
>a[b] 何か物凄いテクが使われているのかと思った。
>scanfを取り込んでもよい ↑ で、じゃね?
468 :
441 :2005/09/26(月) 00:52:32
>451,458 報告遅れてすいません。参考にさせていただき、完成しました。 ありがとうございました。
469 :
デフォルトの名無しさん :2005/09/26(月) 01:23:30
すいません・・・宿題でわからないとこがあるので質問します。。、 1から99までの奇数の和を求めるプログラムを、for文を用いて作成せよ。 おねがいしますm(__)m
>>469 for (i = 1, sum = 0 ; i < 100 ; i += 2) sum += i;
472 :
デフォルトの名無しさん :2005/09/26(月) 01:42:12
[1] 前期、後期で2単位 [2] 469の問題 [3] C言語 [4] 期限:今日 [5] その他の制限: forだけで・・・
474 :
472 :2005/09/26(月) 01:45:56
???
???
既に解答提示済み、ってこった
477 :
472 :2005/09/26(月) 01:48:46
sum+=i ってどうゆう意味ですか?
sum+iをsumに入れる
479 :
472 :2005/09/26(月) 01:50:11
for ってどういう意味ですか?
>>474 ネタであるといいのですが、それで分からないのが本当である場合、深刻です。
非常に易しくしましたのでこれで理解できるはずです。
#include <stdio.h>
int main (void)
{
int i, sum ;
sum = 0 ;
for (i = 1 ; i < 100 ; i = i + 2) sum = sum + i ;
printf ("%d", sum) ;
return 0 ;
}
481 :
472 :2005/09/26(月) 01:52:59
>>480 ネタじゃないですw
もうだめぽ… 今日テストっていうのに…
forが和姦ねって事だよな? >480 whileでやってやれよw
>>482 出題の条件がforだからwhileにしちゃ不味いだろ
484 :
472 :2005/09/26(月) 01:56:38
>483 いやだから説明するのに、って事だよw 解答は471でいいだろ?
486 :
482 :2005/09/26(月) 01:59:49
って、あれ? あんただれ>484
おそらく、
>>472 の教授はこの書き方は教えていないのでは。
488 :
472 :2005/09/26(月) 02:00:39
480さんが書いてくださったのがわかりやすいです 解答は先生からもらってませんorz ありがとうございました。 もう2問質問してもいいですか?
489 :
472 :2005/09/26(月) 02:01:07
お前こそ誰なんだよ
>>488 メンドクサイから2つまとめて書いてくれ
とりあえず472は全員トリップつけてみようよ
492 :
472 :2005/09/26(月) 02:09:06
お願いします 1問目 キーボードから異なる3つの実数を入力されたとき、それらの中間値を 求めるようなプログラムを作成せよ。 (実行例) 3つの数字を入力して 1 2 3 2.000000 2問目 for文を用いて0から20までの4乗を表示するプログラムを作成せよ。 おねがいします・・・
1.中間値って平均って事? 2.0から20までの4乗を表示って、0の4乗,1の4乗,...,20の4乗を表示って事?
>>492 scanf ("%f %f %f", &i, &j, &k) ;
printf ("%f", (i + j + k) / 3.0F) ;
>>492 1.はググったらあったよ情報科の教科書の問題?
#include <stdio.h>
int main(void)
{
int a,b,c;
scanf("%d %d %d", &a, &b, &c);
if((b > a && a > c) || (c > a && a > b))
printf("%d\n", a);
else if((a > b && b > c) || (c > b && b > a))
printf("%d\n", b);
else if((a > c && c > b) || (b > c && c > a))
printf("%d\n", c);
else
printf("中間値は無い。\n");
}
496 :
472 :2005/09/26(月) 02:16:32
>>493 1,違います。3つの数字を比べたときの真ん中の値です。
例 12 4 8 だったら 8 が中間値です
2,そうです
32bit環境の場合 for (i = 0 ; i <= 20 ; i++) printf ("%d ", i*i*i*i) ;
>495 そーと、使っちゃいけないんだろうか? 問題の制限がよく分からんな
>>498 "3つ数字aとbとcが有る時にa<b<cとなる数bが中間値"らしい
ソートして2つ目で良いね
2.0から20までの4乗を表示 #include <stdio.h> int main(void) { int n; for( n = 0 ; n <= 20 ; n++ ) { printf("%d^4=%d\n", n, n*n*n*n); } return 0; }
>499 いや、 >495の情報によると >printf("中間値は無い。\n"); 状況があるそうなんだがw
test
>502 a・b・cになっとるぞ
506 :
472 :2005/09/26(月) 02:25:12
高専の電気科のテストの過去問です ソートは使わないでくださいです。。。
>>501 ごめん、
>>495 も
>>499 も俺だ
ソートしたあとどれか2つ同じのがあれば中間値なしってやらなきゃいけないから真面目に比較したほうが楽だね
#include <stdio.h> #include <set> int main(void) { int a,b,c; scanf("%d %d %d", &a, &b, &c); std::set<int> nums; nums.insert(a); nums.insert(b); nums.insert(c); if(nums.size() != 3){ printf("中間値は無い。\n"); }else{ std::set<int>::iterator itr; itr = nums.begin(); itr++; printf("%d\n", (*itr)); }
510 :
505 :2005/09/26(月) 02:36:40
>>509 中間値==中央値じゃないか?
メジアンと中間値のペアでググると(ry
>510 だって >printf("中間値は無い。\n"); だぜw
/* a, b, c 3要素のソート */ if (a > b) tmp = a, a = b, b = tmp; if (b > c) { tmp = b, b = c, c = tmp; if (a > b) tmp = a, a = b, b = tmp; } 中央値はb
>512 中央値、はそうだねw
514 :
505 :2005/09/26(月) 02:41:10
ここはどれが答えとして適切なのかは472に判断してもらおう
516 :
472 :2005/09/26(月) 02:51:16
もまえらよく嫁 「異なる3つの実数」なんだなこれが いいか「異なる」かつ「実数」だ ちゃんと問題文を見てくださいです。。。
んー? ちゅうことは、同値チェックして(浮動小数点ではナンセンスな気もするが)、 同じ値があったら、再入力させんの?
orz
519 :
472 :2005/09/26(月) 02:53:49
みなさんありがとうございます。 自分はまだ初心者で始めたばかりなので495さんのが シンプルなような気がしてわかりやすいかなと思います。 とても参考になりました。質問してよかったです。ありがとうございました。
495でいいのかよw
521 :
495 :2005/09/26(月) 03:00:57
わかったか能無しども。つまらん解答では満足できないんだよ俺は!
明らかに偽者とわかる騙りは見てても微笑ましいなーw
んー。でもさ、回答者側が不備を突かれて荒れるというパターンはある気がするが。 質問者の偽者はめずらしいな。
そんなことなくない? 単発質問スレ立てると2に1の偽者が自己解決しましたって書いたりするよ
単発質問スレだから
527 :
デフォルトの名無しさん :2005/09/26(月) 06:01:14
入力? abcdefghi a b c d e f g h i 全部で9文字です 最初はa 最後はi 検索? d dは4文字目 dは1個あります ↑のような出力になるように80文字の配列関数を使って作りなさい ちょっとうろ覚えだけどこんな問題、?の後は文字入力で お願いしまーす
>>527 >>1 テンプレ無視も気になるがなんか言葉遣いからして人に物を頼む態度ではない気がする
まあ中にはルールも礼儀も関係ないって住人もいるんだろうからそのうち回答が来るだろうが
配列関数ってなんだ?
530 :
527 :2005/09/26(月) 06:17:27
>>528 ごめんね、気楽な気分で頼んでしまったm(._.)m
よろしくお願いします
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
>>527 [3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン: VC 6.0
[3.3] 言語: C言語
[4] 期限: 明日まで
[5] その他の制限: 80文字の配列関数を使って
>>527 strlen, strchr
後は単純なループ
これだけあれば作れるだろ、ちゃんと聞けないなら自力でやれ
532 :
527 :2005/09/26(月) 06:19:45
>>529 char a[80]みたいな配列だと思う、問題文に配列関数って書いてあったからそのまま書いちゃった(´・ω・`)
>>531 学校行く前に構成だけでも理解しときたかったの
ギリギリまで頑張ってみる、ありがと
#include <stdio.h> void main() { char a[80]; char b; char *c; int i; printf("入力? "); fgets(a, 79, stdin); printf("%s\n全部で%d文字です\n最初は%c 最後は%c\n\n", a, strlen(a), a[0], a[strlen(a) - 1]); b = getchar(); for(i = 0; (c = strchr(a, b)) != NULL; i++) { printf("%cは%d文字目\n", b, c - a); } printf("%cは%d個あります", b, i); }
あー、間違えてる。
>>534 をそのまま実行すると無限ループになるので真似しないように!
>>534 それだと\nの分だけ長くでないか?
確かfgetsは改行文字も読み込んでくれたはずだが
>>536 ああ、そういえばそうだったorz
それも間違いだな。。。
#include <stdio.h> #include <string.h> int main(void) { char str[81], chr = 0, *pstr=str - 1; int len, i; printf("入力? "); while (!fgets(str, 80, stdin)); len = strlen(str) - 1; str[len] = '\0'; for (i=0;i<len;i++) { printf("%c ", str[i]); } printf("\n全部で%d文字です\n最初は%c 最後は%c\n\n検索? ", len, str[0], str[len-1]); while (chr = getchar()) { if (isalpha(chr)) break; printf("英字を入力してください "); } printf("%cは%d文字目\n", chr, strchr(str, chr) ? (strchr(str, chr)-str)/sizeof(char)+1 : 0); for (i=-1;(pstr=strchr(pstr,chr)) != NULL; i++, pstr++); printf("%cは%d個あります\n", chr, i); } とりあえず作ってみたがバグが隠れてるかも知れん
>>538 書き忘れたけど、バッファ溢れは考慮してるが
入力文字が80文字を超えた場合の処理はしてない
そこは使用者の良心に任せるw
>>538 おぉ、ありがとうございます
ためしにやってみたところちょっとバグがありましたが
なんとか自分で治せると思います
ありがとうございました〜
>>527 #include <stdio.h>
#include <assert.h>
int search(char *input, char *keyword, int pos)
{
assert(pos!=0);
pos--;
while (input[pos] != keyword[0])
{
pos++;
if (!input[pos])
return 0;
}
return pos+1;
}
int count(char *input)
{
int src=input;
while (*(++input));
return input-src-1;
}
int main()
{
char input[80];
char keyword[80];
int pos=0;
int cntkeyword=0;
>>541 の続き
printf("入力?");
fgets(input, 80, stdin);
printf("全部で%d文字です", count(input));
printf("最初は%c 最後は%c\n", input[0], input[count(input)-1]);
printf("検索?");
fgets(keyword, 2, stdin);
printf("%cは", keyword[0]);
if (!(pos=search(input, keyword, pos+1)))
{
printf("ありません\n");
return 0;
}
else
{
printf("%d", pos);
cntkeyword++;
}
while (pos=search(input, keyword, pos+1))
{
printf(",%d", pos);
cntkeyword++;
}
printf("文字目\n");
printf("%cは%d文字あります\n", keyword[0], cntkeyword);
return 0;
}
>>540 やっぱりあったか・・・どんなバグだった?
whileの所を色々弄ってたからそこじゃないかと思うんだが
>>543 printf("%cは%d個あります\n", chr, i);
のところで
入力?のところで打ち込んだ文字を入れると
0個
入れてない文字を入れると
-1個とでました
>>544 おかしいな・・・入力文字列に存在しない文字を入れれば0になるはずだが
使ったデータは?
>>545 C++ソースファイルで新規作成して
538のをそのままコピーして貼り付けしただけです(´・ω・`)
>>546 いやそうじゃなくて、入力?と検索?の所でバグが出たときに使った値
入力? abcdefg a b c d e f g 全部で7文字です 最後はa 最後はg 検索 d dは4文字目 dは0個あります Press any key to continue こんな感じです〜 abcdefg以外だと-1になる感じです
>>548 コンパイラの違いが原因か・・・
gccでは問題なかったが、VS.NET2k3で試してみたらそのバグ確認
forループの初期化式をi=-1からi=0にしといて
>>549 了解です〜
これで気分よく学校行けます、ありがとうございました〜
>>549 > char str[81], chr = 0, *pstr=str - 1;
そもそも、なぜpstrを規格外の位置にセットするのか
>>551 色々弄くってる間に戻すの忘れてた・・・
よくこれで動いてたな
しかもgccで-mno-cygwinのオプション付けてコンパイルし直してみたら
何故か
>>548 のバグ発生・・・どうなってんだ('A`)
>>552 規格外のことをやっているんだ。何が起きたって不思議じゃない。
>>492 #include <stdio.h>
#include <stdlib.h>
#define XOR(a, b) ((a)?!(b):!!(b))
#define MID3(x,y,z,err) (XOR((x)<(y),(x)<(z))?x:XOR((y)<(z),(y)<(x))?y:XOR((z)<(x),(z)<(y))?z:((err),(z)))
#define ERROR(msg) (fprintf(stderr, msg), exit(1))
int main(void)
{
char buf[256];
double a,b,c;
const char *msg = "異なる実数を3つ,スペースで区切って入力してください\n";
printf(msg);
fgets(buf, sizeof(buf), stdin);
if (sscanf(buf, "%lf%lf%lf", &a, &b, &c) != 3)
ERROR(msg);
printf("中間値=> %lf\n", MID3(a, b, c, ERROR(msg)));
return 0;
}
最低だな。
>>556 「ヒープソート」でググれば腐るほど例が出てくるというのに・・・。
>>553 だよな・・・('A`)
正直すまんかった
>>556 その出題者はヒープソートの意義を理解しとらんのとちゃうか
下痢便
>>556 ソートじゃなくてヒープを作成すればいいのかな?
>>562 こんな問題出されて、やらなきゃならんとは、最近の学生はかわいそうだな。
数学嫌い増やすのと一緒だなあ。プログラム嫌いが増えちゃうよ。
プログラムって、こんな詰まらんものじゃないぜ〜
>>562 問題1のほう。コンパイルもしていないけどw
#手抜きじゃ
double calculate_30a_without_account_discount( double used ) {
double base = 780.0;
double b1 = 120.0;
double b2 = 300.0;
double pay;
pay = base;
if ( used <= b1 ){
pay += used * 15.58;
return pay;
}
pay += b1 * 15.58;
if( used <= b2 ){
pay += (used-b1) * 20.67;
return pay;
}
pay += b2 * 20.67 + (used-b2) * 20.43;
return pay;
}
double calculate_30a( double used ) {
return calculate_30a_without_account_discount( used ) -50.0;
}
>>562 #include <stdio.h>
#define FURIKOMI 1
int main(void)
{
int used, price = 780;
scanf("%d", &used); /*面倒なのでscanf*/
if (used <= 120) {
price += used * 15.58;
} else if (used > 120 && used <= 300) {
price += 1869.6 + 20.67 * (used - 120);
} else {
price += 1869.6 + 3720.6 + 22.43 * (used -420);
}
if (FURIKOMI) price -= 50;
price *= 1.05;
return 0;
}
とりあえず1個目だけ作った@脳内gcc
仕様が曖昧なので勝手に解釈してる所もあるから適当に修正してくれ
曖昧なところ
・口座振り込みの時は50円引きとかいてあるがユーザーに選択させるのか?
(プリプロセッサ文で切り替えるようにしてる)
・消費税分と書いてあるわりに、肝心の例にそれが考慮されてない希ガス
ってか本当につまらない課題だな・・・
まぁ俺も来年、そんなのを作らさせることになると思うが_| ̄|○
>>565 何間抜けなことしてるんだ俺・・・
なぜか300と120足してるし、肝心の結果表示してないし('A`)
567 :
556 :2005/09/26(月) 22:19:15
ソートじゃなくてヒープ作成しろと書いてありました (;∀;)間際らしくてごめんなさい
>>567 嫌と言うほど大量に転がってるヒープソートのコードから
ヒープ作成部分だけを抜き出せ
569 :
562 :2005/09/26(月) 22:54:03
皆様、本当にありがとうございます。
>>565 >・口座振り込みの時は50円引きとかいてあるがユーザーに選択させるのか?
紛らわしくてすいません。
選択ではなく、必ず50円引きになるようにとのことです。
>>・消費税分と書いてあるわりに、肝心の例にそれが考慮されてない希ガス
> 780+[120*15.58+180*20.67+120*22.43+{0*420}]-50
> =780+[1869.6+3720.6+2691.6+{0}]-50
> =9011
の後に
>消費税額相当 9011*0.05=450.55 よって電気料金は9011+450=9461円
を入れるのを忘れていました。
テンプレの注意点にも書いてあるのに…本当に申し訳ありません。
>本当につまらない課題だな・・・
先生自体は良い人なんですが…。
「ゲームを作りたい!」とか確固たる目標が無い人間が相手なので、
こういう一般的な問題を出すしかないんでしょうね。
私もプログラムに興味あったから授業取ってみたんですけど、
授業の内容じゃ全然プログラムに興味持てないです。
専攻の経済の勉強の方が面白く感じる…
プログラムを始めるなら個人で本とか買ったほうがいいのかな。
>>569 一般的な問題というか……。
あまりに単純で機械的で、味も素っ気も創意工夫の余地も無ければ
驚きも無い。こりゃあ退屈だろう。
ファイルの入出力さえできれば、別に画像処理だって出来るのにな。
やる気があるんなら自習してみるんだね。ただしいきなりCは薦めないが。
それでも・・・ パラメータをどう渡すか、というのは一つのテーマだな。 再コンパイルしないで消費税を変更するには?とか 変数名をどうするか・・・とか 整数だけで演算させるとか(金融系はそうなんだろう) 有効桁数は?とか・・・ まあ、この辺は金融系プログラマさんにお出まし願うほーがいいかも。
>>571 大丈夫、金融系プログラマは消費税率が変わったら徹夜してコーディングしなおすのです。
大丈夫、金融系プログラマは変数名は例えばShouhiZeiのように判りやすい名前を付けるのです。
大丈夫、金融系プログラマは演算は全てDB側で行なうので有効桁数なんて気にしないのです。
金融系プログラマではないが。 C#とかだとdecimal型が組み込みなので大変便利だと思いますた。
576 :
デフォルトの名無しさん :2005/09/27(火) 12:13:58
【質問テンプレ】 [1] 授業単元: 情報処理概論 [2] 問題文 0が入力されるまで正整数を読み込み、最大値、最後の0を除いた最小値、 全数値の平均(0を含めない)を出力するプログラムをつくれ。 [3] 環境:windows 、言語:C言語 [4] 期限:10月29日(木)14時半 [5] その他の制限: 下に載せたものでだいたいあっているそうなのですが、 うまく動きません。{}の位置関係が怪しいようなのですが、 自分で見るかぎりこれで合っているように思えるのです。 どこが間違っているのか添削していただけると大変嬉しいです。 よろしくおねがいします。 #include<stdio.h> main() { int a[1000],i,j,sum=0,n=0,max,min; for(i=1,a[0]=-1;a[i-1]!=0;i++){ scanf("%d",&a[i]);} n=n+1;max=0,min=9999; for(j=0;j<=i-1;j++){ if(max<a[j]){ max=a[j];} if(min>a[j]){ min=a[j];} sum=sum+a[i]; sum*1.00/(n-1);} printf("max=%d\n",max); printf("min=%d\n",min); printf("ave=%d\n",sum); }
>>576 sum*1.00/(n-1);}
↑計算してるだけで代入してないし、n=n+1がforループの外にあるから
常にn=1になって計算の意味がない。
n=n+1を入力ループの中に入れ、変数aveを作って、
ave = sum*1.00/(n-1);
とする。これはループの外に出す。
ループカウンタのjも、入力時にi=1から入れてるんだから初期値指定が違う。
j=0→j=1
最後の0は含めない、て書いてあるんだから終了条件も
j<=i-1→j<i-1
合計に追加する配列のインデックスが違う
sum=sum+a[i];→sum=sum+a[j];
平均を入れる変数を作ったから、表示も変える
printf("ave=%d\n",sum);→printf("ave=%d\n",ave);
>>576 いくつ入力されるか分からないから、線形リストにした方がいいと
無茶なことを言っておく
最大値と最小値と合計と入力数だけ覚えておけばいいじゃん
合計なんか持ってたらすぐにオーバーフローしちゃうじゃん
最大・最小はまぁ持っておけばいいとして 平均は最初5つ程度の平均を出して、それを基準として差の和から出した方がいい希ガス
合計なんてdoubleで持ってりゃ、よほどの事がない限り溢れないと思うんだが。 どうせ出力するのは平均なんだし。
まあ、扱える個数やら範囲を決めるってのも大切ですな。
584 :
デフォルトの名無しさん :2005/09/28(水) 01:02:02
質問なんですが、get_int()関数の関数仕様書って どのようにかけばよいのかさっぱりです……
まあ課題のレベルから言って、
>>582 の言うようにdoubleで持っておけば
十分だろう。てなワケで、こんな感じだな。
#include <stdio.h>
#include <limits.h>
int main()
{
double sum = 0.0;
int n, cnt = 0, max = 0, min = INT_MAX;
while (scanf("%d", &n) == 1 && n > 0) {
sum += n;
if (n < min) min = n;
if (n > max) max = n;
++cnt;
}
if (cnt)
printf("最大値: %d 最小値: %d 平均値: %g\n", max, min, sum/cnt);
return 0;
}
586 :
デフォルトの名無しさん :2005/09/28(水) 12:36:50
>>585 doubleを使うのは入力値が正負に大きく振動してる場合はまずいね
この場合は関係ないだろうけど
【質問テンプレ】 [1] 授業単元: C演習 [2] 問題文(含コード&リンク):y=x×x+2x−3とy=0 で囲まれた面積をモンテカルロ法で求める [3] 環境 Windows C言語 [4] 期限: 2005年9月28日12:00まで [5] その他の制限: 特になし
588 :
デフォルトの名無しさん :2005/09/28(水) 16:20:23
>>587 587 名前:デフォルトの名無しさん 本日のレス 投稿日:2005/09/28(水) 15:29:47
【質問テンプレ】
[1] 授業単元: C演習
[2] 問題文(含コード&リンク):y=x×x+2x−3とy=0
で囲まれた面積をモンテカルロ法で求める
[3] 環境
Windows
C言語
[4] 期限: 2005年9月28日12:00まで
[5] その他の制限: 特になし
#include <stdio.h> #include <stdlib.h> #include <math.h> double rand_range(double x, double y) { if (x > y) { double temp = x; x = y; y = temp; } return (y - x) * rand() / RAND_MAX + x; } int main(void) { int inner, outer; for (inner = outer = 0; outer < 1000000 && inner < 1000000;) { double x = rand_range(-3, 1); double y = rand_range(-4, 0); if (y > (x+3)*(x-1)) inner++; if (y < (x+3)*(x-1)) outer++; } printf("%g\n", 16.0 * inner / (inner + outer)); return 0; }
590 :
デフォルトの名無しさん :2005/09/28(水) 18:00:58
[1] 授業単元:C言語
[2] 問題文:再帰関数を用いて1〜10までの階乗を順に表示するプログラムを作成せよ
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン VC 6.0
[3.3] 言語: C
[4] 期限: 金曜日まで
[5] その他の制限: scanfを使わないで再帰関数に直接引数を与える
階乗のプログラムは
>>446 で分かったのですが、
0!=1
1!=1
2!=2
みたいな感じでwhile文で表示させたいんですがどうすればいいか教えてください
591 :
デフォルトの名無しさん :2005/09/28(水) 18:06:41
>>590 問題文を「再帰をもちいて階乗を求める関数を作り、1〜10までの階乗を表示するプログラムを記述せよ」と解釈して宜しいでしょうか?
592 :
デフォルトの名無しさん :2005/09/28(水) 18:09:04
593 :
デフォルトの名無しさん :2005/09/28(水) 18:13:07
配列に格納した数字を昇順に並べ替えるにはどうしたらいいんですか?
594 :
デフォルトの名無しさん :2005/09/28(水) 18:13:37
#include <stdio.h> int frac(int x) { if (x == 0) { return 1; } else if (x == 1) { return 1; } else { return frac(x - 1); } } int main() { int i = 0; while(i<10) { printf("%d! = %d\n", (i + 1), frac(i + 1)); i++; } return 0; }
>>594 ありがとうございました。
while文の勉強不足でした。
596 :
デフォルトの名無しさん :2005/09/28(水) 18:46:50
【質問テンプレ】 [1] 授業単元: 演習 [2] Echoサーバを作成しなさい。 [3] 環境 Windows XP SP2で動けばいいと思う VC++ 6.0 C++言語 [4] 期限: 2005年10月3日まで [5] その他の制限: 特になし
598 :
562 :2005/09/28(水) 19:10:58
599 :
587 :2005/09/28(水) 19:27:23
>>589 さん有難うごさいました!
素早く答えてくれて大変助かりました〜
>>593 「数字」なのか、「数値」なのかはっきりさせてほしい。
あと、
>>1 ついでに言うと、学校の課題なら問題文を全部のせたほうがいい。
601 :
デフォルトの名無しさん :2005/09/28(水) 19:44:17
>>601 いや、だからちゃんと
>>1 を読めと…
面倒なので答えておくと、
1) qsort関数を使う
2) 自分で配列の要素を比較して昇順に並べ替える
のどちらか。
どちらか好きな方法でやってくれ。
>>598 2月分の使用量を入力させて、まずそれを2等分
んでそれぞれに対して料金計算をしてそれを足し合わせて2ヶ月間の料金をだすんじゃまいか?
604 :
デフォルトの名無しさん :2005/09/28(水) 20:24:50
>>600 >>602 自分で配列の要素を比較して昇順に並べ替える 方法が分からないんです…。これだけの為に質問テンプレートに書く必要ないと思いまして…。スミマセン!m(_ _)m
それ以前に、マルチするなボケ
606 :
デフォルトの名無しさん :2005/09/28(水) 20:37:35
>>604 ここで回答ほしいならテンプレ書け
そうでないと煽られて終了
ここの回答者になるのはどうすればいいですか?
テンプレ書くなら、ソートの知識がどれだけあるか、 授業でどこまで習ったかをちゃんと書いてくれ。
>>607 どうするも何も、自分に扱える内容なら回答してあげればいいと思う。
手に負えないならROMるなり、他人の回答にツッコミ入れるなりお好きなように。
>>609 なるなる。
質問者以上回答者未満なレベルなもので。
根拠と自信のあるものだけ答えてやれよ
612 :
デフォルトの名無しさん :2005/09/28(水) 21:01:24
>>613 書き忘れたけど、テスト環境はgcc3.3.3@cygwin
-std=c89のオプション付けてのコンパイル確認済み
>>604 ググれば腐るほど出てくるのに・・・。
void bsort(int* d,int n){int i,j,t;for(i=0;i<n;i++){for(j=n-1;j>i;j--){
if(d[j]<d[j-1]){t=d[j];d[j]=d[j-1];d[j-1]=t;}}}}
616 :
598 :2005/09/28(水) 23:33:33
>>603 >>613 どうもありがとうございます。
>>613 bcc32でコンパイルしてみました。
完璧に動作しました。
ホント、感謝しています。
それにしても、ソースみても全然何をやっているのか分からない…
ちゃんと自分でも勉強しないと駄目だなぁ。
>>616 手抜きでコメント全く付けなかったからな・・・スマソ
分からない点が合ったら言ってくれれば回答するよ
[1] 授業単元: 情報工学演習 [2] 問題文(含コード&リンク): 1行に1語の英単語が書かれたファイルがある。 英単語は小文字のアルファベットのみから構成させる。 ファイルにかかれている単語を用い、アルファベットのしりとりを、 もっとも長い回数行う順序を1通り出力するプログラムを書け。 余裕があれば日本語のしりとりでも行ってみること(「ん」や日本語コードに気をつけること) [3] 環境 [3.1] OS: コンソール [3.2] コンパイラ名とバージョン: 標準C [3.3] 言語: C [4] 期限: とくにありません [5] その他の制限: 標準ライブラリのみ可
620 :
618 :2005/09/29(木) 01:05:00
入力ファイルも適当に作ってねーって言われました・・・。 実用ではないにせよ・・・辞書の単語数が数万程度だったと思うので、 10万行に対応すれば文句いわれないと思います。
622 :
618 :2005/09/29(木) 01:11:45
1週間です<期限。 データ表現は先頭文字、末尾文字のペアか二次元配列に文字列のリストかスタックでいいと思うんですが、 アルゴリズムが、さっぱりです。
期限あるならなんで書かないんだ?
624 :
618 :2005/09/29(木) 01:22:29
荒らしてしまったようなので去ります。失礼しました。
>>618 この問題だと答え知ってなきゃ1時間程度じゃ終わらん
628 :
618 :2005/09/29(木) 01:55:05
ありがとうです(;_;) 理解しようと努力中であります。
629 :
616 :2005/09/29(木) 02:07:36
>>617 あ、すいません。
>それにしても、ソースみても全然何をやっているのか分からない…
は単なる独り言のつもりだったんです。
本当は直接、「どういう風になってるか教えてください」と言うべきだったのに、
なんか遠まわしに教えてください、となってしまってすいません。
でも、ちょっと聞きたいことがあるので聞かせてください。
amount[1] = amount[0]/2;
amount[0] -= amount[1];
for (i=0;i<2;i++) price += calc(amount[i]);
int price=KIHON, nRange, over=1, i, j,
addTable[][3] = {
nRange=sizeof(addTable)/sizeof(addTable[0]);
各部分がどのような処理を行っているのか分からないので、
教えていただけないでしょうか。
ここが分かれば、後は自力で理解できると思うのでよろしくお願いします。
>>617 じゃないが勝手に答えておく。
>amount[1] = amount[0]/2;
>amount[0] -= amount[1];
>for (i=0;i<2;i++) price += calc(amount[i]);
「2ヶ月に一回請求のため、使用料はまず1/2にされ」るので
入力した値をammount[0]とammount[1]に半分ずつ分けて、
calcでそれぞれの料金を計算し、その合計をpriceに入れている。
>addTable[][3] = {
>
>nRange=sizeof(addTable)/sizeof(addTable[0]);
addTableは加算額の料金表。
nRange=〜はaddTable[][3]の要素数(1個目の[]に入る数値)の計算。
addTable全体のサイズ(int型24個分)を、1要素のサイズ(int型3個分)で割ることで、
要素数(この場合は8)を取得できる。
余計に混乱させてしまうかもしれないが、calc()はもっと短くかけるな。 main()は同じものを仮定する。 ↓のバージョンだと、マクロは全部要らない。INT_MAXを使っているので <limits.h>を#includeすること。 int MiN(int m, int n) { return m > n ? n : m; } int calc(int amount) { static int tbl[][2] = { { 8, 75 }, { 15, 80 }, { 20, 90 }, { 30, 100 }, { 50, 120 }, { 100, 130 }, { 300, 155 }, { 1000, 185 }, { INT_MAX, INT_MAX } }; int i, price = 500; for (i = 0; amount > tbl[i][0]; ++i) price += (MiN(amount, tbl[i+1][0]) - tbl[i][0]) * tbl[i][1]; price *= 1.05; price -= price % 10; return price; }
>>630 分かりやすい説明ありがとうございます。
お陰さまで後は自分で何とかなりそうです。
>>631 アドバイスありがとうございます。
結構短く出来るものなんですね。
すごいです。
>>630 617だが完全に寝てた(;´Д`)
説明サンクス
>>631 綺麗なソースだな・・・もっと勉強しないとダメだな_| ̄|○
634 :
デフォルトの名無しさん :2005/09/29(木) 18:41:40
プログラムの課題です、もうどうしたら良いのか分かりません。 マジで困っています。 こんなの簡単にやってしまえる神様〜教えてください。 課題は下記の構造体を宣言し、mallocを使ってこの構造体100個分のメモリを確保せよ。 さらにこの構造体に適当な値を設定して、コンソール画面に表示するサンプルプログラムを作成せよとの事です。 typedef struct _tagSTTEST{ int iId; //ID番号(0..の数値を入れる) char szId[32]; //ID番号の値を文字列にして設定する double dVal; //ID番号/0.1を設定する }STTEST, *PSTTEST;
636 :
デフォルトの名無しさん :2005/09/29(木) 18:54:55
634です、遅くなりましたすいません。 [1] 授業単元:プログラム課題 [2] 問題文:mallocを使ってこの構造体100個分のメモリを確保せよ。 さらにこの構造体に適当な値を設定して、コンソール画面に表示するサンプルプログラムを作成せよ [3] 環境 [3.1] OS: WindowsXP SP2? [3.2] コンパイラ名とバージョン:VC++ 6.0 [3.3] 言語: C [4]期限:申し訳ないのですが金曜日の12:00まででお願いします。 [5] その他の制限:ありません よろしくお願いします
>>636 #include <stdio.h>
#include <stdlib.h>
typedef struct _tagSTTEST{
int iId;
char szId[32];
double dVal;
} STTEST, *PSTTEST;
void setVal(PSTTEST psttest, int id) {
psttest->iId = id;
sprintf(psttest->szId, "%d", id);
psttest->dVal = id / 0.1;
}
void printVal(PSTTEST psttest) {
printf("%d %s %f\n", psttest->iId, psttest->szId, psttest->dVal);
}
int main() {
int i;
PSTTEST psttest, p;
psttest = (PSTTEST)malloc(sizeof(STTEST) * 100);
for (i = 0, p = psttest; i < 100; ++i) setVal(p++, i);
for (i = 0, p = psttest; i < 100; ++i) printVal(p++);
}
ふと思ったんだが、こういう場合にcallocじゃなくてmalloc使うメリットってある?
>>636 #include <stdlib.h>
typedef struct _tagSTTEST{
int iId; //ID番号(0..の数値を入れる)
char szId[32]; //ID番号の値を文字列にして設定する
double dVal; //ID番号/0.1を設定する
} STTEST;
int main(void)
{
int i;
for (i = 0; i < 100; i++) malloc(sizeof(STTEST));
return 0;
}
>>636 #include <stdio.h>
#include <stdlib.h>
typedef struct _tagSTTEST{
int iId; //ID番号(0..の数値を入れる)
char szId[32]; //ID番号の値を文字列にして設定する
double dVal; //ID番号/0.1を設定する
} STTEST;
int main(void)
{
int id = 5;
STTEST s;
s.iId = id;
sprintf(s.szId, "%d", id);
s.dVal = id / 0.1;
printf("iId:%d, szId:%s, dVal:%g\n", s.iId, s.szId, s.dVal);
return 0;
}
>>639 全ての値を自分で設定することがわかってるなら calloc より高速
644 :
◆UNEZM4vps2 :2005/09/29(木) 21:42:31
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): [3] 環境 [3.1] OS: Free BSD [3.2] コンパイラ名とバージョン: 学校のパソコンなのでコンパイラが 分かりません。すいません! [3.3] 言語: C言語 [4] 期限: [2005年10月3日17:00まで] [5] その他の制限: 高専2年程度の知識の範囲内です。 #include<stdio.h>と#include<unistd.h>のみ 使用していいです。 次レスに自分が作ったプログラムを載せます。 そのプログラムを実行すると "Sigmentation何とか(core dumped)"と出ました。 うろ覚えでごめんなさい。 よろしくお願いします。m(__)m
main() { return 0; }
646 :
◆UNEZM4vps2 :2005/09/29(木) 21:45:24
#include<stdio.h> #include<unistd.h> #define ESC 0x1b #define GREEN printf("%c[32m",ESC); #define NON printf("%c[m",ESC); /*x行,y列への場所の移動*/ void gotoXY(int x,int y){ printf("%c[%d;%dH",ESC,x,y); } /*x行y列からn個の文字列を表示*/ void disp(int x,int y,char *p[],int n){ int i; for(i=0;i<n;i++){ gotoXY(x+i,y); printf("%s\n",p[i]); } } /*x行からy行をクリア*/ void block_clear(int x,int y){ int i; for(i=x;i<=y;i++){ printf("%c[%d;1H",ESC,i); printf("%c[2K",ESC); } }
647 :
◆UNEZM4vps2 :2005/09/29(木) 21:47:02
main部分です main(){ int m,i=0; FILE *fp; char *pic[300]; printf("%c[2J",ESC); gotoXY(8,5); GREEN printf("______________________________________________________________________________________________________\n"); NON if((fp=fopen("pic.txt","r"))==NULL){ printf("ファイルが見つかりません\n"); return 1; }
main()が無いけど 関数だけ作ったの?
649 :
デフォルトの名無しさん :2005/09/29(木) 21:47:52
C言語でnullで終わる文字列中に指定した文字が何度現れるかを返す関数ってありますか?
650 :
◆UNEZM4vps2 :2005/09/29(木) 21:48:30
while(1){ if(feof(fp)!=0) break; switch(i) case 0:sleep(1); block_clear(5,7); for(m=0;m<3;m++){ fgets(pic,300,fp); disp(m+5,2+3*i;pic,1); } break; case 1:sleep(1); block_clear(5,7); for(m=0;m<3;m++){ fgets(pic,300,fp); disp(m+5,2+3*i;pic,1); } break; case 2:sleep(1); block_clear(5,7); for(m=0;m<3;m++){ fgets(pic,300,fp); disp(m+5,2+3*i;pic,1); } break;
651 :
◆UNEZM4vps2 :2005/09/29(木) 21:49:11
case 3:sleep(1); block_clear(5,7); for(m=0;m<3;m++){ fgets(pic,300,fp); disp(m+5,2+3*i;pic,1); } break; } i++; } } /*ファイルpara2.txt*/ パラパラのもとです☆ /* いいか、みんな (° д°) (| y |) 故郷の音というものは 郷 ( °д°) 音 \/ | y |\/ 心によく響くものだ ( °д°) 響 (\/\/ 故郷の家族を大事にな (°д°) m9| y |) */
とりあえずメモリを確保してから読み込め
fgets の引数おかしくね?セグフォ以前にコンパイル通らない気がするが?
>>649 ポインタとstrchrを使ってforした後で制御変数を読む
char str[] = "nullpo", *ptrStr = str;
for (i=0;ptrStr=strchr(ptrStr,chr);i++,ptrStr++) {
if (ptrStr == NULL) break;
}
>>653 一応picはcharポインタの要素数300の配列先頭のアドレスを持ったポインタだから
コンパイラ的には無問題じゃまいか?
>>655 fgets の第一引数は char* を要求するけど,pic の型は char** だよ?
657 :
デフォルトの名無しさん :2005/09/29(木) 22:08:19
>>654 やっぱ多少は自分で作らないとないんですね、わかりました。
どうもです〜^^)
>>656 スマソ、間違えた・・・
で、試してみたがWarning扱いだからコンパイル自体は完了すると思われ
659 :
◆UNEZM4vps2 :2005/09/29(木) 22:13:33
>>659 char arr[];
文字型の配列
char *arr[];
文字型のポインタの配列
>>659 (◆UNEZM4vps2 )
どこに何を入れたいか書いてくれ.書き直したほうが早そうだ.
>>661 case 〇:sleep(1);
block_clear(5,7);
for(m=0;m<3;m++){
fgets(pic,300,fp);←ここのpicを*picにするということです
disp(m+5,2+3*i;pic,1);
}
break;
>>662 それなら警告消えるんじゃまいか?
けどどっちにしても*picが示す領域が何処だよ?って話
だからさ、何したいかを書いてくれって. そこは3回ループまわして何がしたいんだ?
>>663 1回学校で試したのですが、
確かに警告は消えましたが、地面を表示するだけにとどまりました泣
case 〇:sleep(1);
block_clear(5,7);
for(m=0;m<3;m++){←この行の下まできちんと動作してました。
fgets(pic,300,fp);←この行でやぱーり駄目なんですね。
disp(m+5,2+3*i;pic,1);
}
break;
コンパイル、書き直ししてくださったみなさん
お手数かけてすみません!
>>664 テキストファイルからAAを1行ずつ読み込んでモニタに表示・・・
を3回繰り返すことでひとかたまりのAAを表示したいんです。
>>666 とりあえずchar *pic[300];をchar pic[300];にしろ
危なすぎる
>>667 dクスです!(^^)
でも理由は何ですか?
中途半端な回答すんなやwwwww 全然解決になってねえぞwwww つか、だまされるなwww
1.
>>667 の変更をする
2. main の disp(m+5,2+3*i;pic,1); とかのセミコロンをカンマに変更
3. disp を以下のように変更
void disp(int x,int y,char p[],int n){
int i;
for(i=0;i<n;i++){
gotoXY(x+i,y);
printf("%s\n",p);
}
}
で,まあなんとかなるんじゃね? よくしらんけど.
>>670 3行で1つのかたまりが
いいか、みんな
(° д°)
(| y |)
↑こんなAAが
4つあるってことです
>>668 ポインタしか作ってない=実際にデータが書き込まれる領域は不定な状況で
それを利用しようとしてる
メモリ確保するか普通の文字配列にしろ
>>670 そのAAはそれで1セット
確かヤンマーニ関連の奴だっけか
ここはマジレス禁止なスレ?
むしろマジレス推奨
>>644 >>666 >>◆UNEZM4vps2 コメントのところだけ移植してくれ
#include<stdio.h>
#include<unistd.h>
#define ROW (3)
#define COL (256)
#define PARAPARA (3)
void disp(char buf[][COL], int row) {
int i;
// ここで座標移動
for (i = 0; i < row; ++i) {
puts(buf[i]);
}
}
int main(int argc, char ** argv) {
FILE * f; int i, j; char buf[ROW][COL];
if (argc < 2) return 1;
if ((f = fopen(argv[1], "r")) == NULL) return 1;
for (i = 0; i < PARAPARA; ++i) {
for (j = 0; j < ROW; ++j) {
fgets(buf[j], sizeof(buf)/ROW, f);
}
disp(buf, ROW);
}
fclose(f);
return 0;
}
678 :
677 :2005/09/29(木) 23:00:43
ごめん。PARAPARAは4だったな。マクロに感謝。
>>677 "コメントのところだけ移植してくれ"ってどういうことですか?
低脳ですまそ
679は事故解決しますた!(・∀・) でも677さんのプログラムの意味が高度すぎてわかんない・・・・ int main(int argc, char ** argv) { この行の**←見たことない・・
681 :
677 :2005/09/29(木) 23:27:08
>>679 // ここで座標移動
って部分を◆UNEZM4vps2がやれって事でつ
>>680 ここは質問スレじゃない
ファイル名ハードコーディングバージョンやるから黙ってね
int main(void) {
FILE * f; int i, j; char buf[ROW][COL];
if ((f = fopen("pic.txt", "r")) == NULL) return 1;
for (i = 0; i < PARAPARA; ++i) {
for (j = 0; j < ROW; ++j) {
fgets(buf[j], sizeof(buf)/ROW, f);
}
disp(buf, ROW);
}
fclose(f);
return 0;
}
お前ら全員キモい。 なに?そのコード。 素直に作れや。 なに慣れないゴマスリしてんの?バカじゃない?
>>682 規則破りですいません
そしておとなしくしてます。。
685 :
デフォルトの名無しさん :2005/09/30(金) 00:58:54
634です。 自分でいろいろ調べたりしたのですが解らなくて、本当に困っていたんです。 637、640、641で回答していただいた方本当にありがとうございました。
686 :
デフォルトの名無しさん :2005/09/30(金) 02:26:29
main() { return 0; } 何で最近はこういう風に書くバカが多いんだろう。 main(){ return 0; } こうだろう。
>最近 なのは main(){ return 0; } こっち (Javaとかの影響)
どっちでもいいだろう
689 :
デフォルトの名無しさん :2005/09/30(金) 02:52:01
iいやいや、俺はかなりおっさんだが main(){ return 0; } 昔からこうだぞ
若造の漏れは main() { return 0; }
俺は int main(void) { return 0; }
俺は int main(){ return 0; }
俺は int main() { return 0; }
俺は int main(){ return 0; }
どっちでもいいでしょや。
俺は int main() { return 0; }
697 :
デフォルトの名無しさん :2005/09/30(金) 07:52:13
[1] 授業単元:C++演習 [2] 問題文(含コード&リンク):ユーザーに3つの整数を入力させ、それらの最大公約数を表示するプログラムを作成しなさい。 [3] 環境 [3.1] OS: UNIX [3.2] コンパイラ名とバージョン: g++ (?詳しくはわかりません) [3.3] 言語: C++ [4] 期限:2005年10月3日まで [5] その他の制限:特になし よろしくお願いします。
>>697 #include <iostream>
int gcd(int a, int b) {
while (int r = (a % b)) a = b, b = r;
return b;
}
int main() {
int a, b, c;
std::cin >> a >> b >> c;
std::cout << gcd(gcd(a,b), c) << std::endl;
}
699 :
デフォルトの名無しさん :2005/09/30(金) 10:58:34
[1] 授業単元:プログラム課題 [2] 問題文(含コード&リンク):クラスのメンバ変数・メンバ関数をstaticで宣言した場合の 通常のメンバ変数・メンバ関数との違いを示すサンプルプログラムを作成せよ [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン:VC++ 6.0 [3.3] 言語: C++ [4] 期限:今日中に作成しないといけないんです17時までにどうかお願いします。 [5] その他の制限:特にありません よろしくお願いします CSample class : public { public: CSample(); ~CSample(); public: static int iSample; public: static int Func( void); }
>>699 こんな感じで違いがわかってもらえるかもしれん
#include<iostream>
class CSample {
public:
CSample();
~CSample();
static int iSample;
static int Func( void);
};
int CSample::iSample=0;
CSample::CSample(){
iSample=1;
}
CSample::~CSample(){
iSample=2;
}
int CSample::Func(void){
return iSample;
}
int main(){
std::cout<<CSample::Func()<<std::endl;
{
CSample cs;
std::cout<<CSample::Func()<<std::endl;
}
std::cout<<CSample::Func()<<std::endl;
return 0;
}
701 :
デフォルトの名無しさん :2005/09/30(金) 13:10:29
ありがとうございます。 非常に助かりました、とても感謝です。
702 :
デフォルトの名無しさん :2005/09/30(金) 13:17:09
C言語です。 以下の配列をシェルソートによって小さい順に 並べ替える問題です。 int a[10]={2,6,1,7,3,9,4,8,5,0}; 宜しくお願いします!
>>702 Cでのシェルソート実装なんぞ腐るほどあるんだから探せ
705 :
デフォルトの名無しさん :2005/09/30(金) 14:40:37
>>703 ,704
探し方が分かりません。
助けてください・・・
>>705 「シェルソート C言語」 でググれ馬鹿
707 :
デフォルトの名無しさん :2005/09/30(金) 15:42:22
708 :
デフォルトの名無しさん :2005/09/30(金) 16:08:09
1/K!の計算でK=0から100までを計算する プログラムを教えてください!
>>708 無理。問題、教授に聞きなおせ。あとテンプレ使え。
あ、悪ぃ 0除算になるかと思ったら、階乗だった
行列の掛け算を計算するプログラムの宿題です。 os : Windows コンパイラ : borlandC++ C言語 ライブラリは使えません。 int a[3][3] = {{1, 8, -6} , {5, -3, 4 }, {7, 10 ,9} } ; int b[3][3] = {{2, -9, 4} , {6, -5, 8 }, {1, 15 ,12} } ; int c[3][3]; とあるときaの行列とbの行列の積をcに入力するプログラムを作りたいのですが aとbの行列の掛け算がうまくできません。 宿題の条件にwhileやforを使って計算しろとのことなのですが 行列の内積を求めるやりかたが分からないのです。 よろしくお願いします。
>>711 /* 行列の積の定義: C = A B <=> C_ij = Σ A_ik B_kj */
int i, j, k;
for (i = 0; i < 3; ++i) {
for (j = 0; j < 3; ++j) {
c[i][j] = 0;
for (k = 0; k < 3; ++k)
c[i][j] += a[i][k] * b[k][j];
}
}
714 :
713 :2005/09/30(金) 17:58:07
>>708 って exp なら収束良いから桁落ちさえ避けときゃあんま問題無いね.
double fact(int k) {
return k == 0 ? 1 : k * fact(k-1);
}
double e() {
double S = 0;
int k;
for (k = 100; k >= 0; --k) S += 1.0/fact(k);
return S;
}
715 :
デフォルトの名無しさん :2005/09/30(金) 18:30:37
階乗の計算をプログラムで作ったんですが4桁に区切って計算しなさいという宿題です。 なぜに4桁じゃなきゃいけないんですか?5桁じゃダメなんでしょうか?
>>715 unsigned intは多くの環境で2^32-1までしか表せない。
9999*9999<2^32-1に対して
99999*99999>2^32-1だから、5桁掛ける5桁は安全に計算できない。
717 :
716 :2005/09/30(金) 18:37:16
あと、たぶんすれ違い。
>>715 古めのアルゴリズム本でshortの配列使って4桁ずつ計算してるやつが
ある。教官はそれでも読んだのでは?
なあ、次のスレタイ
【尋ねる前に】C/C++の宿題を片づけます 50代目【
>>1 を読め】
とかにしないか
お前が建てるなら文句はない。
>>708 100までで十分な桁数計算しているかは知らない。適宜改行すること。
#include <stdio.h>
#define L 100 // 長さ(桁数の1/4+1)
#define B 10000
void d(int t[],int k){
int i,r=0,s;for(i=0;i<L;i++){s=t[i]+r*B;t[i]=s/k;r=s%k;}
}
void a(int e[],int t[]){
int i,c=0;for(i=L-1;i>=0;i--){e[i]+=t[i]+c;if(e[i]>=B){c=1;e[i]-=B;}else{c=0;}}
}
void p(int e[]){
int i;printf("%d.\n",e[0]);for(i=1;i<L;i++)printf("%04d ",e[i]);puts("");
}
int main(void){
int k,t[L],e[L];
for(k=0;k<L;k++)t[k]=e[k]=0;//初期化
t[0]=e[0]=1;//e=1.0000...;K=0の分だけ先に足しておく
for(k=1;k<=100;k++){
d(t,k);//t/=k;
a(e,t);//e+=t;
}
p(e);//printf("%.*f",L*4,e);
return 0;
}
>>718 探してみたら、92年発行の
「C言語による初めてのアルゴリズム入門」にそんなん書いてあるわ
技術評論社/河西朝雄著の青い本でんな
>>722 今手元にないせいで確認できんが、intじゃなかった?ついでに円周率も書いてるやつでしょ?
>>723 shortでやってま。なにせ16ビット時代のコンパイラやから。
ほんで、
>>716 の問題をよけるために途中だけlongでんな
円周率はマチンの公式のサンプルコードが載ってますわ
>>708 #include <iostream>
#include <functional>
#include <numeric>
using std::partial_sum;
using std::cout;
using std::accumulate;
using std::endl;
int main() {
double data[101] = {1};
cout << accumulate(data, partial_sum(data, partial_sum(data + 1, partial_sum(data,
data + sizeof(data)/sizeof(data[0]), data), data + 1), data, divides<double>()), 0.0) << endl;
}
726 :
708 :2005/10/01(土) 00:02:01
問題間違いでした。 答えてくれた優しい方々、ありがとう。 そしてすいません・・・。
>>726 人生終わらせそうな勢いの書き込みだなおい
728 :
デフォルトの名無しさん :2005/10/01(土) 00:41:33
e[N+2][2*N+2] 上記は1次元熱伝導問題を差分法で解くサンプルコードにあった配列なのですが、 どちらがx(位置)で、どちらがt(時間)を表しているのでしょうか? 何故両方ともN+2ではないのでしょうか? (Nは最大分割数)
>>728 【尋ねる前に】C/C++の宿題を片づけます 50代目【
>>1 を読め】
多桁計算は自分もやっておかなければと(ry
>>729 「尋ねる」はおかしい
「丸投げ」の方が適切
>>732 本人は疑問を解決しようと尋ねてるつもりなんで、丸投げしてる意識はないんだよ
これもゆとり教育の賜物ですな
こちらは答える義理はないのに、答えないと 「なんで教えてくれないの?」
知ってるのに黙ってるのは日本人にありがちだよね 誘導的な事を言って大事なことを伝えないのは詐欺師の手口 詐欺師大国日本万歳
>>736 これはまた切り返しが鮮やかな人ですねw
>>737 触らないでやれよ。多分過去に詐欺で相当ひどい目にあったんだろ。
朝から鮮やかなのか
なるほどそういう意味か
詐欺師から来た挑戦?
>>739 知ってるなら、なぜ押しててくれなかったのですか?
[1] 授業単元: 情報処理 [2] 問題文: (1)元利合計が元金の2倍を超える年数を算出 (複利計算で。年利率をキーボードから入力) (不定回反復) (2)発生した乱数の最大最小値探索 (一次元配列) (3)発生した乱数のソート(同順処理を含む) (一次元配列) [3] 環境 [3.1] OS: UNIX [3.2] コンパイラ名: [3.3] 言語: C [4] 期限: 2005年10月4日まで [5] その他の制限: 構造化コーディングに配慮して書け よろしくお願いしますm(._.)m
>>744 (1)
#include <stdio.h>
int main() {
double x, r;
int k;
while (scanf("%lf", &r) == 1) {
for (x = 1, k = 0; x < 2; x *= r, ++k);
printf("%d\n", k);
}
}
>>744 (2)
#include <stdio.h>
#include <stdlib.h>
#define N 20
int main() {
int k, min, max, a[N];
for (k = 0; k < N; ++k) a[k] = rand();
for (k = 0, min = max = a[0]; k < N; ++k)
min = (min < a[k] ? min : a[k]), max = (max > a[k] ? max : a[k]);
printf("min = %d, max = %d\n", min, max);
}
>>744 (3) 面倒なのでバブルソート O(n^2)
#include <stdio.h>
#include <stdlib.h>
#define N 20
void swap(int *a, int *b) { int tmp = *a; *a = *b; *b = tmp; }
void sort(int *a, int n) {
int i, j;
for (i = 0; i < n; ++i)
for (j = 1; j < n - i; ++j)
if (a[j] < a[j-1]) swap(&a[j], &a[j-1]);
}
int main() {
int k, min, max, a[N];
for (k = 0; k < N; ++k) a[k] = rand();
for (k = 0; k < N; ++k) printf("%d ", a[k]); printf("\n");
sort(a, N);
for (k = 0; k < N; ++k) printf("%d ", a[k]); printf("\n");
}
748 :
744 :2005/10/02(日) 13:37:52
すみません、お願いします。 [1] 授業単元: プログラミング宿題 [2] 問題文 : (1)三乗和相等の数字探索 (入れ子) (2)任意の数字n*nの魔方陣を求める [3] 環境:windows 、言語:C言語 [4] 期限:明日12時
>>749 問題文がよくわからん。言葉をちゃんと定義してくれ。
>>749 -(1)
#include <stdio.h>
int main()
{
int i,j,k;
for(i=1; i<10; i++)
{
for(j=0; j<10; j++)
{
for(k=0; k<10; k++)
{
if(i*i*i+j*j*j+k*k*k == i*100+j*10+k)
printf("%d\n",i*100+j*10+k);
}
}
}
return 0;
}
>>750 (1)が3桁の数のうち、各桁の三乗の総和がもとの数に等しい数(153など)を全て見つけて表示するプログラム
(2)が任意の数字nをキーボードから入力してn*nの魔方陣を作成して表示するプログラム
という意味です。わかりにくくてすみません。
>>751 大変参考になりました、ありがとうございます。
魔方陣は奇数のとき基本的には右上に上がっていけばいいんだっけ? 偶数のときは半分のますを点対称に動かすんだっけ?
>>753 奇数のときは(対称性があるがあるが一般的には)最下段中央から
右下に進んで数値の入っているマスにぶつかると
上に1個上がってまた右下に
偶数のときはシンネ
正整数を入力し、それをローマ数字で表示するプログラムを配列を使って作りなさい。 1000がM, 100がC, 10がX, 1がIであるので、たとえば、123と入力するとCXXIII、1365はMCCCXXXXXXIIIIIと出力できればよい。 <入力例> Input: 3247 <出力結果> MMMCCXXXXIIIIIII お願いします
一応任意の n ≧ 3 について魔方陣は存在するな 適当なアフィン平面構成してやればよさげ
757 :
デフォルトの名無しさん :2005/10/02(日) 21:09:22
759 :
755 :2005/10/02(日) 21:18:50
[1]プログラミング基礎 [2]正整数を入力し、それをローマ数字で表示するプログラムを配列を使って作りなさい。 1000がM, 100がC, 10がX, 1がIであるので、たとえば、123と入力するとCXXIII、1365はMCCCXXXXXXIIIIIと出力できればよい。 <入力例> Input: 3247 <出力結果> MMMCCXXXXIIIIIII [3]環境 [3.1] OS: Linux [3.2] [3.3] 言語: C/ [4]今日の23時59分まで です。
マルチ相手でも暇だから答えとくか...... #include<stdio.h> #include<string.h> void print(int n){ char tmp[36]; char*p=tmp+36; char*t="IXCM"; for(;n;n/=10){ int c = n%10; memset(p-=c,*t++,c); } printf("%.*s\n",36-(p-tmp),p); } int main(){ int n; scanf("%d",&n); print(n); }
>>760 うぁ・・・バレた・・・すまん・・・。
しかし俺の知力ではこれが限界・・・!
#include<stdio.h>
main(){
int i,j,n;
int a[4]{1000,100,10,1};
char b[4]{"M","C","X","I"};
printf("suuji\n");
scanf("%d",&i);
for(n=i;n<1000;n++){
n = n - a[0];
}
}
ぎゃおおおおぉぉぉんんん!!!
763 :
761 :2005/10/02(日) 21:30:16
あ、そうそう。 数字が負である場合、入力値が1万以上の場合の考慮、 6のときにIIIIIIで(VIじゃなくて)本当に良いのか? とかはマルチ相手だからこっちが楽になるように無視したから
764 :
デフォルトの名無しさん :2005/10/02(日) 21:32:03
757あとかんすう蚊だけなんで巣 だれか〜
>>757 ファイルを読む
入力:ファイル名
出力:Bodyの配列、Bodyの有効個数
データ出力
入力:Bodyの配列、Bodyの有効個数
出力:(なし)
世代別集計
入力:Bodyの配列、Bodyの有効個数、年齢下限、年齢上限
出力:該当世代の平均身長、該当世代の平均体重
平均値出力
入力:各世代の平均身長、各世代の平均体重
出力:(なし)
766 :
デフォルトの名無しさん :2005/10/02(日) 21:47:06
言いたいことは解るんですが・・・ どうするかわからないです(´Д⊂)
767 :
759 :2005/10/02(日) 21:48:13
>>761 ありがとう。
でも、これ提出したら流石にバレるな・・・。
習ってないことばかり使ってる・・・。
768 :
472 :2005/10/02(日) 21:49:42
テンプレぐらい読めやボケ それから一回あの世に行ってから出直してこい
769 :
765 :2005/10/02(日) 21:52:49
>>766 テンプレに沿って再度質問しなおしてみたら?
770 :
757 :2005/10/02(日) 21:56:11
>>768私ですか??? [2] ファイル開けたら書いてる [3] Linux Cです [4] 期限: 明日 [5] 基本は全部習った
771 :
デフォルトの名無しさん :2005/10/02(日) 22:02:21
けなしといて 答えてくれないんですか???
772 :
757 :2005/10/02(日) 22:03:26
あの、すいませんが 急いでいるので早くしてくれないでしょうか?
今、2chから弾かれてて書き込み出来ないんだよね
おれにはむずかしいからむりです
>>766 質問と現行ソースをアップロードしないと、おそらく駄目だよ
[1] プログラミング
[2] [課題4]品物の値段とお客の支払った金額を読み込んで、おつりが必要なときには、その額を貨幣の種類と枚数で表示するプログラムを作りなさい。
<入力例>
Input price: 7659
Input payments: 10000
<出力結果>
5000 yen: 0 mai
2000 yen: 1 mai
1000 yen: 0 mai
500 yen: 0 mai
100 yen: 3 mai
50 yen: 0 mai
10 yen: 4 mai
5 yen: 0 mai
1 yen: 1 mai
[3] 環境
[3.1] Linux
[3.2]
[3.3] 言語: C
[4] 期限: 2005-10-03-00:00:00.0
[5] その他の制限: 配列a[i]とかを使って書く。まだ基本のfor,printf,scanf,ifぐらいしか使えない。
あと、
>>759 が確実に同じ大学の奴な件について・・・。
>>772 757がsageをできる知能を持ち合わせていないという事実を無視している。
騙るならそのへんを気をつけな
778 :
757 :2005/10/02(日) 22:07:53
わからないのならそうと言って下さい 期待した私がバカでした
779 :
757 :2005/10/02(日) 22:08:27
[1] 授業単元:C言語V [2] 問題文(含コード&リンク): #include<stdlib.h> #define N (100) int main(void){ int A[N]; int i; for(i=0 ; i < N ; i++){ A[i]=i } return(EXIT_SUCCESS); } この問題について、for文で示される部分を関数を用いて書き改めよ。 ただし、関数名はsetvalueとし、引数として配列と配列のサイズの2つをとるものとする。 [3] 環境 [3.1] OS: Linux Fedora Core 4 [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C言語 [4] 期限: 2005年10月3日 AM1:00 [5] その他の制限: gcc -Wall -ansi ****.cにてコンパイラができるように生成する。 書き換え系統、さっぱりです…。 皆様方、助けてください。お願いいたします…。
>>776 #include<stdio.h>
int coin[]={5000,2000,1000,500,100,50,10,5,1};
void calc(int coin,int*coins){
for(;coin;coin%=*coins++)printf("%d yen: %d mai\n",*coins,coin/ *coins);
}
int main(){
int price,payments;
printf("Input price: ");scanf("%d",&price);
printf("Input payments: ");scanf("%d",&payments);
calc(payments-price,coin);
}
>>781 #include<stdlib.h>
#define N (100)
void setvalue(int x[], int sz) {
int i;
for(i=0 ; i < sz ; i++){
x[i]=i;
}
}
int main(void){
int A[N];
setvalue(A, N);
return(EXIT_SUCCESS);
}
>>780 はい、配列は使わないとダメらしいです。
コインの枚数ぐらい自分でしろよ!! 757自分で刺していただきました。
>>778 1の注意点をよく読んだ上でテンプレ埋めないとおそらく誰もやらんよ
それに757の画像も、『出題例』、『解答例』であって問題そのものではないようだし…
>>782 ありがとうございます。
中身はよくわからない所もありますが、そこは自分で調べていきます。
757あれを関数化するのが問題だ って書いただろが!!先に
789 :
781 :2005/10/02(日) 22:36:38
>>787 ポインタとか使ってるけど大丈夫なのかw
791 :
787 :2005/10/02(日) 22:44:39
いえ、正直なところ自分の知識ではポインタについては全然わかりません・・・。 ポインタというのを使わないでプログラムを書くとどんな感じになるんでしょうか?
792 :
782 :2005/10/02(日) 22:48:15
>>791 少し動作変わるけど、こんな感じ。
#include<stdio.h>
void calc(int coin){
int coins[9] = {5000,2000,1000,500,100,50,10,5,1};
int i = 0;
for(i=0;i<9;++i){
printf("%d yen: %d mai\n",coins[i] , coin / coins[i]);
coin %= coins[i];
}
}
int main(){
int price,payments;
printf("Input price: ");scanf("%d", &price);
printf("Input payments: ");scanf("%d", &payments);
calc(payments - price);
}
>>788 何をどう関数化するの?
解答例を丸ごとサブパーツ化?入出力と計算の分離? それとももっと他の事? 作成者の裁量?
>・問題文は、解いてもらう方にわかりやすいように全文を書きましょう。
とあるように、757は例題でなく問題文全文コピペ汁。テンプレも埋めれ。
>>770 にテンプレはある。
解答例を丸ごとサブパーツ化!
問題文全文コピペは解りにくいのはごめんなさい(´Д⊂)
795 :
787 :2005/10/02(日) 23:03:06
>>792 おお!ありがとうございます。さっきのよりも分かります!
自分はまだ、main(){〜〜}の中で全部終わらせるプログラムしか作れないので・・・がんばらないと・・・。
796 :
782 :2005/10/02(日) 23:05:47
>>795 あー関数習ってないのか
じゃあ、こんな感じで。
#include<stdio.h>
int main(){
int price,payments;
int coins[9] = {5000,2000,1000,500,100,50,10,5,1};
int i = 0;
int coin;
printf("Input price: ");scanf("%d", &price);
printf("Input payments: ");scanf("%d", &payments);
coin = payments - price;
for(i=0;i<9;++i){
printf("%d yen: %d mai\n",coins[i] , coin / coins[i]);
coin %= coins[i];
}
return 0;
}
test
jnz LOOP_END
test2
800 :
798 :2005/10/02(日) 23:15:18
ここCかC++では・・・
802 :
794 :2005/10/02(日) 23:19:39
毛なさレゾン下
>>782 これはバグってないか?
ループが止まらない気ガス
804 :
803 :2005/10/02(日) 23:56:49
>>803 事故レス
すまソ
グローバルとパラメータの coin の意味が違うから錯覚しただよ
805 :
782 :2005/10/03(月) 00:02:05
自分もそのへんは紛らわしいと思って後で書いたほうは、こっそり修正した。 誤解を招きやすいコード書いてすまん。
807 :
802 :2005/10/03(月) 00:12:30
ごめんよ〜 だいぶ荒らして。。。
俺は
>>782 がわざわざ&nbsp;使って半角スペースでインデントしてることに和んだ。
810 :
807 :2005/10/03(月) 00:21:34
脳みそコンパイルえら〜
[2] ファイル開けたら書いてる [3] Linux Cです [4] 期限: 明日 [5] 基本は全部習った >>757 の誰か、ファイルを読む 入力:ファイル名 出力:Bodyの配列、Bodyの有効個数 データ出力 入力:Bodyの配列、Bodyの有効個数 出力:(なし) 世代別集計 入力:Bodyの配列、Bodyの有効個数、年齢下限、年齢上限 出力:該当世代の平均身長、該当世代の平均体重 平均値出力 入力:各世代の平均身長、各世代の平均体重 出力:(なし) これでやったの、見せて(・ω・)
812 :
811 :2005/10/03(月) 00:29:10
解答例を関数かで。。。
>>811 やったのだがソース死んだ
リソース不足で上書き保存失敗なんて人生初だ…
サイズ0になってるし…
鬱だ…
>>757 の重たい画像のせいだな…
814 :
812 :2005/10/03(月) 01:03:35
ごめんよ 明日テストでどうしても必要でね・・・・・ (〃*`Д´)どうしたらいいんだよぉ!!!! こっちが鬱だ
困ってくれるほうが俺としては楽しそうなので、 そのままテストにGO
わかった。やってみよう。 すまんが、俺の環境では見れないので、テキストファイルに打ち込んでくれ>814
もれもテキストになってるなら>814
818 :
744 :2005/10/03(月) 01:28:39
>>744 の(3)ですが、
>>747 のようなプログラムの形はまだ習っておらず自分にはわからないので
できればmain(){〜〜}の中で全部終わらせるプログラムでお願いしますm(._.)m
819 :
814 :2005/10/03(月) 01:29:55
30分まって(;´д`)
820 :
744 :2005/10/03(月) 01:30:03
sage忘れスマソ
>>818 どんな形がだめで、どんな形ならよいですか?
>>821 関数使うなってことじゃね?習ってないなら説明できんだろ
あとは#defineマクロ辺り
825 :
811 :2005/10/03(月) 02:13:31
>>824様 ありがとう!!!! そのばにいたら、抱きしめてる(#゜-゜#)
30分待ってオチはそれでつか。
827 :
811 :2005/10/03(月) 02:21:28
出そうとしたら、書いてくれてた(>Д<)ゞ
828 :
827 :2005/10/03(月) 02:25:59
マジどんな人が書いたか、知りたい (=゚ω゚)
粘着禁止
冗談だよ(>Д<)ゞ 歳離れてそうだし〜
831 :
824 :2005/10/03(月) 03:09:41
デ部じゃない(〃*`Д´) ちょい身長が高いだけだ!!
ところで。>824動いてます?
834 :
824 :2005/10/03(月) 03:16:19
SEさんなら池照
836 :
832 :2005/10/03(月) 03:18:52
女やっての!!!
837 :
824 :2005/10/03(月) 03:21:55
838 :
デフォルトの名無しさん :2005/10/03(月) 03:23:46
釣!
うーむ。なんか、今回はほのぼのとしたチャットだのぉ。
840 :
デフォルトの名無しさん :2005/10/03(月) 03:29:15
[1] 授業単元: ソケットプログラミング [2] 問題文(含コード&リンク): メールを送信するプログラムmysendmailを書け。 mysendmail あて先 サブジェクト 本文ファイル名 として起動する。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: [5] その他の制限: ネタでつ本気にしないよーに。
>>841 自力で送信するのか?sendmailなどを使っていいのか
複数のあて先やBCCなど、どう対応させるのか書け
ソケットプログラミングなんて授業あるのか?どこの学校か書いてくれないか
>>843 あぁ?何がはぁ?だよ
言いたいことがあったら言えや
>842 自力だろう。sendmailは使わない方針で。 授業の一環として1〜3コマくらいで、やるネタかもしれんな。 とりあえず、1件のToとサブジェクトだけでいーんじゃない?
>>840 ありがとう。
感謝する。
なんでPINKちゃんねるなんか見てたのか分からない・・・
メールキター!
>>846 頭ぶっこわれてんじゃねえか?お前
842の内容でなんではぁと、だ?気持ち悪い
病院にでも行って来いや
851 :
デフォルトの名無しさん :2005/10/03(月) 03:56:20
>>837 のメールアドレスをyahooで検索すると(略
852 :
sleepy :2005/10/03(月) 03:56:54
その、まンなかのって、見覚えあるぞ。 よく、足の裏で、なでてあげたけど。 元気そうだね。
4時間半待ってオチはそれでつか。
857 :
744 :2005/10/03(月) 06:46:47
usage ←これって何て読むんですか?
うさげ
別に読み方なんて理解できりゃいいだろ 俺はゆーぜーじって読んでるがな
>>861 英語のちゃんとした発音では「〜age」は「〜いっぢゅ」てな感じになることが多いが、日本人としては
advantage → アドバンテージ
language → ランゲージ
のように「〜えーじ」とすることが多く、十分通じるんだから「ユーセージ」は妥当じゃないか?
おまえ、まさか日本人に向かってアドゥヴァーンティッジュとか発音してんの?
つーかどうでもいいネタを掘り下げてすまんかったorz
ゆーせーじって言うより、ゆーせっじの方が近いんじゃないだろうか。
865 :
861 :2005/10/03(月) 12:15:16
>>863 同様に、「あどばんてぃじゅ」「らんぐうぃじゅ」と聞こえるね。
#実際日本人が日本人向けになんと発音するかは知ったこっちゃない。
[1] 授業単元: データ構造アルゴリズム実習 [2] 問題文(含コード&リンク): 1:配列を使う n×n(nは奇数)の正方形のマスの中に、1〜n^2までの数字を入れて、 各行・各列・対角線のそれぞれの合計が全て同じになるように並べるプログラムを作成。 2:ポインタを使う 要素数10個の整数配列を用意する。 その要素を昇順に並べ替えるプログラムをシェルソートを使って作成する。 比較幅は1,4,13,40…(前の数字×3+1)という数列の中の数を使用する。 [3] 環境 [3.1] OS: solaris [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2005/10/5 [5] その他の制限: 特にありません。
868 :
866 :2005/10/03(月) 15:04:44
>>867 あんたには頼んでねーよヴォケ!
という事で、どなたかボランティアだと思ってお助け下さい。
869 :
866 :2005/10/03(月) 15:09:51
↑偽者でしょうか・・ すみません、よろしくお願いします。
すごく…難しいです
とても無理です。
自演はしません。 トリップ付けました。
ここは偽者だらけのインターネットですね
魔方陣 で検索すれば
876 :
858 :2005/10/03(月) 17:49:04
>>859 >>860 >>861 >>863 皆さんありがとうございます。
usageは、決まった読み方っていうのが無いんですね・・・。
わかりました。私は、『ユース・エッジ』と呼ぼうと思います
皆さんに『ユース・エッジ』と読んでいただけると、ユース・エッジのシェアも広がります
[1] プログラミング [2] ファイルを16進数2桁表示、アスキー表示にダンプし、アドレスを指定すれば編集できるバイナリエディタを作成する。 1ダンプ表示 起動時に指定された、ファイルをオープンし8Byte/ 行、16進数のアスキー表示をすべて表示 アスキー表示は、対応の字がない場合ピリオド表示。 2先頭からの位置指定、その位置データの書き換え 機能1と同時にファイルをオープンし、先頭からのバイト数を指定し、指定された位置のデータを表示後、データ修正値を受け付ける。 ポイント ファイルをバイト単位でアクセス ファイルをランダムアクセス データ型char int 10進数 16進数の理解 [3] 環境 [3.1] OS: Linux [3.3] 言語: C [4] 期限:明日
[1] 授業単元: C言語 アルゴリズム(独習)
[2] 問題文(含コード&リンク):
異なるn個の文字(数字)を辞書順に列挙する
例)
123
132
213
231
312
321
(1344など同じ数を複数個含む例は考えなくてよい)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/948.c ここまでできたのですが途中からうまくいってません
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: gcc 3.4.2
[3.3] 言語: C
[4] 期限:2005年10月07日
[5] その他の制限: どういうことをやっているかを見るため
そのものズバリの関数(もしあるなら)を使うのは無しで
魔法作ってどうする
>>879 next_set() 内の論理がわからなかったので書き替えました。rev() は使ってません。
void uppersort(int *a, int limit)
{ /* バブルソート:手抜き */
for(int c=0; c<=limit; c++) {
for(int b=1; b<=limit; b++) {
if(a[b]>a[b-1])
swp(a+b-1, a+b);
}
}
return;
}
int next_set(int *a,int n){
int maxi;
for(int i=1; i<n; i++) {
if(a[i-1]>a[i]) { /* 昇順になっている最下桁対を見つける */
maxi=-1;
for(int j=0; j<i; j++) { /* 該当部を次の数字に置き換える */
if(a[j]>a[i] && (maxi==-1 || a[j]<a[maxi]))
maxi=j;
}
swp(a+i, a+maxi);
uppersort(a,i-1); /* 該当部より下の桁は昇順に初期化 */
return 0;
}
}
return -1;
}
885 :
879 :2005/10/03(月) 21:15:45
>>884 なんとか解決できました。ありがとうございます
rev()を使ったのは 15432→21345で
15432から1と2を入れ替えたら25431と「5431」が降順になり
その部分だけひっくり返せば完了。それで「1」「2」にあたる
ものをどうやって見つけるかでつまずいてました。
886 :
& ◆Ubjjh71Tw. :2005/10/03(月) 23:18:16
[1] 授業単元:画像関連の科目 [2] 問題文(含コード&リンク):2値画像ファイルを読み込んで、その画像ファイルを碁盤の目のような感じでM x Nの小さい正方形たちに区切る。 その正方形ひとつひとつにつき、正方形内に占める黒画素の割合をそれぞれ計算して出力する。出力はグラフでも数値でもよい。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C/C++/どちらでも可 [4] 期限: [2005年10月6日まで] [5] その他の制限: 画像ファイルはpgm形式
887 :
デフォルトの名無しさん :2005/10/03(月) 23:30:18
ほぅむ・あどばんてぃじゅ ばでぃ・らんぐうぃじゅ
らんがーじゅ
889 :
744 :2005/10/03(月) 23:38:42
[1] 授業単元: 情報処理 [2] 問題文: (1)発生した乱数のソート(同順処理を含む) (一次元配列) (2)表の二次元処理(二次元配列) [3] 環境 [3.1] OS: UNIX [3.2] コンパイラ名: [3.3] 言語: C [4] 期限: 2005年10月4日20時まで [5] その他の制限: 構造化コーディングに配慮して書け 関数は使うな 追加、修正がありましたのでこちらもお願いしますm(._.)m 表の二次元処理は、 教科1 教科2 教科3 …… 平均 001 点数a 点数b 点数c 002 点数d 点数e 点数f 003 点数g 点数h 点数i … 平均 のように表示するものです。
890 :
デフォルトの名無しさん :2005/10/03(月) 23:49:56
[1] C言語 [2]1、繰り返しを用いて、二次元配列のタテとヨコの合計を求めよ 2、アルファベット1文字(大文字)を入力し、それを小文字に変換する関数を作れ [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:VC 6.0 [3.3] 言語: C [4] 期限:明日 [5] その他の制限:
魔方陣な。