[
>>1 からついでに色々。]
・同じ講義を受けている人が既に同じ宿題を依頼してるかもしれなせん。
まずはスレを少しさかのぼって探してみてください。
それさえ出来ないシメジ野郎はバター焼きにして食っちまうぞ
・解答者は答える義務もないし、答えてもそれが正しいかどうかは保証しません。
もちろん、出題者先生の意図なんぞ知ったことではありません。
At your own riskで。
・態度が余りに悪いとすーぱーはかーがあなたの先生にチクるかもしれません。
報告用テンプレ(任意)
[1] 先生の評価:
[2] 提出結果:
[3] 単位取得の有無:
[4] 回答者にコメント(愚痴等は禁止):
********************************* I n f o r m a t i o n このスレは未稼働です。 前スレが埋まってから書き込みましょう *********************************
********************************* I n f o r m a t i o n 前スレが埋まりますた。 書き込み開始です。 *********************************
前スレの間違い探しの答えはintとmainの間が無空白でおkですよね。 それより1000getされた・・・糞・・・('A`)
[1] includeのstdiohに" . "が無い [2] intとmainに空白が無い [3] FILE *fpに;が無い [4] fprintffp,"MsgBox \"馬鹿\");のfprintfに(が足りない [5] fprintffp,"MsgBox \"馬鹿\");の"が足りない
難しいです。
2番はサービスです。
おまいらいい加減教えれ。
何を?
実務を知らない引篭りがPGとして頑張りたいからお願いします。 最低限できればいい課題があったら教えて頂きたいので、例を出して頂けませんか? と言うお願いです。
教えれだってさ、どうする? ∧_∧ ∧_∧ (´<_` ) 下の2つから選んでくれ ( ´_ゝ`) / ⌒i / \ | | / / ̄ ̄ ̄ ̄/ | __(__ニつ/ FMV / .| |___ \/____/ (u ⊃ [1]教えない [2]叩く
[3]番の教えるをお願いします
そうキタか・・・そうなら答えは一つ・・・ ∧_∧ ∧_∧ (´<_` ) 一つなのか兄者 ( ´_ゝ`) / ⌒i / \ | | / / ̄ ̄ ̄ ̄/ | __(__ニつ/ FMV / .| |___ \/____/ (u ⊃ 本を買って読むしかないだろ。 少なくと俺はそれでやってきた
>>13 [3]何か無いだろ・・・
∧_∧
∧_∧ (´<_` ) 兄者が切れるぞ
(.#´_ゝ`) / ⌒i
/ \ | |
/ / ̄ ̄ ̄ ̄/ |
__(__ニつ/ FMV / .| |___
\/____/ (u ⊃
自分のできる範囲を言ってませんでした。入門書はクリアしました。ポインタも理解できてきて リストや多種のソートも時間を掛ければ出来ます。 しかしこのスレに出てくる難問には手が出ないので、これから何をすればいいのか分かりません。
兄者気が短けーよ・・・。お礼にちんちんうpしますから。
俺はそんなの求めちゃいねーよ! ∧_∧ ∧_∧ (´<_` ) 兄者PCが壊れるぞ (.#´_ゝ`) / ⌒i バン ∩ \ | | バン/ /ミ ./ ̄ ̄ ̄ ̄/ | __(__ニつ/ FMV / .| |___ \/____/ (u ⊃ おぱーいをうp汁!
兄者・・・おっぱいでもまんまんでもうpしますから、これからの課題はどうしたらいいのですか?
仕方ないから俺がおすすめな本を紹介してやる ∧_∧ ∧_∧ (´<_` ) やっぱりプログラミング言語Cだな兄者 ビシ! ( ´_ゝ`) / ⌒i (m9 \ | | / / ̄ ̄ ̄ ̄/ | __/_.__./ FMV / .| |___ \/____/ (u ⊃ ・・・・・・・ \\\ (⌒\ ∧_∧ \ ヽヽ( ´_ゝ`) 俺のセリフを盗るな! (mJ ⌒\ ノ ∩兄 / / .( | .|∧_∧ /\ノ | ( ) ときに落ち着け兄者 (___ヘ_ノ ゝ__ノ
兄者使えないじょ〜・・・分かりました。過去ログ見て難しい問題を解きつつ俺に聞けスレに行きます。有難う御座います
おぱーいおうpぱまだか?! ∧_∧ ∧_∧ (´<_` ) だからPCが壊れるって兄者 (.#´_ゝ`) / ⌒i バン ∩ \ | | バン/ /ミ ./ ̄ ̄ ̄ ̄/ | __(__ニつ/ FMV / .| |___ \/____/ (u ⊃ うpうpうpうpうp!!
∧_∧ ∧_∧ (´<_` ) 何をする気だ兄者 (.#´_ゝ`) / ⌒i / \ | | グッ / / ̄ ̄ ̄ ̄/ | __( ヾ / FMV / .| |___ \_つ____/ (u ⊃ ____ / /ミ ___/ FMV ./ \/_____/ グワッ! ∩ ∩ ∧_∧ | || .| | ∧_∧| | (´<_`; ) うお!Pcを投げた! || | (.#´_ゝ`) | / ⌒i .\ / (__ニつ | | / /|| | | | | ___/____/__|_____| .|___ (u ⊃
|l| | |l| | _,,..,,,,_ ./ ゚ 3 `ヽーっ l ゚ ll ⊃ ⌒_つ )`'ー---‐'''''"(_ ⌒) (⌒ ビターン ⌒
[1] 授業単元:バイトの課題 [2] 問題文(含コード&リンク): PCスピーカードライバ(drivers/input/misc/pcspkr.c)以下のように改良する。 ・BEEP 音を/proc/beep で制御する。 例: echo 100 > /proc/beep echo 200 > /proc/beep echo 300 > /proc/beep でスピーカー音発生(数字で音程制御) echo 0 > /proc/beep でストップ [3] 環境 [3.1] OS:Linux [3.2] 何でも [3.3] 言語:C [4] 期限: 2006年4月4日 [5] その他の制限: Linux のカーネルソース最新版(バージョン2.6.15.1)を使う。 詳細な仕様はお任せです。 以上、よろしくお願いします。
>>29 バイトの課題ってことは、当然給与は発生するんだよな?
とりあえず PCスピーカードライバ あげてもらわんと手のつけようも無いし、
あげてもらっても俺はスルー。
このすれにLinuxハカーはどれくらい居るんだろう
バイトの課題でプログラムってあるの? おれ田舎暮らしでワカラナス(´・ω・`)
バイトの課題をここで依頼するのはいいが、課題が出されるって事は
向こうは
>>26 の実力を計りたいと思ってるわけだから
それで勘違いされて今後、ややこしい仕事任されたときにどうするつもりなんだろうな
32 :
30 :2006/03/29(水) 20:04:38
>>30 なんじゃこれはさっぱりわからん
main関数すら無いではないか
理解したいのだが何から学べばいいんだろう
>>33 Linux用ドライバなんだからそりゃmainは無いだろうな
35 :
26 :2006/03/30(木) 09:54:57
>>27 バイトの採用課題です。給与は発生しません。
>>29 漏れも初めてなので他の会社のことはワカラナス
>>31 とりあえずバイト先に入りたいんです。
入ってしまえばなんとかなるかなと。
>>30 ありがとうございます。
仕様を教えて頂けませんか?
バイトでついていけなくなるんじゃないかな・・・ 入ってしまえばなんとかなる人間は課題丸投げしないだろ
バイトは計画的に
悪いことはいわねえから自分の実力に見合ったとこに入んな。 そのうち給与の発生する「課題」も持ってきかねない。
給与の発生する課題を盛ってきたら やった人がその給与もらえるんだな? ∧_∧ ∧_∧ (´<_` ) そういうことになるな兄者 ( ´_ゝ`) / ⌒i / \ | | / / ̄ ̄ ̄ ̄/ | __(__ニつ/ FMV / .| |___ \/____/ (u ⊃
40 :
30 :2006/03/30(木) 16:32:29
>仕様を教えて頂けませんか?
仕様って何を書けばいいんだ?
>>26 の要件は満たしているつもりだが。
コードから一見して分かる以上の事は折れにも分からん。
41 :
26 :2006/03/30(木) 17:05:54
さすがに給与の発生する課題はここに挙げるつもりはありませんが、
実力不相応のバイト先になりそうなので、実力つけてから再度チャレンジして
見たいと思います。
>>30 確かにそうですね。どうかしてました。
ありがとうございました。
[1] 授業単元:C言語実習 [2] 問題文(含コード&リンク):for文を使って1から1000までの和を求めよ。 [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン:Turbo C ver2.0 [3.3] 言語:C [4] 期限:[2006年03月31日12:00まで] 宜しくお願いします。
int i=1,j=0; for(;i<=1000;i++)j+=i; printf("%d",j);
intが16bitだったりしない?
45 :
42 :2006/03/30(木) 17:38:49
>>44 コンパイラはTurbo C ver2.0ですが、どうなんでしょうか?
int i,s;
s=0;
for(i=0; i<=1000; i++){
s=s+i;
}
printf("s=%d\n",s);
でやってみたところなぜか-23788になりました。
16bitだね。longにすれば良いと思うよ。
47 :
42 :2006/03/30(木) 17:44:34
>>46 int→long
%d→%ld
見事500500と表示されました。ありがとうございました。
#include <stdio.h> int foo(int a, int b) { return (a+b)*(b-a+1)/2; } main(void) { printf("%d\n", foo(1, 1000)); }
俺が一番天才的なプログラムだぜ(>∀<) #include <stdio.h> int func(int a,int b); void main(void) { printf("%d",func(1,1000)); } int func(int a,int b){ if(b!=0)return func(a,b-1); return (a+b); }
天才的な間違え方をしちまったorz
こうだな int func(int a, int b){ if(a!=b) return func(a, a) + func(a + 1, b); if(a!=0) return 1 + func(a - 1, b - 1); return 0; }
せめて末尾再帰にしてくれ
末尾再帰なんてループと一緒じゃないか。
int func(int a, int b){ if(a!=b) return func(a, a)+func(a + 1, b); if(a!=0) return 1 + func(a - 1, b - 1); //ここの部分 return 0; } のここの部分の処理は何のために必要なんですか? printf("%d",func(1,1000)); int func(int a, int b){ if(a!=b) return func(a, a)+func(a + 1, b); } の処理で1〜1000の和は求められないのですか?
long func(int a, int b) { return (a+b)*(a-b+1)/2; } int main(void) { int i; static long sum; for (i=1; i<1000; i+2) sum+=func(i, i+1); printf("%ld\n", sum); return -1; } どうせだから公式使え
57 :
55 :2006/03/30(木) 23:11:07
すいませんスルーして下さい。再帰を理解できてませんので勉強してきます。
int f(int a, int b, int c) { return a > b ? c : f(a+1,b,a+c); } main() { printf("%d", f(1,1000,0)); } これで末尾再帰。
正直何が違うのか全く分からない・・・時間に余裕のある方!!独学に愛の手を
検索しろって事か兄者。分かったよ弟。検索してくる
>>60 52 を簡単にすると int g(int a, int b) { return a > b ? 0 : a + g(a+1,b); } g(1,3) を実行したとすると、
1. g(1,3) が呼ばれる。g(2,3) が必要になる。
2. g(2,3) が呼ばれる。g(3,3) が必要になる。
3. g(3,3) が呼ばれる。g(4,3) が必要になる。
4. 終端条件で g(4,3) = 0。
5. g(3,3) に戻って g(3,3) = 3 + 0 = 3
6. g(2,3) に戻って g(2,3) = 2 + 3 = 5
7. g(1,3) に戻って g(1,3) = 1 + 5 = 6
この手順において 5-7 は必須の処理。ところが 59 で f(1,3,0) を実行したとすると
1. f(1,3,0) が呼ばれる。f(2,3,1) が必要になる。
2. f(2,3,1) が呼ばれる。f(3,3,3) が必要になる。
3. f(3,3,3) が呼ばれる。f(4,3,6) が必要になる。
4. 終端条件で f(4,3,6) = 6。
5. f(3,3,3) に戻って f(3,3,3) = 6
6. f(2,3,1) に戻って f(2,3,1) = 6
7. f(1,3,0) に戻って f(1,3,0) = 6
ここで 5-7 で返す値はどうせ 4 で返す値と同じだから、スキップしても問題ない。こういうスタックの巻き戻しをスキップしても問題ないように書かれた再帰を末尾再帰といい、実際にスキップすることを末尾再帰の最適化という。
>>62 先生凄いです!!変数一つで計算量が大幅に減るのですね。丁寧な解説までして頂き有難う御座います!
昨日から再帰のアルゴリズムを使いこなせるように脳内でいろいろ考えてますが難しいです。
計算量に合わせた高速なアルゴリズムを作りたいので何とか再帰を会得します。
分かりやすい解説有難う御座いました!!
宿題の投下が無いな ∧_∧ ∧_∧ (´<_` ) 今の時期、宿題は出ないと思うぞ兄者 ( ´_ゝ`) / ⌒i / \ | | / / ̄ ̄ ̄ ̄/ | __(__ニつ/ FMV / .| |___ \/____/ (u ⊃ 所でなんでこのスレにはトリップ付けてる人がいないんだ?
トリップって必要あるものか?
>>65 「自己解決しました。ありがとうございました。」
といういたずらを防ぐためには有効では?
回答者側は誰一人トリップ使ってねぇな ∧_∧ ∧_∧ (´<_` ) 代々続いているスレなんだから ( ´_ゝ`) / ⌒i 何人かいてもいいと思うんだが / \ | | / / ̄ ̄ ̄ ̄/ | __(__ニつ/ FMV / .| |___ \/____/ (u ⊃
何でもお答えしよう。
誰か質問汁。ネタ投下まで冬眠するか。
[1] 授業単元: はじめてのC [2] 問題文(含コード&リンク): テキストファイルをHTTPを使って取得し、その内容を画面に表示するプログラムを作成せよ [3] 環境 [3.1] OS: Windows [3.2] VC 7 [3.3] C [4] 期限: 2006/4/1 [5] その他の制限: 特になし
winsockかよ
正直できなかった・・・ヘタレだね。2週間でマスターしてくるぜ!!!!
>>72 もしかして、>70も自演か?
>>67 奥床しいんだよ、きっと。
トリップつけるのが当たり前になれば漏れもつけてもいいけどねぇ。
>>66 >>1 に質問者はトリップをつけるようにって書いてある
正直回答者はトリップが必要だとは思えない・・・
まぁつけても別にいいと思うけど。
回答者トリップつけて1回変なソース書いたら以降叩かれまくりの気がする
それは悲惨だな
77 :
70 :2006/03/31(金) 17:58:49
自己解決しますた。ありがとうございますた。
なんでも聞いてくれ あと禿って言うな
なんだこの流れは・・・
∧_∧
∧_∧ (´<_` ) 兄者、
>>67 がまずかったのでは?
(.#´_ゝ`) / ⌒i
/ \ | |
/ / ̄ ̄ ̄ ̄/ |
__(__ニつ/ FMV / .| |___
\/____/ (u ⊃
>>70 #include <stdio.h>
#include <windows.h>
#include <wininet.h>
#pragma comment(lib, "wininet.lib")
int main(void)
{
char url[1024] = "";
char buf[1024] = "";
DWORD readsize = 0;
HINTERNET internet = InternetOpen("禿", INTERNET_OPEN_TYPE_PRECONFIG, 0, 0, 0);
HINTERNET file = 0;
scanf("%s", url);
file = InternetOpenUrl(internet, url, 0, 0, INTERNET_FLAG_RELOAD, 0);
do {
InternetReadFile(file, buf, 1024, &readsize);
printf("%s", buf);
} while (readsize == 1024);
InternetCloseHandle(file);
InternetCloseHandle(internet);
return 0;
}
>>78 #include <stdio.h>
int main(void) {
printf("%s", "How many files?");
return 0;
}
>>78 はい先生!
これは何をするPGでちゅか?!
void a(char *a,const char *b)
{
while (*a++=*b++);
}
嫌な流れになってきたな。
C++で書けよハゲ
>>88 出題者に言えよw
あとハゲは失礼だろwwハゲにwww
90 :
神 :2006/03/31(金) 23:04:25
何でも聞いてくれ。瞬間的に答えを出すであろう。
\\_ :三ニ=:::::::ヽ :ヽ.ニ=::て.>廴_ スルー 三.ヽ= (⌒ヽ;:;:;,.二) ニ=-ヽ:ヽ、,∠.^^ぅ 〃,べ= ̄ニ二 ̄ /;:ィリ ノノ ,.へヽ ;:ヘ/ ̄ ̄ ̄Vヽヽ ソ ├┤|
>>90 次の方程式の数値解を求めるプログラムをお願いします。
(a+b^n)/n = x
>>90 ローマ字⇒かな変換 をするプログラムをお願いします。
>>93 なんについての方程式だい。つーかプログラムの質問なのかすらあやしい。
まだ3月か。
いつまでも3月だお
32?!
やったまだ冬休みだ!
何で32日なんだ?
エイプリルフールだ
ようし! "hello"と画面に出力できたら10000YENあげちゃうぞ!
C言語からC++言語に乗り換える時期が分かりません。自分としては C→C++→WinAPI→趣味でゲーム製作。と行きたいのですが、C言語が 基礎になるのでしっかり学んでからC++に移行すべきだと思っています。 どの程度できればC++に移行すべきタイミングでしょうか?教えて頂けないでしょうか?お願いします。
#include <stdio.h>
void main(){
printf("\"hello\"");
}
>>102 1000円(ノ∀`)
>>105 好きな時ですか・・・。分かりました!自分で満足した時に移行します。有難う御座いました!
C→WinAPI→ゲーム製作→C++ がオススメ
先生それはなぜですか?
Win32 APIのサンプルってC言語が多くない?
OSに密接に関わるところだとやっぱり高級アセンブリとしてのCが求められるからじゃね。
Win32API が C++ と相性がよくないから。設計思想が C なんだよね。 代表的なのはキャストを前提で作られてる関数で、C++ は C より型に厳しいから reinterpret_cast だらけになったりするんだよね。
漏れはC++→Cですが、なにか?
別に・・・
114 :
デフォルトの名無しさん :2006/04/02(日) 14:49:38
age
115 :
デフォルトの名無しさん :2006/04/02(日) 18:55:48
ひま〜。誰かおもしろい問題捏造して。
[1] 授業単元:脳内 [2] 問題文(含コード&リンク):strcpyをできるかぎり簡潔に作れ [3] 環境 [3.1] OS: (Windows/Linux/等々)Windows [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)自由 [3.3] 言語: (C/C++/どちらでも可 のいずれか)C/C++ [4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)2006/4/2 23:59:59 [5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)暇つぶしにはなるかどうかはわからない 突っ込みは無しで
くだらね
>>116 void strcpy(char *dest, const char *src){while(*dest++=*stc++);}
strcpyって返り値はコピー先のポインタだっけ?まあいいか
[1] 授業単元:脳内 [2] 問題文(含コード&リンク):問題を自動的に作るPG [3] 環境 [3.1] OS: (Windows/Linux/等々)自由 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)自由 [3.3] 言語: (C/C++/どちらでも可 のいずれか)自由 [4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)自由 [5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)自由
[1] 授業単元: ゼミで出た話題 [2] 問題文: 入力と出力の対応が与えられたとき,それを満たす「あみだくじ」を作りたい. 何人用のあみだくじであるかを表す縦線の数 N をあみだくじの位数という.以下ではあみだくじに引く横線は全て水平で,縦線を飛び越すことはなく,高さは全て異なるものとする.引いた横線の個数 M をあみだくじの大きさという. 入力: あみだくじの位数 N,それに続いて N 個の数で,あみだくじの入出力の対応を表す.ただし対応は入力側の1番に対応するものが1番目に書かれた数,2番に対応するのが2番目に書かれた数,……とする. 例: 3 2 3 1 (位数3のあみだくじで,1→2,2→3, 3→1 と対応するものを表す) 出力: あみだくじの大きさ M,それに続いて M 個の数で,横線の位置を上から順に表す.ただし位置はその横線が接している左側の縦線の値とする. 例: 4 1 2 1 2 (大きさ 4 のあみだくじで,上から順に 1, 2, 1, 2 と横線が引かれているもの,つまり,以下のあみだくじを表す.) |_| | | |_| |_| | | |_| | | | (*)出力するあみだくじは,大きさ最小のものとする.同じ大きさのものが複数あればどれを表示してもかまわない. [3] 環境: 自由. [4] 期限: 4月7日まで. 分かりにくい問題文ですが,どーかおねがいします.わからないところがあれば質問ください.
121 :
120 :2006/04/02(日) 20:24:43
すんません,例の出力が狂ってました.正しい出力は「2 2 1」で,以下のあみだくじです. | |_| |_| | | | |
今問題文の意味を理解しようと悪戦苦闘中
>>120 前の問題の単純化版だな。
今度は探索無しで解けるかも。
>>120 #include <stdio.h>
#include <stdlib.h>
void bubblesort(int *array, int size) {
int i, j;
for(i = 0; i < size; i++)
for(j = size - 1; j > i; j--)
if(array[j] < array[j-1]) {
int t = array[j];
array[j] = array[j-1];
array[j-1] = t;
printf(" %d", j);
}
}
int number_of_transpositions(int *array, int size) {
int r = 0, i, j;
for(i = 0; i < size; i++) for(j = 0; j < i; j++) if(array[i] < array[j]) r++;
return r;
}
int main(void) {
int n, i, *data;
scanf("%d", &n);
data = (int *)malloc(sizeof(int) * n);
for(i = 0; i < n; i++) scanf("%d", data+i);
printf("%d", number_of_transpositions(data, n));
bubblesort(data, n);
putchar('\n');
free(data);
return 0;
}
125 :
デフォルトの名無しさん :2006/04/03(月) 22:58:32
あげ
>>124 最近思うんだけど、なんでメイン関数が一番下なん?
プロトタイプ宣言しなくていいから?
レスの行数制限とかあるしね
[1] 授業単元: 脳内 [2] 問題文(含コード&リンク): C:\file.binの0x2000-0x2010バイト目の内容を標準出力に出力し、 標準入力から受け取った16進のバイナリデータ10バイト分に書き換える。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: なんでも [3.3] 言語: C [4] 期限: 無期限
バイナリエディタ使えよ
[1]授業単元:個人的な要望 [2]問題文および、要望: 10年以上前から思っていたのだが Ctrl+f 以外に使いにくい 良く使うショートカットだと思うが こんな機能を実装シテホスイ 1 検索の常駐、非常駐の切り替え 2 IME前回ON、次回ON 3 IME前回OFF、次回OFF 4 IME前回関係なくON 5 IME前回関係なくOFF 6 複数ブラウザの一斉検索 7 検索した文言と検索窓が重なったら、窓がよける どうよこんな感じで [3]環境 [3.1]OS Windows2000SP4 [3.2]コンパイラ:Visual Studio 2005 [3.3]言語:CまたはC++または.NETもOK [4]期限:早いほうが( ・∀・)イイ!!
[1] 授業単元: 脳内 [2] 問題文(含コード&リンク): ax+by=c dx+ey=f でa,b,c,d,e,fを与え、連立方程式の解を求める 解が無い場合はその旨を表示 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: なんでも [3.3] 言語: C [4] 期限: 無期限
\\_ :三ニ=:::::::ヽ :ヽ.ニ=::て.>廴_ スルー 三.ヽ= (⌒ヽ;:;:;,.二) ニ=-ヽ:ヽ、,∠.^^ぅ 〃,べ= ̄ニ二 ̄ /;:ィリ ノノ ,.へヽ ;:ヘ/ ̄ ̄ ̄Vヽヽ ソ ├┤|
わしも [1] 授業単元:個人的要望 [2] 問題文(含コード&リンク): ExcelでF1を押下したときにヘルプが起動されないようにしてほしい。 F2と間違えて固まるのが非常に難儀。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:VCとかbccあたりで [3.3] 言語:C/C++ [4] 期限:[無期限] [5] その他の制限:実行モジュールでなくソースでお願いします。
>>133 いろいろ条件不足だな。どこまでやっていいの?
例えば API hook かけて F1 入力全部奪う手もあるし、
Excel の実行ファイル書き換えて F1 きかないようにする手もあるかもしれない。
MSOHELP.EXEを消してそんな名前のダミープログラム置いておけばええやん
俺はキーバインドいじって F1 も ESC にしてある
137 :
デフォルトの名無しさん :2006/04/04(火) 21:05:29
130ですが、スルーっぽいので 他のスレで質問したいのですが、どこか良いとこあります?
138 :
133 :2006/04/04(火) 21:08:28
>>134-135 最良はExcel上でF1を押したときになにも起きなければOK。
ヘルプは関数使用時に稀に見るのでメニュー等からも立ち上がらなくなるのは困る。
他のアプリへの影響は、体感できないほどのタイムラグが出るくらいはOK。
実行ファイル書き換えは、私がその内容を検証できないのでNGでお願いします。
>>136 スレ違いだけど、Excelのキーバインドっていじれるの?
139 :
デフォルトの名無しさん :2006/04/04(火) 21:13:00
>>133 低脳か貴様
答え教えてやるから、うざいから早く消えろ、マクロでF1になにもしないキー割り当てすればいいだろ
死ね
140 :
133 :2006/04/04(火) 21:18:10
そなるとC/C++ではないからスレ違いだな。
>>139 死ねって言ったね!
親父にも死ねって言われたことないのに!
寒
>>130 ・日本語で書いてくれ。
・ここはプログラム依頼スレじゃない。
#依頼スレはもう落ちてるけど。
・そういうソフトが世の中にはあったはずだから勝手に探せ。
>>131 適当バージョン。ちゃんとやろうと思うと面倒いよね。
#define GET_INT( x ) do { printf( "Input " #x "> " );\
scanf( "%i", &x ); } while (0)
int main( void )
{
int a, b, c, d, e, f, x, y;
GET_INT( a ); GET_INT( b ); GET_INT( c );
GET_INT( d ); GET_INT( e ); GET_INT( f );
/* a*x + b*y = c -> a*d*x + b*d*y = c*d */
/* d*x + e*y = f -> a*d*x + a*e*y = a*f */
/* (b*d-a*e)*y = c*d-a*f */
y = (c*d-a*f) / (b*d-a*e);
x = (c - b*y) / a;
printf( "x = %d, y = %d\n", x, y );
return 0;
}
147 :
デフォルトの名無しさん :2006/04/04(火) 23:39:51
授業単元: 個人的要望
問題文(含コード&リンク):
以下のソースコートはGetTickCount()の値がオーバフローするたびに
タイマーがうまく動作しなくなるバグを抱えています。
オーバフローしても正常に動作するようにしてほしいです。
ttp://anotherred.hp.infoseek.co.jp/cgi-bin/src/up1346.txt 環境
OS: Windows および linux
コンパイラ名とバージョン: bcc(5.5) gcc(3.4.3)
言語: C
期限: 無期限
その他の制限:
"alaram!(id:??)"と表示された時のGetTickCount() - GetTickCount()との差を取る以外のやり方を
しりたいので、他の方法で解決してくださるとありがたいです。
(googleで探しても、この方法以外、見つかりませんでした)
>>147 > Windows および linux
この時点で統一した方法は提示できない。
標準Cにミリ秒単位で時間を取得する方法が存在しないから。
環境ごとにコードを分けること。
>>147 jAのコードをこんなとこに出すんじゃない。
てゆか元のコードの時点で #include <windows.h> って書いてるじゃん
152 :
デフォルトの名無しさん :2006/04/05(水) 02:30:48
>>147-151 板違いのようなので、削除依頼を出しました。
>>150 jAのコードの流れを参考に書いただけなんですが・・・
それもだめなようなので削除依頼を出しておきました。
これ以上の突っ込みはご勘弁を。
差がなんであかんのかが分からん 直す個所は変わらんだろし
[1] 授業単元:個人課題 [2] 問題文(含コード&リンク): 12345の数字列をループやand,orなどを使用して21345,23145などのスワップと同等の関数を作成する [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:BCC [3.3] 言語:C [4] 期限:[無期限] [5] その他の制限:なし
問題の意味・意図がよくわからん 数字列はひとつのintであらわすってこと??
「ループやand,orなど」 がどこまで許されているのかもわからんな。
157 :
154 :2006/04/05(水) 10:33:41
いえ、別々のものです
#include <iostream> #include <algorithm> #include <string> int main(void) { std::string str = "12345"; do { std::cout << str << std::endl; } while (next_permutation(str.begin(), str.end())); return 0; } これで我慢しろ
159 :
154 :2006/04/05(水) 10:37:42
C++が読めません 数字自体と数字の位置とを変数 i, jと固定した上で、and,notなどを使用して、、と
161 :
154 :2006/04/05(水) 10:45:14
ループ2つとand or not xor と
>>161 それしか使っちゃいかんのか。シフトくらい許して欲しいところだが。
というかそれしかないとループはほとんど意味ねーな。
とりあえずものすごくベタに書くとこんなか。減算とシフトが残ってるので仕様を満たしてないが。 #include <stdio.h> int iswap(int x, int i, int j) { return x&~(0xf<<(i<<2))&~(0xf<<(j<<2))|(x&0xf<<(i<<2))<<((j-i)<<2)|(x&0xf<<(j<<2))>>((j-i)<<2); } int main() { int x = 0x12345; printf("%08x\n", iswap(x,2,4)); }
164 :
154 :2006/04/05(水) 11:11:33
ごめんなさい。+%などを忘れてmした。使用可能です
iso646.hに定義されてるand orなどのマクロを使うんじゃないのか
167 :
163 :2006/04/05(水) 11:18:18
減算は無くせた。シフトははずせんな。 int iswap(int x, int i, int j) { int t = ((x >> (i << 2)) ^ (x >> (j << 2))) & 0xf; return x ^ ((t << (i<<2)) | (t << (j<<2))); }
168 :
163 :2006/04/05(水) 11:24:39
>>165 別々ってことは int x[] = {1,2,3,4,5} ってこと?・・・無駄な努力しちまった orz
せっかく
>>163 が作ってくれたので、シフトを展開。多分これであってるはず。
int iswap(int x, int i, int j) {
// int t = ((x >> (i << 2)) ^ (x >> (j << 2))) & 0xf;
// return x ^ ((t << (i<<2)) | (t << (j<<2)));
int t,t1,t2,count;
t1 = x;
t2 = x;
for(count=1;count<=sizeof(int);++count){
if(count <= i){
t1 /= 16;
}
if(count <= j){
t2 /= 16;
}
}
t = (t1 ^ t2) & 0xf;
t1 = t;
t2 = t;
for(count=1;count<=sizeof(int);++count){
if(count <= i){
t1 *= 16;
}
if(count <= j){
t2 *= 16;
}
}
return x ^ (t1 | t2);
}
ループ2つなので変だが気にするな。
172 :
170 :2006/04/05(水) 12:58:26
>>164 で、+%などが使用可能ってあったから*/も可だと思ってた。しょうがないから割り算かけ算をループで処理。
int idiv(unsigned int x,unsigned int y){
int i=0;
while(y<x){
x -= y;
++i;
}
return i;
}
int imul(unsigned int x,unsigned int y){
int i=0;
while(y--){
i += x;
}
return i;
}
173 :
170 :2006/04/05(水) 12:59:35
int iswap(int x, int i, int j) { int t,t1,t2,count; int data[] = {0,0x10,0x100,0x1000,0x10000,0x100000,0x1000000,0x10000000}; if(data[i]){ t1 = idiv(x,data[i]); }else{ t1 = x; } if(data[j]){ t2 = idiv(x,data[j]); }else{ t2 = x; } t = (t1 ^ t2) & 0xf; if(data[i]){ t1 = imul(t,data[i]); }else{ t1 = t; } if(data[j]){ t2 = imul(t,data[j]); }else{ t2 = t; } return x ^ (t1 | t2); } 引き算も駄目ってことはないよな?
>>167 によると引き算も無くしたかったらしいな。and, or, xor, not。
175 :
170 :2006/04/05(水) 13:45:23
int idiv(unsigned int x,unsigned int y){ int t0,t1,t2,t3,i; i = 0; switch(y){ case 0: t0 = 0x1; t1 = 0x2; t2 = 0x4; t3 = 0x8; break; case 1: t0 = 0x10; t1 = 0x20; t2 = 0x40; t3 = 0x80; break; case 2: t0 = 0x100; t1 = 0x200; t2 = 0x400; t3 = 0x800; break; case 3: t0 = 0x1000; t1 = 0x2000; t2 = 0x4000; t3 = 0x8000; break; case 4: t0 = 0x10000; t1 = 0x20000; t2 = 0x40000; t3 = 0x80000; break; case 5: t0 = 0x100000; t1 = 0x200000; t2 = 0x400000; t3 = 0x800000; break; case 6: t0 = 0x1000000; t1 = 0x2000000; t2 = 0x4000000; t3 = 0x8000000; break; case 7: t0 = 0x10000000; t1 = 0x20000000; t2 = 0x40000000; t3 = 0x80000000; break; } if(x & t0) i = 0x1; if(x & t1) i |= 0x2; if(x & t2) i |= 0x4; if(x & t3) i |= 0x8; return i; } int imul(unsigned int x,unsigned int y){ int t0,t1,t2,t3,i; i = 0; switch(y){ case 0: t0 = 0x1; t1 = 0x2; t2 = 0x4; t3 = 0x8; break; case 1: t0 = 0x10; t1 = 0x20; t2 = 0x40; t3 = 0x80; break; case 2: t0 = 0x100; t1 = 0x200; t2 = 0x400; t3 = 0x800; break; case 3: t0 = 0x1000; t1 = 0x2000; t2 = 0x4000; t3 = 0x8000; break; case 4: t0 = 0x10000; t1 = 0x20000; t2 = 0x40000; t3 = 0x80000; break; case 5: t0 = 0x100000; t1 = 0x200000; t2 = 0x400000; t3 = 0x800000; break; case 6: t0 = 0x1000000; t1 = 0x2000000; t2 = 0x4000000; t3 = 0x8000000; break; case 7: t0 = 0x10000000; t1 = 0x20000000; t2 = 0x40000000; t3 = 0x80000000; break; }
176 :
170 :2006/04/05(水) 13:47:40
if(x & 0x1) i = t0; if(x & 0x2) i |= t1; if(x & 0x4) i |= t2; if(x & 0x8) i |= t3; return i; } int iswap(int x, int i, int j) { int t,t1,t2; t1 = idiv(x,i); t2 = idiv(x,j); t = (t1 ^ t2) & 0xf; t1 = imul(t,i); t2 = imul(t,j); return x ^ (t1 | t2); } だーめんどくせー。
しかも 163 のままのほうがよっぽど綺麗だしなw
178 :
154 :2006/04/05(水) 15:27:17
ここで、進数変換禁止と言いだしました
179 :
154 :2006/04/05(水) 16:42:39
以下の kをどうしようってことでした。10-16進などを禁止すると未解決難問ってやつになるのかも x[L] = {1,2,3,4,5} for(j=0,j<L,j++) for(i=0,i<L,j++) ... k=iとjと各種演算 UFOcatcher(x,k) <ーxの中のk番目を取り出す関数
加減乗除ありなら 10^i とか 10^j で割ったり掛けたりするだけ
181 :
154 :2006/04/05(水) 17:38:28
問題を間違えた。さらに後出ししたし、あきらめてるけど 昇降順変数i,jと各種演算を用いて、swap(x,i,j)を作る。 以下の kをどうするか、でした。xのシフトの所で上の回答の場合、できないような x[L] = {A,B,C,D} ... for(j=0,j<L,j++) for(i=0,i<L,i++) ... k=iとjと各種演算 UFOcatcher(x,k) <ーxの中のk番目を取り出す関数
182 :
154 :2006/04/05(水) 17:41:53
訂正 >昇降順変数i,jと各種演算を用いて、swap(x,i,j)を作る。 昇降順変数i,jと各種演算を用いて、UFOcatcher(x,k) を作る。
意 味 不 明 に つ き ス ル ー
なんか最近いちいちスルースルーうるさいヤツがいるな スルーするなら黙ってしようよ
185 :
154 :2006/04/06(木) 06:40:41
x[L] = {A,B,C,D} for(j=0,j<L,j++) for(i=0,i<L,i++) k=iとjと各種演算 y[i]=y[i]とUFOcatcher(x,k) <ー xの中のk番目を取り出し、配列 yにこれを格納 next つまり k=2,1,3,4のとき、y[]=BACD k=2,3,1,4のとき、y[]=BCAD となります。このような kを iとjと各種演算から実現する。 これが元々のお題でした。これまでの回答をヒントに考え中です 154は同じ問題に置き換わっているはず。
187 :
デフォルトの名無しさん :2006/04/06(木) 08:42:40
[1] 授業単元:C++ [2] 問題文(含コード&リンク): C++で以下の3つのFunctionを含むプログラムを書きなさい。 1)静的で大きな配列を宣言するFunction 2)スタック上に同じサイズの配列を宣言するFunction 3)ヒープから同じサイズの配列を作るFunction 何回も各サブプログラムを呼び出し、それを表示しなさい。また、その結果を説明しなさい。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C++ [4] 期限:4/10 [5] その他の制限:なし 宜しくお願いします。
>>187 静的に作るのはstatic
スタック上に確保するのは自動変数
ヒープはnew
後は自分で作れ
190 :
デフォルトの名無しさん :2006/04/06(木) 09:24:06
>>185 例えばこういう事か?
#include <stdio.h>
#define L 4
void view(int a[],int size){
int i;
for(i=0;i<size;++i){ printf("%d ",a[i]); }
printf("\n");
}
int main(){
int x[L] = {100,200,300,400};
int y[L];
int k,i;
for(i=0;i<L;++i){
k = (i ^ 1)+1;
y[i] = x[k-1];
}
view(y,L);
return 0;
}
これでkは順に2→1→4→3となりy[]={200,100,400,300}になる。
192 :
デフォルトの名無しさん :2006/04/06(木) 13:29:13
c++です。 The line "using std::cout;", a. ensures that you don't need to type so much. b. allows you to reference the "std::cout" object. c. places the "cout" object into the "std" library. d. None of the above. どれですか?教えてください
aかな。少なくともbやcではない。
194 :
デフォルトの名無しさん :2006/04/06(木) 14:50:22
実行ファイルを開いた瞬間他のプログラムを開くという処理はどうすればいいのか教えてくれ。
195 :
194 :2006/04/06(木) 14:58:24
環境:WinXP VC++
スルー
198 :
154 :2006/04/06(木) 19:11:57
これまでの回答から答えの方針がほぼまとまりつつあります k=iとjと3つの演算(4つかも)でできそうな気がします 回答をくださった方々ありがとでした
[1] 授業単元:なし [2] 問題文(含コード&リンク): not,and,or,xorに新たな演算vip(0011vip0101=1101)を加えて以下の式を短くして下さい 注意:以下の大小かっこはCの記法と異なる {((i=a) And 1) And b} Xor {((i=b) And 1) And a} Xor {((i!=a) And (i!=b)) And i} [3] 環境 [3.1] OS:選ばない [3.2] コンパイラ名とバージョン:選ばない [3.3] 言語:Cがいい [4] 期限:[早いと助かる] [5] その他の制限:なし
VIP嫌いなのでスルー
>>199 ( a xor b xor i ) and not(a and b)
VIPは役に立たなかった...
202 :
199 :2006/04/07(金) 21:27:09
置き換えてみたのですがそれは間違えています
>>199 何の言語で書かれているか知らんが、= と != は比較でいいんだよな?
Not (b vip a)
>>199 (a xor b xor i) and (a xor b)
>>199 (a xor b) and (not i)
(^ω^ )
>>201 で正解じゃないのか?
探索したら、
(i or a) xor (b or (i and a))
が見付かった。vipを含む解としては、
(i xor (not a)) xor (b vip (i and a))
があった。
209 :
201 :2006/04/07(金) 22:50:34
>>208 おー最短の式はそんな形になるんですねー。
自分の場合自力で真理値表を元に書いたけど、
ちゃんと探索しないとやっぱ最短式は出ないか。
210 :
199 :2006/04/08(土) 00:07:48
ただし、i,a,b が 1,0 以外の値もとるものとする。
211 :
199 :2006/04/08(土) 09:26:21
i=2,a=3,b=4 の場合 199の式=2、201,208の式=5 となりました
アップローダに宿題張ってます 誰かHelpしてください 前スレで聞いたけど反応無くて・・・ 突っ込み等もアプロダで![自分的にこっちを汚さない進行
>>213 アドレス貼れ!
どこにあるかわかんねぇよ!
>>1 のところのやつだな
どうやら月曜が期日らしい
これって確か題意がうまく読み取れない日本語でおkレベルの課題だったし 内容自体も面白くないのでスルーした記憶があるな
218 :
199 :2006/04/08(土) 21:14:44
>>212 確かにそう考えるのが自然と思います。後付けじゃないですよ。条件不足の感があるかなと210を書きました
既に211のように拡張して考えるのが常識なのでは。
>>199 Andとか==とかの定義が分からん。
And類がビット演算で、==の結果が0か1だとすると、(i, a, b)=(2, 3, 4)のとき
>>199 の式の値は0じゃないか?
220 :
219 :2006/04/08(土) 21:27:21
==じゃなくて=でした。
>>199 この辺できちんと問題を立て直してもらわないと答えられないんじゃないか?
(1) 演算子の定義は下表の如く<iso646.h>と同様であると仮定してよいか答えよ。
and &&
not. !
or ||
xor. ^
(2) 短絡評価が有効か答えよ。
222 :
199 :2006/04/08(土) 22:34:16
>>219 正しいよ
>>221 (1)&とか。まさかすれ違い?いい宿題のような気も(2)有効
俺が解答者になってるお。これからもそうなるのかお?
> 俺が解答者になってるお。これからもそうなるのかお? \\_ :三ニ=:::::::ヽ :ヽ.ニ=::て.>廴_ 立場をわきまえてなくて 三.ヽ= (⌒ヽ;:;:;,.二) うざいからスルー ニ=-ヽ:ヽ、,∠.^^ぅ 〃,べ= ̄ニ二 ̄ /;:ィリ ノノ ,.へヽ ;:ヘ/ ̄ ̄ ̄Vヽヽ ソ ├┤|
224 :
199 :2006/04/08(土) 22:45:59
だって名無しなんだもん^^わかってない人もいそうだし。前のレスにわかる人がいそうだったんでスルーも仕方ないかな わかる人なんだろーね?you
225 :
221 :2006/04/08(土) 22:51:40
>>222 「&とか」とは?正確にお願いしたい。
C言語(C99。C89については知らない)とC++においては、andは&&ということになっている。
226 :
199 :2006/04/08(土) 22:58:48
本質はそのあたりを無視した所にあると思います。Cでも表現可能と思います
短絡評価が有効ってどういうこと?
228 :
199 :2006/04/08(土) 23:02:13
短縮置換と捉えてしまいました。短絡評価ですか。。?
>>226 ビット演算なのか論理演算なのかくらいは分かるだろうて。
[1] 授業単元:昨日から独学してる明解C言語入門編 [2] 問題文:等価演算子、関係演算子が1または0を生成してる事をたしかめるプログラム #include <stdio.h> int main(void) { int x1,x2; printf("整数1:"); scanf("%d",x1); printf("整数2:"); scanf("%d",x2); if(x1==x2) printf("%d",); else printf("%d",); return(0); } これを元にしてx1==x2が真、偽の時で1、0が生成されるか確かめようと思ったんですが 分かりません。
>>230 printf("%d", x_1 == x_2);
>>230 scanfで代入する変数の前に&つけないと
printf("整数1:"); scanf("%d",&x1);
printf("整数2:"); scanf("%d",&x2);
printf("%d", x1 == x2);
>>232 >>233 出来ました。ありがとございます。
if文の条件式でしか使えないのかと思ってました。
235 :
199 :2006/04/08(土) 23:36:01
>>231 する気が無い(やれたら聞かないと思う)。つーことで終了。残念。試行錯誤してわかったらどこかのスレに書こうと思う
まず道具探しからするかな。瞬間にイメージできないんだよなこういうのって。道は長い
236 :
& ◆HkDahYoHlc :2006/04/09(日) 01:07:46
Assuming that int a has a value of 3 and that integer array b has 7 elements, what is the correct way to assign the value of the sum of 3 and the third element, to the fifth element of the array? a. b[ a + 1 ] = b[ a ] + 3; b. b[ a + 1 ] = b[ a - 1 ] + 3; c. b[ a ] + 1 = b[ a + 3]; d. b[ a + 2 ] = b[ a ] + 3;
237 :
↑教えてください :2006/04/09(日) 01:08:53
お願いします。
238 :
教えてください :2006/04/09(日) 01:10:41
これもお願いします。 What will the following method output, assuming it is called three times in succession? void foo() { static int x = 8; cout << x--; } a. 8 7 6 b. 876 c. 765 d. 8910
239 :
教えてください :2006/04/09(日) 01:12:46
できればこれも・・・。すいません。 What is the pointer syntax equilvalent of the following? book[i] = manuscript[j]; a. *book = *manuscript; b. *(book + i) = *(manuscript + j); c. *book + i = *manuscript + j; d. book + i = manuscript + j;
全部b
春だしなぁ。何か香ばしいのもおるし。
Hello World の出力方法を教えてください><
・ヒタイにHello Worldと書く ・服を全部脱ぐ ・エウレカー!と叫びながら街を疾走
>>244 li $v0, 4
la $a0, str
syscall
str:
.asciiz "Hello, World"
>>244 msg db 'hello, world', 0x0A
msglen equ $ - msg
mov ecx, msg
mov edx, msglen
mov eax, 4
mov ebx, 1
int 0x80
mov eax, 1
mov ebx, 0
int 0x80
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク):双方向リストを使って、アドレス帳を作りなさい。アドレス帳はstring name, int age, char address[100]を含むこと。structではなくクラス構造を使うこと。 [3] 環境 [3.1] OS: Windows XP/Windows2000 [3.2] コンパイラ名とバージョン: VC 6.0 [3.3] 言語: C++ [4] 期限: 4月14日まで [5] その他の制限: STL リストを使わずに。 よろしくお願いします。
>>248 アドレス帳の仕様を詳しく。例えば
・名前を指定しての検索(同じ名前のユーザがいたらどうするか?とか)
・名前を指定しての削除
・新しいユーザの挿入
・全ユーザの表示
・etc...
などの機能で、どんなものが必要かを全部きちんと書いてくれ。
>>249 すいません。重要なところ忘れてました。
詳しい仕様は、
・新しいユーザの挿入(frontへかとbackへかの指定がないのでbackにだけだと思います)。この際ユーザ1人ずつにランダムでint 0000~9999(unique number)の数字を割り当てる。
・名前を指定しての削除
・次のユーザの詳細の表示
・前のユーザの詳細の表示
・名前か追加時に割り当てられた数字での検索。検索結果としてユーザの詳細を表示する。(名前で検索して同じ名前の人が2人いた場合は両方の詳細を表示する)
・そしてそのユーザがアドレス帳に存在しない場合はエラーメッセージを返す。
・ランダムに数字を決め、その数字に1番近い検索結果を表示する。検索結果としてユーザの詳細を表示し、どれだけ結果が近いかを%で表示すること。
です。
dequeだっ。dequeを使うんだ! listじゃないですじょ?
>>251 STLはなるべく使わないで、双方向リストだけでやらないといけないみたいなんです。
Cならまだしも、C++で車輪の再開発するのは気が進まないな
つーか、VC6でプログラミングの授業やる時点でもうダメポ。
>>250 最後の仕様がよくわからない。「近い」って何と何が近いの?%って何の比率?
A = ランダムに決めた数 B = Aに最も近い検索結果 として abs(B-A)/B*100 じゃないの? 知らんけど。
上から3,4番目の仕様もわからん。
次のユーザ、前のユーザって、何を基準にして次とか前とか言ってるの?
>>256 「Aに最も近い」って、何を比較して近いっていってるの?
ランダムに割り振った番号との差の絶対値が最小ってこと?
あと、その計算式だと A = 10, B = 1 のときにパーセントが100を超えるし、
そもそも B = 0 が未定義になる。
↑パーセントが100を超えると頭から煙を吐く厨がいます
>>258 「結果の近さが200パーセント」ってどういう意味?
「結果の近さが50%」も十分に意味不明だな
そうでもないよ
年齢検索とかじゃないんかね、よくわからんけど どっちにしろ%で表すようなもんじゃないけどな
263 :
教えてください :2006/04/09(日) 13:24:33
>>240-242 ありがとうございます。
これもお願いします。
[1] 授業単元:C/C++ Programming
[2]
The method prototype
double mySqrt( int x );
a. declares a method called mySqrt which takes an integer as an argument and
returns a double
b. defines a method called double which calculates square roots
c. defines a method called mySqrt which takes an argument of type x and returns a
double
d. declares a method called mySqrt which takes a double as an argument and
returns an integer
>>263 Cheating will not be tolerated, and will result in a failing grade for the students involved. Cheating includes, but is not limited to, turning in homework assignments that are not the student’s work.
>>263 それぐらいの英語が読めないとマジやばいよ。
267 :
教えてください :2006/04/09(日) 14:02:47
みなさん、ありがとうございます。 [1] 授業単元:C/C++ Programming [2] 1. Pointers may be assigned which of the following? a. all integer values b. an address c. NULL d. both (b) and (c) 2. What is the pointer syntax equilvalent of the following? book[i] = manuscript[j]; a. *book = *manuscript; b. *(book + i) = *(manuscript + j); c. *book + i = *manuscript + j; d. book + i = manuscript + j; お願いします。
>>266 待て、きっと
>>263 は英語は読めるのに答えがどれか分からないんだよ!
余計にやばいけどなw
270 :
教えてください :2006/04/09(日) 14:06:20
3. Assuming that you have an integer instance variable named "fuelLevel", what is the proper code for a "set" method for that instance variable? a. void setFuelLevel(int fuelLevel) { this->fuelLevel = fuelLevel; } b. void setFuelLevel(int fuelLevel) { fuelLevel = fuelLevel; } c. int setFuelLevel(int fuelLevel) { return fuelLevel; } d. int setFuelLevel(int fuelLevel) { this->fuelLevel = fuelLevel; } 4. The line "using std::cout; ", a. ensures that you don't need to type so much. b. allows you to reference the "std::cout" object. c. places the "cout" object into the "std" library. d. None of the above. これらもお願いします。
英語読めませんが何か?
>>270 スレが流れすぎるので、全部まとめてロダにうp
namespace namespace_with_very_long_name{ using std::cout; } という例も考えられるがな。
275 :
教えてください :2006/04/09(日) 14:43:41
最後にこの二つお願いします。 1 How must the following code be modified in order for the text "Hello World!" to be displayed on the console? #include <iostream> using std::cout; using std::endl; class HelloWorld { public: // Default Constructor definition HelloWorld() {} void displayMessage() {cout << "Hello World!" << endl;} }; int main() { HelloWorld helloWorld; return 0; } a. In the main method, the line HelloWorld helloWorld; should be changed to read HelloWorld helloWorld("Hello World!"); b. The line "displayMessage();" should be placed in the body of the constructor. c. The code is fine as is; no changes are necessary. d. The following #include directive needs to be added: #include "HelloWorld.h"
276 :
教えてください :2006/04/09(日) 14:44:13
2 Which of the following is not true? a. the first element of an array is the zeroth b. the last element of an array is the array size - 1 c. the position number contained within square brackets is called a subscript d. a subscript cannot be an expression.
お前ら日本語使ってください どんなやりとりしてるのかさっぱりです
>どんなやりとりしてるのかさっぱりです 誰だ!そんなこと言う香具師は?!
俺
281 :
248 :2006/04/09(日) 17:56:02
>>250 はい。最後のが少し意味が分からないんです。
たぶん、もしランダムで決められた数字が500だとしたら、500を探し出して、500が存在した場合は100%。
500がなくてもし499が存在した場合は、499を表示する。
%の計算はたぶんですけど、(ランダムに決めた数/最も近い結果)*100じゃないでしょうか?
>>262 年齢検索は書かれていませんでした。
はい。私も最初読んだとき1番最後の仕様は変だなって思いました。
282 :
248 :2006/04/09(日) 17:59:02
すいません。 %計算 (最も近い結果/ランダムに決めた数)*100 の間違いでした。
284 :
248 :2006/04/09(日) 18:18:24
>>283 そうします。
とりあえず1番最後以外を教えていただいてもよろしいでしょうか?
>>284 「次のユーザ」と「前のユーザ」って、何に対して次と前なの?
286 :
248 :2006/04/09(日) 18:23:49
>>285 current pointerが指してるノードの前のノードと次のノードだと思います。
>>286 少なくとも
>>250 の仕様ではユーザが生のカレントポインタを得ることは無さそうだが。
288 :
248 :2006/04/09(日) 18:35:59
>>287 え・・・。
すいません、それも確認してきます。
289 :
248 :2006/04/09(日) 20:38:14
>>287 確認してきました。
「次のユーザ(というかアドレス帳?)」と「前のユーザ」はやっぱり、リンクリストのカレントポインタを前後に動かしてそのポインタが指しているデータを表示するということだそうです。
そして1番最後の最も近い結果というのも、ランダムに決めた数字との差が1番近い検索結果を表示するということらしいです。
双方向リストなので、新しくユーザを挿入する場合は新しくノードを作り、nextポインタとpreviousポインタをそのノードに設定した後にcurrentポインタを新しいノードに設定するんですよね?
削除する場合はcurrentポインタを削除したいノードに設定すると習いました。
そんな感じでそのcurrentポインタが現在指しているノードの前後のノードのデータを表示するんだと思っているんですが、違うでしょうか?
>>289 あー、なるほど。双方向リスト自身に今どのノードに着目しているかを表す
「カレントポインタ」って奴を持たせておく、ってことか。
追加で質問。
・
>>250 の要素の追加の "back" ってのは、カレントポインタの後?それともリスト自体の末尾?
・名前を指定して削除するときカレントポインタは移動する?存在しなかった場合は?
・検索のときカレントポインタは移動する?存在しなかった場合は?複数あった場合は?
・一番近い要素を見つけるときはカレントポインタは移動する?
291 :
教えてください :2006/04/09(日) 21:29:27
みなさん、お世話になりました。ありがとうございます!!
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): 1,0で成り立つ既約多項式を50個生成するコードを作りなさい [3] 環境 [3.1] OS:ウィンドウズ [3.2] コンパイラ名とバージョン:BCC [3.3] 言語:C [4] 期限:[課題を理解できるまで] [5] その他の制限:なし
なめんな
>>292 オレ理解できた。
期限は過ぎたな。
じゃ、次。
295 :
248 :2006/04/09(日) 21:50:27
>>290 そうです。
追加質問についてですが、
・backという言葉がややこしかったですね。
うまく説明できないんですけど、リストを始めから空かどうかチェックして、ノードが空だったらそこへ挿入、そうでない場合は次のノードをチェックという感じでした。
なのでリスト自体の末尾というよりは、カレントポインタの後といったほうがいいかもしれないです。
・名前を指定して削除する場合、カレントポインタは削除したいノードに移動させ、削除後ネクストポインタが指している次のノードに移動させるようです。
存在しなかった場合はメッセージで存在しないことを伝えればいいんだと思います。
・検索の場合、カレントポインタを1番最初のノードへ移動させデータをチェック、そしてまた次のノードへポインタを移動しチェックしていく。
名前で検索して存在しなかった場合はエラーメッセージを、複数あった場合は全て表示。
割り当てられた数字で検索して存在しなかった場合もエラーメッセージを表示させる。数字で検索の場合、特定の数字を割り当てられているので複数あるというのはありえないため、結果は常に1つになります。
・1番近い要素を見つけるときも、検索時同様カレントポインタを移動させると思います。
296 :
292 :2006/04/09(日) 22:41:45
>>292 「1,0 で成り立つ既約多項式」ってのは、体 K = GF(2) = {0,1} 上の既約多項式って意味でいいの?
298 :
292 :2006/04/09(日) 23:11:12
そうです
>>298 表示あたりひどい手抜き実装だが
int irr(int x) {
return x & 1 && (((x * 0x0101010101010101ULL) & 0x8040201008040201ULL) % 0x1FF) & 1;
}
void print(int x) {
int i;
for (i = 0; x > 0; ++i, x >>= 1)
if (x & 1) printf("X^%d+", i);
printf("\b \n");
}
int main() {
int x, cnt;
for (x = 0, cnt = 0; cnt < 50; ++x)
if (irr(x)) print(x), ++cnt;
}
300 :
299 :2006/04/09(日) 23:29:36
ごめん嘘勘違いしてた
301 :
299 :2006/04/10(月) 00:11:53
>>298 今度は大丈夫。
int ord(int x) {
int k = 0;
while (x >>= 1) ++k;
return k;
}
int rem(int x, int y) {
while (x >= y) x ^= (y << (ord(x)-ord(y)));
return x;
}
void print(int x) {
int i;
for (i = 0; x > 0; ++i, x >>= 1) {
if (x & 1) {
if (i == 0) printf("1+");
else if (i == 1) printf("X+");
else printf("X^%d+", i);
}
}
printf("\b \n");
}
int main() {
int X[50], x, k = 0, i;
for (x = 2; k < 50; ++x) {
int irr = 1;
for (i = 0; i < k; ++i)
if (rem(x,X[i]) == 0) irr = 0;
if (irr) X[k++] = x, print(x);
}
}
return x & 1 && (((x * 0x0101010101010101ULL) & 0x8040201008040201ULL) % 0x1FF) & 1;
303 :
302 :2006/04/10(月) 00:14:41
ミスった。
>>299 俺もよく分かってないんだが、
-return x & 1 && (((x * 0x0101010101010101ULL) & 0x8040201008040201ULL) % 0x1FF) & 1;
+return x & 1 && ((((x & 0x55555555) * 0x0101010101010101ULL) & 0x8040201008040201ULL) % 0x1FF) & 1;
でいいかな?
304 :
299 :2006/04/10(月) 00:18:34
>>303 駄目。そもそも 299 は既約多項式を求めていなかった。
このスレは毎年この時期になるといつも程度が(ry
C言語覚えたての大学生が混じるからだろ
301 って程度低い? 俺結構凄いと思うんだけど
そもそも既約他項式て何w 高校で習うの?
たしか因数分解不可能な多項式のことだった気がする
ドイツ語でHello World の出力方法を教えてください
>>310 printf("∬∧βε ∂ζ⊂η");
313 :
デフォルトの名無しさん :2006/04/10(月) 15:16:52
どうしても分からないのでよろしくお願いします。 Javaの配列について、以下の問に答えよ。 ・int型の要素を50個持つ配列(配列名arr)を作るためのJavaの命令を書け。 ・配列arrの値を全て0に初期化するための命令を,for文を用いて書け。 ・配列arrの要素を全て画面に表示するための命令を,for文を用いて書け。 ・配列arrの7番目の要素の値を-1に書き換えるためのJavaの命令を書け。
>>313 int[] arr = new int[50];
for (int i = 0; i < arr.length; ++i) {
arr[i] = 0;
}
for (int i = 0; i < arr.length; ++i) {
System.out.println(arr[i]);
}
arr[6] = -1;
throw new NullPointerException("ぬるぽ");
317 :
248 :2006/04/10(月) 17:47:26
もう1度書いておきます。 誰か教えてください、お願いします。 [1] 授業単元:プログラミング [2] 問題文(含コード&リンク):双方向リストを使って、アドレス帳を作りなさい。アドレス帳はstring name, int age, char address[100]を含むこと。structではなくクラス構造を使うこと。 [3] 環境 [3.1] OS: Windows XP/Windows2000 [3.2] コンパイラ名とバージョン: VC 6.0 [3.3] 言語: C++ [4] 期限: 4月14日まで [5] その他の制限: STL リストを使わずに。 双方向リストに今どのノードを指しているかを表すカレントポインタを持たせる。 下の仕様での検索時、挿入時、削除時では全てこのカレントポインタを使用する。 仕様: ・新しいユーザの挿入(ノードが空かどうかチェックし、空であればそこへ挿入、そうでなければ次のノードへ移動))。 この際ユーザ1人ずつにランダムでint 0000~9999(unique number)の数字を割り当てる。 ・名前を指定しての削除(カレントポインタを削除したいノードへ移動)。 存在しない場合はエラーメッセージを返す。 ・次のユーザの詳細の表示(カレントポインタの指している次のノードのデータ) ・前のユーザの詳細の表示(カレントポインタの指している前のノードのデータ) ・名前か追加時に割り当てられた数字での検索(カレントポインタを1番最初のノードへ移動させチェック、そしてまた次のノードへ移動)。 検索結果としてユーザの詳細を表示する。 存在しない場合はエラーメッセージを返す。(名前で検索して同じ名前の人が2人いた場合は両方の詳細を表示する) ・ランダムに数字を決め、その数字に1番近い検索結果を表示する。検索結果としてユーザの詳細を表示し、どれだけ結果が近いかを%で表示すること。 %=(1番近い結果/ランダムに決めた数字)*100 よろしくお願いします。
その仕様だとランダムに決めた数字が0のときに死亡。
>>318 新しいユーザの挿入時にintで0からの数字を割り当てられててもダメでしょうか?
まあ、そのへんは出題者もアフォっつーことで適当に処理すりゃいいんでない
>>320 その方向でお願いします。
あれでしたら1番最後の仕様は無視してくださってもいいので。
>>317 設問はそれで全部でいいの?
中途半端に乗せないで丸々載せてくれないと勘違いするかもよ?
なんで name はstringでaddressはそうじゃないんだ?
>>317 仕様ってのは全部アドレス帳の機能でいいのか?
カレントポインタを削除対象のデータまで移動させたり
最後の仕様のランダムな数字を決めるのもアドレス帳の機能?
325 :
317 :2006/04/11(火) 00:59:51
>>322 はい。これで全部です。
>>323 こう書いてあったので理由は分かりませんが、nameは姓 名ではなくニックネームのようなもののみや下の名前だけでいいみたいです。
>>324 はい。仕様は全てアドレス帳の機能です。
カレントポインタを移動させたりするのはアドレス帳の機能というより、双方向リストの機能だと思います。
リストクラスの中にカレントポインタを定義して移動させるように習いました。
アドレス帳の機能として削除を選び、名前を指定したときにリストがその名前を探し出してカレントポインタを移動するので双方向リストの機能だと考えています。
最後の仕様のランダムな数字を決めるのもアドレス帳の機能です。
326 :
187 :2006/04/11(火) 04:13:28
>>326 何を表示するの?
「それ」と書かれても該当しそうなのは「Function」くらいしか見つからないけど
「関数を表示する」とは普通言わないわけで。
サブプログラムを呼び出す部分(メインプログラム?)もC++で作るんだろうか
329 :
187 :2006/04/11(火) 08:22:58
>>327 すみません。
「それ」は数字のことです。
どうかお願いします。
何の数字だよ、おい。 void Function1() {static int array[BIGNUM];} void Function2() {int array[BIGNUM];} void Functino3() {int * array = new int[BIGNUM]; delete array[];}
331 :
デフォルトの名無しさん :2006/04/11(火) 19:45:28
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): 長いので、次のレスに。 [3] 環境 [3.1] OS:windowsXP [3.2] Borland C++ 5.5.1 for Win32 [3.3] 言語:C言語 [4] 期限:[2006年4月13日まで] [5] その他の制限:まだ基本しか習ってません。週1で半年しかやってないので。現在大学2年です。
332 :
331 :2006/04/11(火) 19:46:20
入力として ●.. 英文が入っているテキストファイルの名前 ●.. ページの幅(文字数)と行数 が与えられるものとする。 このテキストファイルの内容は,英単語が1 つ以上の空白又は1 つの改行によって区切 られた段落から構成される。段落同士は,1 つ以上の空行によって区切られる(2つ以上, 改行が連続していれば段落が変わったと見なす)。 テキストファイルから単語を読み込み,その単語を行に並べ,行が一杯になったら表示 をする(画面に表示する,あるいは出力ファイルに書き込む),という処理を繰り返してい く。段落が終わっても表示をする。 次の関数を記述して,このプログラムを書きなさい。 void next_word(char word[ ]) この関数を呼ぶと,文字列word にテキストファイルが 格納されて戻ってくる(皆さんは,配列をこのように使うことをやったことがないかもし れません。配列を宣言して,中身を入れずに関数に渡して,関数の中で中身を入れます。 関数から戻ってくると中身が入っているということになります)。文字列word には,空白 や改行が取り除かれて格納されること。なお,テキストファイルへのファイルポインタは, グローバル変数として定義して,この関数内で利用してよい。 void print_line(char line[ ], int num_of_words)この関数を呼ぶと,行として出力すべき文字 列line を出力ファイルに出力する。num_of_words は,この行に入っている単語数を渡す。 わざわざ関数にするのは,この後の拡張に対応するためである。なお,出力ファイルへの ファイルポインタ及びページ幅は,グローバル変数として定義して,この関数内で利用し てよい。 自分の知識の無さを恥じています。正直分からないので、本当に誰か助けてください。
>>332 >文字列word にテキストファイルが格納されて戻ってくる
ほんとにこれで合ってるのか?
だとしたら出題者のレベルを疑うが。
next_word()なら現在のファイルポインタが指す位置から見て
直後の1単語を取ってくるのが自然だろう
それにバッファだけ渡すって設計もなんだかな
とりあえず原文のままうpしろ
それが原文なら出題者を窓から投げ捨てろ
「入力として」というのは ・コマンドライン引数 ・scanfとかその類 のどっち? 多分講義ではこれまでの課題からどちらであるかは自明なのだろうが、 こういう場で聞くときにはそうした自明の条件も明示する必要がある。
335 :
331 :2006/04/11(火) 20:54:43
入力として、はscanfのほうです。 問題は原文のままです。基本的に長文打つのは苦手なので・・・コピペです。
出題者窓逝きだー
337 :
331 :2006/04/11(火) 20:57:34
今,皆さんが英文の文書を作るときには,Word などのワープロソフトを使うだろう。ほ んの20 年くらい前までは,英文の文書を作るときには,機械式のタイプライターを利用し ていた。タイプライターで英文を作成すると, ●.. 文字の幅が同じである。 ●.. ページの右端に来て単語が入らなくなると改行する。 ということになる。このような処理をするプログラムを作成したい。 プログラム1〜3まで順次拡張していく。それぞれプログラムを作成し,テストデータ で結果を確認する必要がある。 プログラム2,3はやらなくてOKになったので省略しました。
読みにくいな
339 :
331 :2006/04/11(火) 21:01:30
これが出来ないと講義の受講が認めない⇒留年決定 なんです・・・ 問題定義が本当にあいまいでマジ辛いです・・・助けてくださいorz
俺には出題者が何を言いたいのかわからない orz 理解に苦しむ
出題が曖昧な上、いろいろとおかしいので誰もやらないと思われ
問題定義があいまいなのはここで相談してもあいまいなまま。 出題者に確認してこい。 つーか、そんな講師の単位とってもクソの役にも立たんな。 まぁそんな大学選んだ時点で藻前の敗北だ。
∧∧ 〜´ ̄ ̄(,,゚Д゚) <出題者!問題の意味を教えろゴルァ! UU ̄UU
344 :
331 :2006/04/11(火) 21:09:10
大学名いってもいいのかな・・・?
>>339 曖昧だとおもってたなら確認すりゃいいだろ
普通は聞けばこれはこういう意図だと教えてくれるはず
それすらないなら窓決定だな
大学名キボーン
347 :
331 :2006/04/11(火) 21:15:54
専修大学ネットワーク情報学部です ああ・・・言っちゃったorz
先生は? メールアドレスは?
349 :
331 :2006/04/11(火) 21:19:48
え?まさかメールする気?
通報しますた(´・д・`) とかやるつもりはないが そんな教授の授業なんて受けない方がいいと思う 他で単位をどうにかできるなら留年覚悟でそれは捨てろ 他でもどうにもできないなら諦めろ
曖昧だとわかっているのなら質問すればいいよ。 先生と話すのが苦手なら友達に聞くとか。 友達いないならこんなとこで質問してないで一人で生きていけるだけの力つけないとこの先つらいぞ。
捨てアドレスでメールします。
353 :
331 :2006/04/11(火) 21:29:35
松永って人です メールアドレスは多分大学のhpのどこかにあります・・・
代ゼミランキングで偏差値50〜52 偏差値マンセーじゃないけれど、やっぱそれなりの大学にはそれなりの講師しかおらんな
松永ハケーン!
356 :
331 :2006/04/11(火) 21:39:21
友達はいます・・・ でもみんな、問題の意味が分からずまだ終わってないです
意味不明な日本語つかう講師はどこの大学でもいるけどな。 だから曖昧なところがわかってるんだから質問すればいいって言ってるのに。 高い金払ってるんだから怒られるわけないじゃん。 とりあえず意味不明なところを列挙するから聞いて来い。 ・画面に表示する,あるいは出力ファイルに書き込む 画面に表示するか、出力ファイルに書き込むかはどうやって選択するのか? ・文字列word にテキストファイルが格納されて戻ってくる ファイルポインタが指している次の単語の間違いではないのか? ・行として出力すべき文字列line を出力ファイルに出力する。 結局画面には表示しなくていいのか?出力ファイルの名前はソース中に埋め込むのか?それともユーザに入力させるのか?
359 :
357 :2006/04/11(火) 21:45:01
出力先をリダイレクトで切り替えるという解釈をするなら一つ目と三つ目はいいよ。 二つ目はあきらかに意味不明。
誰かメールした?
361 :
357 :2006/04/11(火) 21:54:48
void print_line(char line[ ], int num_of_words) これって void print_line(char *line[ ], int num_of_words) の間違いじゃね?
学生向けの宿題の仕様すらまともに書けない無能が、 オブジェクト指向技術を用いた情報システムの構築,情報検索・情報共有の支援と教育への応用 という大層な研究テーマを掲げているんですか。
●.. ページの幅(文字数)と行数 良く見たら行数ってのもなににつかうのかわからん。
件名何が良い?
「あんたの無能さについて」
OK
367 :
デフォルトの名無しさん :2006/04/11(火) 22:04:50
お前ら本当に凄いな・・・ 俺にはそんなメールする勇気ないぞ
なんか前に見たことがある気がする。 前に見たときも問題の意味がサッパリわからなかったが。
じゃ俺はゲームするから一旦落ちるわ
>>371 line[ ]に出力する文字列がそのまま入ってたらnum_of_wordsの仕様用途が意味不明じゃね?
374 :
デフォルトの名無しさん :2006/04/11(火) 22:22:32
講義んときなんかいわれそうだな いたずらメール送ったのは誰だ!とか
エスパーぶりをフル回転させてちょっとやってみたが、かなり苦しい。 無理やり合わせようとすると、とてもじゃないが331の頭で理解できるとは思えん。
376 :
331 :2006/04/11(火) 22:38:08
377 :
317 :2006/04/12(水) 00:17:31
378 :
317 :2006/04/12(水) 02:24:07
訂正です。 1つのデータというより、1つのデータフィールドは入れられるのですが、データフィールドを3つ(string name, int age, char address[100])にして同じように機能させるやり方がわかりません。
>>376 >なぜかファイルが読み込めないので理由を教えてください。
fopenがnext_word、print_line内にあるのが原因。
next_word、print_lineは繰り返し何度も呼び出されるため、その都度fopenが実行されている。
main関数内の、for(i=0;i<linenum;i++){の行の前に移動させればOK。
ソース見てようやく何をやりたいのか分かった。ろだの1737に修正をあげといた。関数が若干指定と違うが。
380 :
331 :2006/04/12(水) 07:10:41
>>379 さん
ありがとうございます!
もしよければ・・・空白と改行を取り除いたやつも作ってくれれば助かります。
381 :
331 :2006/04/12(水) 07:13:08
文章ちょっと変だった・・・ 空白と改行は取り除かれるようにしたソースも、でした。
382 :
331 :2006/04/12(水) 16:58:55
>>382 面倒なんでコンパイル通してないが
>line[0-256]='\0';
こんな文法無かった気がするんだが
んで、それだとループ回る毎にlineの値が破棄されてるがいいのか?
それと細かいことだがこうした方がいい
+ now_lines+=strlen(word);
- now_lines=strlen(word)+now_lines;
使えるところでは複合代入演算子使え
その方が可読性も向上するし、ミスも減る
384 :
331 :2006/04/12(水) 17:34:44
ラインに単語がたまったので、プリントしたあとに中を空にしようとおもってそうしたんですが、やっぱ違ったのかな・・・
385 :
デフォルトの名無しさん :2006/04/12(水) 17:42:29
[1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク): x=a;b+c, y=2a-b で与えられ、a、b、cはそれぞれ1から100までの整数値をとる。 x=n, y=n(nは1から100)となるa,b,cの組み合わせの総数C(n)を求めよ。 ただし、a,b,cは全て異なる整数である。 [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン:自由 [3.3] 言語:C [4] 期限:[2006年04月30日まで] お願いします!
387 :
デフォルトの名無しさん :2006/04/12(水) 17:49:34
すいません、x=a+b-c でした。
>>386 おまえが数学的な表現になれてないだけじゃないか?
x(a, b, c) = a + b - c
y(a, b, c) = 2a - b
のとき、
{(a, b, c) | 1 <= a b c <= 100, n = x(a, b, c), n = y(a, b, c), a != b, a != c, b != c}
の要素の数をnで表せって事だろ。
>>385 # include <stdio.h>
int c(int n)
{
int a, b, c, sum;
sum = 0;
for(a = 1; a <= 100; a++)
for(b = 1; b <= 100; b++)
for(c = 1; c <= 100; c++)
if(a + b - c == n && 2 * a - b == n && a != b && b != c && a != c)
sum++;
return sum;
}
int main(void)
{
int n;
printf("Input n: ");
scanf("%d", &n);
printf("C(n) = %d\n", c(n));
return 0;
}
390 :
379 :2006/04/12(水) 18:28:02
>>381 >空白と改行は取り除かれるようにしたソース
入力ファイルにある空白と改行は無視して文字を詰めて出力するのか?
なら、379で上げたソースの17行目(case ' ':のすぐ下のword[i++] = c;)を1行だけ削除。
391 :
331 :2006/04/12(水) 18:38:48
ありがとうございます! マジ助かります・・・こんな問題で留年とかこわいので
メールこねぇな・・・ やっぱ件名がやばかったかな? 件名「あんたの無能さについて」
393 :
331 :2006/04/12(水) 19:56:38
まじでおくったんだw 講義んときなんか言われたら教えるね
394 :
385 :2006/04/12(水) 22:22:26
遅くなったけどありがとうございました! 明日大学で確認してみます。
このスレのやりとり、教授も見てるかもな( ̄ー ̄)ニヤリ
396 :
教授 :2006/04/12(水) 22:57:03
宿題マダー?
教授とかはこういう所を見ない希ガス
TAは見てるぜ!
ところでこれ知ってる人いる? これは俺が小学生のときに何日か流行ったんだ。 「あたったあたったハワイのパチンコ」
漏れのところは 国際パチンコだったが
知らない人の為に。 「あたったあたったハワイのパチンコ」 ↓ 「あ」「ハ」「パ」を取って読む メールこねぇな・・・ 捨てられたかもな
あたった あたった ハワイの パチンコ ヤッターマン コーヒー ライター
エロ四天王、東を司る神の降臨だー
[1] 授業単元:c [2] 問題文(含コード&リンク):キーボードから20個の文字を入力し、英大文字、英小文字、その他の小文字の個数種類別にを表示する。 [3] 環境 [3.1] Linux [3.2]gcc [3.3] 言語:c [4] 期限: [無期限] [5] その他の制限: 無し よろしくお願いします。
404 その他の小文字ではなく、その他の文字です。まちがえました。。
なんでこの手の、入力させて種類ごとにカウントとか、そういうの絶えないんだろ('A`)
プログラミング言語初学者に対して教育的だから。
int lower=0, upper=0, other=0; int i; int c; for (i=0; i<20;i++) { c=getchar(); if (islower(c)) lower++; else if (isupper(c)) upper++; else other++; } あとは自分で考えろ('A`)
[1] 授業単元:プログラム [2] 問題文(含コード&リンク):コマンドライン引数からアルファベット小文字だけからなる文字列のみを選んで、 すべての文字を対応する大文字に変換し、 一行に一つずつ標準出力に出力するプログラムを作れ [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: [3.3] 言語: C [4] 期限: :2006/04/16 [5] その他の制限: 特になし
if(0!=islower(c) c=c-
#include <stdio.h> int main(int argc, char *argv[]) { int i, j; for (i=1; i<argc; i++) { for (j=0; argv[i][j]!='\0'; j++) if (!islower(argv[i][j])) goto NEXT; else argv[i][j] = toupper(argv[i][j]); printf("%s\n", argv[i]); NEXT: ;} } なぜかNEXT:の次の行で、}の前のセミコロン抜かすとコンパイラにおこられたんだがナンデー(;´Д`)
っていうかbreakでいいのかコレorz なぜか2段ごとぬけなきゃいけないとおもいこんでいたorz
たびたびすまん、やっぱりGOTOいるわwwwww
>>411 ラベルは文に名前を付けるものだから、たとえ空文でも文が必要。
int main(int argc, char **argv) { int i; for (i = 0; i < argc; i++) {
>>414 あー、そういうことか
んじゃもう少し正しく(?)するには
NEXT:
;
}
っていうことか
>>415 めんどくさかったんだもん(・ω・)
途中で書き込んじゃったよ('A`
>>409 #include <stdio.h>
#include <ctype.h>
int main(int argc, char **argv) {
int i, j;
for (i = 1; i < argc; i++) {
j = 0;
while (islower(argv[i][j]))
j++;
if (argv[i][j] == '\0') {
j = 0;
while (argv[i][j] != '\0')
putchar(toupper(argv[i][j++]));
putchar('\n');
}
}
return 0;
}
420 :
デフォルトの名無しさん :2006/04/14(金) 01:43:34
課題は適当な初期値(得点、順位)を与えてそれを 正しい順位に直すプログラムを作るというものです。 つまり例えば(得点、順位)=(10、1)(30、1)(20,1)の3つの値を(10、3)(30,1)(20,2)に変換するというものです。 rank1関数は問題に与えられていたのでいじらず自分で作るのはmain関数のみです。 下の私が考えたmain関数では実行結果が 得点は10、順位は5位です。 得点は100、順位は2位です。 得点は80、順位は2位です。 得点は30、順位は3位です。 得点は60、順位は2位です。 となり、なにかおかしいです。わかる方アドバイスお願いします。 環境 OS:Linux コンパイラ名とバージョン: gcc 言語: C 期限: できれば明日中で
421 :
デフォルトの名無しさん :2006/04/14(金) 01:45:33
>>420 の私の考えたプログラムです。
#define LIST_SIZE 5
#include<stdio.h>
struct data{
int rank;
int score;};
void rank1(struct data *z,int n){
int i,j;
for(i=0;i<n;i++)
z[i].rank=1;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
if(z[i].score<z[j].score)
z[i].rank++;}
/*たぶんここから下がおかしいんだと思います。*/
int main(void){
int i;
struct data z[LIST_SIZE]={{0,10},{0,100},{0,80},{0,30},{0,60}};
for(i=0;i<LIST_SIZE;i++){
rank1(&z[i],LIST_SIZE);
printf("得点は%d、順位は%d位です。\n",z[i].score,z[i].rank);
}
return(0);
}
422 :
デフォルトの名無しさん :2006/04/14(金) 01:49:47
フラグってなんですか?
>>420 添削はすれ違い。
>>421 rank1の呼び出しはforに入る前に、
rank1(z, LIST_SIZE);
とすべき。
>>422 質問はすれ違い。
424 :
デフォルトの名無しさん :2006/04/14(金) 02:02:57
>>423 即レスありがとうございます。中に入れた場合は何が不都合になるんですか?
>>424 だからスレ違いだと言ってるだろ。
即刻消えろ。
誘導されて来ました。 10kバイト程度のバイナリファイルから特定の部分(例えばFF E3で始まり、04 0Fで終わるような区間)だけを、1バイトずつint型の配列に入れていく方法をご教授願います。 OSはXPでメモりは1Gです。C言語でおねがいします。
[1] 授業単元: [2] 問題文(含コード&リンク): コマンドライン引数から十進整数値として解釈できる文字列のみを選び、 値が小さい順に並べ替えて、一行に一つずつ標準出力に出力するプログラムを書け。 ただし、十進整数値として解釈できる文字列とは、 正規表現 ^[-+]?[0-9]+ にマッチするものとする。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: [3.3] 言語: c [4] 期限: [5] その他の制限: qsort()を使う
>>428 grep '^[-+]?[0-9]+' |sort -n
428を素直に解釈すりゃあ大小の比較は整数値でするよな。 sortって、その条件満たしてるか?
#include <stdio.h>
int islarger(int *l, int *r) {
return *l - *r;
}
int isdigitstr(char s[]) {
/* こ こ は だ れ か に ま か せ た! */
}
int main(int argc, char *argv[]) {
int num[200];
int n = 0;
int i;
for (i=1; i<argc; i++)
if (isdigitstr(argv[i])) {
num[n] = atoi(argv[i]); n++;
}
qsort(num, n, sizeof(int), islarger);
for (i=0; i<n; i++)
printf("%d\n", num[i]);
}
>>429 そっちのほうが遥かにらくだなあwww
>>430 どゆこと?
islargerって関数名はちとまずかったか・・・まあいいや(´・ω・`)
int isdigitstr(char s[]) { return !*s || isdigit(*s) && isdigitstr(s+1); }
435 :
431 :2006/04/14(金) 15:22:09
#include <stdio.h> #include <stdlib.h> #include <string.h> int not_zero(const char *p){ while(*p)if(*p++!='0')return 1;return 0; } int compare(const void *pl, const void *pr){ const char *lhs = *(const char**)pl;const char *rhs = *(const char**)pr; int sign = 1;if(*lhs=='+')++lhs;if(*rhs=='+')++rhs; if(*lhs=='-'&&*rhs!='-')return(not_zero(lhs+1)&& not_zero(rhs))?-1:0; if(*lhs!='-'&&*rhs=='-')return(not_zero(lhs)&¬_zero(rhs+1))?1:0; if(*lhs=='-'&&*rhs=='-') sign = -1;if(*lhs=='-')++lhs;if(*rhs=='-')++rhs; while(*lhs=='0')++lhs;while(*rhs=='0')++rhs;return strcmp(lhs, rhs)*sign;} int match(char *s){char *p=s;if((*p<'0'||'9'<*p)&&*p!='+'&&*p!='-')return 0; while(*++p)if(*p<'0'||'9'<*p)return 0; return 1;} int main(int argc, char *argv[]){ char **array = malloc(sizeof(char*)*(argc-1)); int i,size=0;for(i=1;i<argc;++i)if(match(argv[i]))array[size++]=argv[i]; if(size){qsort(array,size,sizeof(char*), compare);for(i=0;i<size;++i)printf("%s\n",array[i]);} free ( array );return 0;} atoi使うとintの範囲超えるときに判定できんぞ
436バグ non_zeroは && じゃなくて || だ(なんか文字変わっとるし) if(*lhs=='-'&&*rhs!='-')return(not_zero(lhs+1)||not_zero(rhs))?-1:0; if(*lhs!='-'&&*rhs=='-')return(not_zero(lhs)||not_zero(rhs+1))?1:0;
>>430 普通のsortは-nを指定すれば数値比較になる。
>>429 それを書くなら、
echo $* |grep '^[-+]?[0-9]+' |sort -n
までやらんと。
>>438 わりぃ。Linuxerじゃないんで無知った。thnk。
よく読んでないけど、
>>436 のやつはintやlongに変換しないで文字列のまま扱っているってことかな?
んできちんと比較関数は文字列の表現のままでがんばっている、と
>>439 どうでもいいが、私もLinuxは触ったことがない。
#仕事でSolarisとCygwin、自宅でCygwinは使っているが。
>>440 桁数制限なしに比較する妥当な手段だね。
>>436 を普通に実行させてみたら(もちろん
>>437 の修正もして)
1111111111111
2
3
4
5
になったなw
まあ、compareちょっといぢりゃなんとかなるんだろうけど
>>442 strcmpは長さ比較はしてくれないんだっけ(とか考えながら作って確かめるの忘れた)
さらに2ヶ所訂正
int sign=1; → int sign=1,llen,rlen;
return strcmp(lhs,rhs)*sign; → llen=strlen(lhs);rlen=strlen(rhs); return (llen==rlen)?strcmp(lhs,rhs)*sign:llen-rlen;
入力文字列がめっさ長いときはうまく動かんけど、そもそもコマンドラインとして受け付けないんちゃうかな。
>>443 あと細かいところだが、matchのとこ while(*++p) の手前に
if((*(p+1)<'0'||'9'<*(p+1))&&(*p=='+'||*p=='-')) return 0;
これがないと "+" "-"が数値0として扱われる
>>444 おお、確かに。そのパターンは考慮してなかった。Veryさんくー。
PCだけが友達ですが何か?
>>447 なるほそ。分かったことは
・'+'が先頭にあるとき
・小数点があるとき
に仕様をみたさないっぽい?
そーゆー問題を解くのに関しては、オートマトン理論を学んだほうがいいよ。 情報工学系の大学行けばやるとは思うけど、そうでないならば。
450 :
438 :2006/04/15(土) 02:02:51
>>448 後者は問題の性質上無問題。
前者は忘れてた。
訂正版:
echo $* |grep '^[-+]?[0-9]+' |tr -d '+' |sort -n
#grepとtrをsedで置き換えられる気もするが今眠い。
おまえが正規表現得意なのはわかったから、いい加減スレ違いバカ消えろ。
[1] 授業単元: プログラム演習基礎 [2] 問題文 入力した10個の数字について、最大値と最小値を表示する。 有効な入力数字は0以上20未満とする [3] 環境 [3.1] OS: Linuxです [3.2] コンパイラ名とバージョン: gccです。バージョンは不明・・・ [3.3] 言語:C [4] 期限: 申し訳ないですが明日までです [5] その他の制限: 習ったのはif文とswitch文だけです。 よろしくお願いします
forとかwhileは禁止なのか? printf,scanfはさすがにOKだよな?
俺だったら習ってなかったとしてもforやwhileぐらい使う 情報系に進むやつなら高校までにC言語ぐらい触っててもおかしくないだろ?
#include <stdio.h> int main() { int i, n, min, max; for (i=0; i<10; i++) { scanf("%d", &n); if (i == 0) min = max = n; if (n < min) min = n; if (n > max) max = n; } printf("min: %d, max: %d\n", min, max); } コンパイルしてないからあってるかしらんけど多分こんなかんじ for使ってるけど「予習しますた!」って威張ればおk
しまった、「有効な入力数字は0以上20未満とする」の部分見落としていたけど、 ここは自分でなんとかしような
よしここは再帰でforの(r void loop(int*min,int*max,int n,int *m){ if(n==0)return; scanf("%d",m); if(*min > *m)*min = *m; if(*max < *m)*max = *m; loop(min,max,n-1,m); } int main(void){ int m,min=19,max=0; loop(&min,&max,10,&m); printf("min = %d\nmax = %d\n",min,max); return 0; }
>>457 その手があったか!
でも絶対ポインタとか関数の引数とか習ってないと思う!
じゃあグローバ(r int min=19,max=0,n=10,m; void loop(void){ if(n==0)return; scanf("%d",&m); if(min > m)min = m; if(max < m)max = m; --n; loop(); } int main(void){ loop(); printf("min = %d\nmax = %d\n",min,max); return 0; }
460 :
デフォルトの名無しさん :2006/04/15(土) 12:30:22
[1] 授業単元: 情報処理
[2] 問題文(含コード&リンク):
プログラムを変更し、サーバのindex.htmlを取得できるようにしなさい。
具体的には、ソケット生成部分とサーバとの送受信部分を補い、httpレスポンスの
メッセージボディのみを標準出力へ出力するようにすればよい。さらに
1.メッセージボディの出力先を標準出力かローカルファイルのどちらかを選べるようにする。
2.接続するWebサーバと要求するファイルのパスをコマンドライン引数で指定できるようにする。
3.代理サーバ経由で外部のWebサーバへもアクセスできるようにする。
必要ならばソースコードの文字コードを適切なものへ変換すること。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1740.txt [3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン:gcc バージョン?
[3.3] 言語: C
[4] 期限: 明後日まで
[5] その他の制限: なし
よろしくお願いいたします。ソケットよくわかりません・・・
/* ソケット作成 */ sock = socket(AF_INET, SOCK_STREAM, 0); /* HTTPリクエストの送信 */ const char* req_head = "GET " cosnt char* req_foot = " HTTP/1.0\r\n\r\n" send(sock, req_head, strlen(req_head), 0); send(sock, path, strlen(path), 0); send(sock, req_foot, strlen(req_foot), 0); /* レスポンスのBODYだけ出力 */ char buf[1];/* 配列じゃなくてよかったっけ? */ int flag = 0; while (recv(sock, &buf, 1, 0) > 0) { switch (flag) { case 0: if (buf[0] == '\r') flag = 1; break; case 1: if (buf[0] == '\n') flag = 2; else flag = 0; break; case 2: if (buf[0] == '\r') flag = 3; else flag = 0; break; case 3: if (buf[0] == '\n') flag = 4; else flag = 0; break; default: putchar(buf[0]);/* 出力 */ } } 自信ないけどこんなだっけ?変数の宣言は移動してくれ。1と2はちょっといじればなんとかなるだろう。3は調べるのめんどい。
463 :
452 :2006/04/15(土) 22:22:29
>>453-459 ありがとうございます。
今日図書館で調べたんですけどやっぱ
for使ったのばっかでした
色々考えて自分なりになんとかなりそうです
[1] 授業単元: Cプログラミング [2] 問題文(含コード&リンク): 10人の生徒が国語数学社会理科のテストを行った。 点数をキーボード入力し4教科の合計と平均を求め合計点数の上の人から順に並べるよう表示する。 また、4教科の平均は小数第一位を四捨五入する。 [3] 環境 [3.1] OS: Windows xp [3.2] コンパイラ名とバージョン:VC 6.0 [3.3] 言語: (C/C++/どちらでも可 のいずれか) [4] 期限: 4月17日 [5] その他の制限: 生徒A、国語、数学、社会、理科、合計、平均 生徒B、国語、数学、社会、理科、合計、平均 のように表示。 よろしくお願いします。
オレ的には国語算数理科社会だな
簡単すぎてまんどくせ 構造体にでもぶちこんでソートしたら? さぁ・・・基本情報受けに行こうっと
よし俺もソフ開受けにいってくる がんばろうぜ
>>464 四捨五入専用の関数ってあったけ。
とりあえずシンプルに考えてみた。
double roundoff(double x)
{ return int(x*10)%10<5 ? floor(x) : ceil(x); }
>>468 double roundoff(double x) {return (double) (int) (x + 0.5);}
>>464 なんか似たようなのを見た気がするんだが
472 :
468 :2006/04/16(日) 14:40:47
>>472 気づくかどうか、ていうよりも定番の四捨五入砲だな
この機に知ることが出来たってことでヨシとすればおk
[1] 授業単元:コンピュータプログラミング入門 [2] 問題文(含コード&リンク): 以下はある計算をし、その結果を出力するプログラムだが、プログラムミスがあり、 コンパイル時はエラーが出ないけれども、実行すると、正しい値が表示されない。 ミスの原因をコメント(注釈:/* */で囲む)としてソースプログラム中に書いた上で、 プログラムを修正し正しく動作するようにしなさい。ただし、printfの書式には誤りが無いものとする。 /* ここにミスの原因を記入する */ #include <stdio.h> main() { int a,b,c,res; a=2; b=3; c=4; res=a*b; printf("%d * %d = %d\n",a,b,c,res); res=(2*a+b)%c; printf("(2*%d+%d)%%%d = %d\n",a,b); /* printfで%を表示させたい場合は%%を使用する */ } [3] 環境 [3.1] OS:solaris 10 [3.2] コンパイラ名とバージョン: gcc バージョンは分かりません。 [3.3] 言語:C [4] 期限: 2006年04月28日21:00まで [5] その他の制限:特に無し よろしくお願いします。
>>474 printf("%d * %d = %d\n",a,b,/*c,←が余分*/res);
printf("(2*%d+%d)%%%d = %d\n",a,b,c,res);/*引数が足りなかった*/
476 :
474 :2006/04/16(日) 21:40:46
>>475 自分も最初はそうじゃないかと考えたのですが、
問題に「ただし、printfの書式には誤りが無いものとする。」
とあるんです。
printfの中身は書式ではないと解釈していいんですかね。
478 :
477 :2006/04/16(日) 21:48:37
すいません、問題文は txtにある数字を読み込み、ソートをして総和・平均を算出せよ。 さらに計算結果をエクセルで出力せよ。ソートは大→小でも逆でも可とする。 です。
>>476 printfの書式っていうのは、%dとか%sとかの出てくる部分ね。
だから間違ってるのは引数の方って言う解釈。
480 :
474 :2006/04/16(日) 22:12:53
>>477-478 詳しく見てないけど
-qsort(sort, MAX, sizeof(int), comp);
+qsort(sort, MAX, sizeof(double), comp);
-return *(int*)i - *(int*)j;
+return *(double*)i - *(double*)j;
で正常に動くならケアレスミスもほどほどにしてほしい。
482 :
477 :2006/04/16(日) 22:53:04
>>481 やってみたものの上手く動きません・・・。
>>481 -return *(double*)i - *(double*)j;
+return (*(double*)i > *(double*)j)?1:(*(double*)i == *(double*)j)?0:-1;
今回の入力データなら大丈夫だろうが、オーバーフローすると厄介だし
こっちの方が良くね?
>>477 データがMAX個に満たないとどうなると思う?
>>481 オーバーフロー云々ではなく、それ以前の段階で間違い。
まぁ、>483でいいわけだが。
>>484 今回はちゃんとMAX個あるんだから余計なことで質問者混乱させるな
487 :
477 :2006/04/16(日) 23:39:35
>>481 や
>>483 の部分をどういう風に書き入れたらよろしいんでしょうか・・・?
あとMAXの部分はこれでOKでお願いします。
>>483 で上手くソートされました。
教えてくださりありがとうございましたm(_ _)m
-ってのは元のソースからそれあぼーん +ってのは-であぼーんした部分をそれに入れ替え
490 :
デフォルトの名無しさん :2006/04/17(月) 00:08:38
でも
>>481 の方法で実行すると0付近がちゃんと並び替えされてないのは気のせい?
>>490 例えば (int)(0.24-0.0) = 0(等しい) になるからでそ。
>>490 compはintを返すのに、doubleの差を返してるからじゃまいか?
型変換はいるとややこしくなるからifでべた書きなり
三項演算子ですっきりまとめるなりするのが妥当
493 :
デフォルトの名無しさん :2006/04/17(月) 00:19:30
>>483 がすっきりかと言われると異論もあろうかと思われるが
[1] 授業単元: C言語研究 [2] 問題文(含コード&リンク): int配列に対し, 並び順を逆にするような関数 void myreverse(int*,int)を作りなさい. myreverseの第一引数は配列を意味するポインタ, 第二引数は配列の長さです. 例えば以下のmainでテストすると, 出力は 11 7 5 3 2 ---------------------------- となるはずです. int main(void) { int i; int array[5]={2,3,5,7,11}; myreverse(array,5); for( i = 0 ; i < 5 ; i ++ )printf("%d ",array[i]); printf("\n"); return 0; } ---------------------------- [3] 環境 [3.1] OS: (Windows/Linux/等々) WindowsXP SP2 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) VS .NET 2003 [3.3] 言語: (C/C++/どちらでも可 のいずれか) C [4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか) 4/21 よろしくお願いします
>>495 void myreverse(int *array, int length)
{
int i;
int tmp;
for (i=0 ; i<length/2 ; i++)
{
tmp=array[i];
array[i]=array[length-1-i];
array[length-1-i]=tmp;
}
}
ありがとうございました
498 :
デフォルトの名無しさん :2006/04/17(月) 17:03:56
一昨日PCぶっ壊れた 釣りでは無い 正直netの無い生活がこんなに大変だと思わなかた _| ̄|○i|l|i 今は親のnotePCから見てる 鬱だ・・・氏のう・・・('A`)
[1] 授業単元: 情報数理解析入門 [2] 問題文(含コード&リンク): 標準入出力 ファイルを読み込んで、内容を配列に格納しなさい。 ファイル(data.txt) 12345(改行) 23456(改行) 34567[EOF] 配列 int[3][5] = { {1, 2, 3, 4, 5}, {2, 3, 4, 5, 6}, {3, 4, 5, 6, 7} }; [3] 環境 [3.1] Windows [3.2] 大学のパソコンに入っている教育用コンパイラ(使っているのは普通の教科書なので同じだと思います。) [3.3] C [4] 期限:20060419 09:00 [5] その他の制限:なし よろしくおねがいします。
板違い
501 :
デフォルトの名無しさん :2006/04/17(月) 22:18:55
家でC++言語の練習したいんですがどうしたらいいんですか?
>>499 >教育用コンパイラ
こんなコンパイラ無いし
>普通の教科書
普通って何をもって普通って決めてるんだ?
>同じだと思います
何と?
日本語おかしい、頭の弱い人は消えてください
質問内容を見れば質問者の程度ぐらいわかるだろ 察してやれよ
状況は察せても教科書やコンパイラは察せない
#include <stdio.h> #include <stdlib.h> int main(void){ int i,j,array[3][5];FILE *fp; if((fp=fopen("data.txt","r"))==NULL){fprintf(stderr,"読めない\n"); return 1;} for(i=0;i<3;i++)for(j=0;j<5;j++)array[i][j]=atoi(getch(fp)); fclose(fp); return 0; } 一応仕様は満たしている気がする。
早速訂正。 getch(fp) → getc(fp)
[1] 授業単元:Cプログラミング [2] 問題文(含コード&リンク): (1)n個の点があり、任意の2点間ぶ確率pで枝があるとする。 この様にしてできるグラフG=(V,E)を考えて、n、pを与えた場合の|E|の平均値を シュミレーションにより求めよ。 また、次数、直径の平均値を求めよ。 (2)1x1の正方形の中にn個の点が存在している。 各点のx座標が0から1の間に一様に分布し、 y座標が0から1の間に一様に分布しているとする。 距離がd以内である2点間を辺で結び、距離がdより大きい2点間は結ばないとする。 この様にしてできるグラフG=(V,E)を考えて、nを与えた場合の|E|、次数、直径 の平均値をシミュレーションにより求めよ [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc3.31 [3.3] 言語: C [4] 期限: 4月19日昼まで [5] その他の制限: よろしくお願いします グラフ理論のランダムグラフ、ランダムネットワークらしいんですがどう組めば良いかさっぱりです
座標とかの初期処理 for i=1..n for j=i+1..n if( v_i と v_j が条件を満たす ) then v_i と v_j 間にエッジをかける end if end of for end of for 次数とか直径とかの計算 1回分の実験が↑でできるので、それを繰り返して統計をとる。 もう少し言葉に説明くれれば具体的なコード書くかも。 次数とか直径とか、グラフ理論やってないと知らん言葉と見た。
>>505 確認してないけど、
これだと改行まで配列に格納されて、
最後2つが収まらないんじゃね。
失礼。一部以下に変更を。 for(i=0;i<3;i++)for(j=0;j<5;j++){ char c; do{c=atoi(getch(fp));}while(c=='\n'||c=='\r'); array[i][j]=c-'0'; }
512 :
317 :2006/04/18(火) 03:48:16
何度もすいません。 STLのリストを使って317お願いしてもいいでしょうか?
513 :
デフォルトの名無しさん :2006/04/18(火) 15:23:52
ある整数から符号、桁数、各桁の数字を知るにはどうすればいいのでしょうか? これが解らないとどうにもなりません><
>>513 符号:x<0とかx>0とか 桁数・各桁:10で割るのをループ
>514 ♪♪♪ d(`Д´)b♪♪♪サンキュ
>>512 面倒なんでやり方だけ書いとくから頑張れ
以下、リストの変数名はinliAddress
リストの走査:
list<hoge>::iterator itrCurr; //以後、色々使う
for (list<hoge>::iterator itrEnd = inliAddress.end(), itrCurr = inliAddress.begin();
itrCurr != itrEnd; ++itrCurr) {
hoge(); //好きな処理
}
ノードの追加:
inliAddress.insert(itrCurr, hoge); //hogeが入れたい物でitrCurrが入れたい位置
ノードの削除:
inliAddress.erase(itrCurr); //itrCurrのノードを削除
<algorithm>のfind_if()とかを使えばもっとすっきりまとめられるだろうが
そこがSTLの面白さだから自分でやってみれ
517 :
317 :2006/04/18(火) 19:26:12
>>516 どうもありがとうございます!
参考にして1度自分でやってみます。
518 :
デフォルトの名無しさん :2006/04/18(火) 20:36:05
[1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク): 西暦での年と月を与えると、その月のカレンダーを出力するプログラムを作成せよ (ただし、1900年以降のものとして1900年1月1日は月曜日である) [3] 環境 [3.1] OS:Vine Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:4月20日
519 :
デフォルトの名無しさん :2006/04/18(火) 20:44:23
C言語初心者です。「1.5」を表示するプログラムを作れと言われ作ったのですが、 1.5000000と表示されてしまいます。原因はどこにあるのでしょうか? #include <stdio.h> int main(void) { float a; a = 1.5; printf("a=%f\n",a); return 0; }
>>518 #include <stdio.h>
int day_of_week(int year, int month, int day) {
if (month == 1 || month == 2) {
--year; month += 12;
}
return (year + year / 4 - year / 100 + year / 400 + (13 * month + 8) / 5 + day) % 7;
}
int days_of_month(int year, int month){
static const int days[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
if (month < 1 || month > 12) month = 1;
if (month == 2) return days[1] + (year % 4 == 0 && year % 100 != 0 || year % 400 == 0);
else return days[month-1];
}
void calendar(int year, int month){
int i, k, days;
printf("%d年%d月\n日 月 火 水 木 金 土\n", year, month);
k = day_of_week(year, month, 1);
days = days_of_month(year, month);
for (i = 0; i < k; i++) printf(" ");
for (i = 1; i <= days; i++) {
printf("%2d ", i);
if (++k % 7 == 0) printf("\n");
}
printf("\n");
}
int main(void) {
int year, month;
printf("何年?:"); scanf("%d", &year);
printf("何月?:"); scanf("%d", &month);
calendar(year, month);
}
>519 %fじゃなくて%gを使うといいかも
522 :
デフォルトの名無しさん :2006/04/18(火) 20:59:20
C/C++を覚えるために本を買ってるんですけどイイ本がありましたら教えてください
525 :
519 :2006/04/18(火) 21:05:50
%gで解決しました。ありがとうございました。
526 :
デフォルトの名無しさん :2006/04/18(火) 21:08:04
>>523 読めそうなのを片っ端から買え!
多少の損害は気にするな!
PCがおかしくなるのに比べたら.....orz
528 :
デフォルトの名無しさん :2006/04/18(火) 21:59:45
sum=data[i].koku+data[i].su; if(data[i].sum < data[j].sum){ これで分からないか? ちゃんとPG見直してみ?
ループの度にsortしようとしてるのは無駄の極み。 sortをループの手前に出せば十分。 さらに言えば、sortのループ変数 i と、 sortの外側にあるループ変数 i がぶつかっている。 ま、これは上に書いたようにsortを外に出せば解決するけど
>>529 スコープを作ってiを宣言するという手もある
>>464 #include <stdio.h>#include <stdlib.h>#include <string.h>#include <math.h>
#define N 2 //四捨五入する小数点桁数
typedef struct record{char name[256];int J_language;int Mathmatical;int History;int Science;int Sum;int Average_integer;int Average_small;struct record *next;}record;
void free_list(record *start);int main(void){record dmy = {"", 0, 0, 0, 0, 0, 0, 0, NULL };//番兵record *start = &dmy;record *ip;//for用record *rec;char buff[256] = {0};
int n;char *head = "名前\t国語\t数学\t社会\t理科\t合計点\t平均点\n";char *head2 = "%s\t%d\t%d\t%d\t%d\t%d\t%d.%d\n";n = (int)pow(10, N);while(1){if((rec = (record *)malloc(sizeof(record))) == NULL){
fprintf(stderr,"メモリ確保出来ず");exit(1);}printf("名前入力('E'で終了)");fgets(buff,sizeof(buff),stdin);if(strcmp(buff,"E\n\0") == 0 ) break;buff[ strlen(buff) - 1 ] = '\0';strcpy(rec->name,buff);printf("国語");fgets(buff,sizeof(buff),stdin);
>>464 続き
rec ->J_language = atoi(buff);printf("数学");fgets(buff,sizeof(buff),stdin);rec->Mathmatical = atoi(buff);printf("社会");
fgets(buff,sizeof(buff),stdin);rec ->History = atoi(buff);printf("理科");fgets(buff,sizeof(buff),stdin);rec ->Science = atoi(buff);
rec->Sum = rec->History + rec->J_language + rec->Mathmatical + rec->Science ;rec->Average_integer = (((n * rec->Sum) + 2 ) / 4) / n;
rec->Average_small = (((n * rec->Sum) + 2 ) / 4) % n;for(ip = start; ip->next != NULL; ip = ip ->next){if(rec ->Sum < ip ->next ->Sum){
rec ->next = ip ->next;ip ->next = rec;break;}}if(ip->next == NULL){ip->next = rec;rec->next = NULL;}}printf(head);for(ip = start->next; ip != NULL;
ip = ip ->next){printf(head2,ip->name,ip->J_language,ip->Mathmatical,ip->History,ip->Science,ip->Sum,ip->Average_integer,ip->Average_small);
}free_list(start);return 0;}void free_list(record *start){record *current, *temp;for(current = start->next; current != NULL;){temp = current->next;
free(current);current = temp;}}
>>529 よくわからんけど、合計ってなんの合計なんだろ。
降順にならべるってことなら、国語と数学を合計したものが3つのことだよね。
そうするとtypedef seiseki内のsumで十分だと思うんだけど、main関数で別に定義
しているint sumがよく分からん。
main関数で定義してるint sumは必要ないでしょう。
よってまずsumを全部data[i].sumに変更する。
あとは先にdata[0].sum、data[1].sum、data[2].sumを計算しておいてから、並び替えをするで
いいはずだけど、data[0].sumを計算してから、まだ計算されてないdata[1].sumとdata[2].sum
と大きさの評価をするっていうよくわからんことに。しかも
>>529 が書いてる通りiが被ってるから
さらに妙なことに。
forの中を追うと
1個目のforでi=0、data[0].sumを計算→2個目のforでさらにiを0
→3個目のforでdata[0].sumに対しdata[1].sumとdata[2].sumを比較、3個目のfor終了後i=1
→2個目のforに戻ってi<3は真→3個目のforでdata[1].sumに対しdata[2].sumを比較、3個目のfor終了でi=2→2個目のforに戻ってi<3は真
→3個目のforで(j=i+1)<3が偽だから何もせず終了、3個目のfor終了でi=3→2個目のforに戻ってi<3は偽だから何もせず終了
→1個目のforに戻ってi<3となってるから偽だから何もせず終了
data[1].sumとdata[2].sumは結局計算されていない。
1)main関数であらたにint sumを使わない。 2)並び替え前にdata[0].sum、data[1].sum、data[2].sumを計算する。 を踏まえておけばいいんでしょう。 for(i=0;i<3;i++) { data[i].sum=data[i].koku+data[i].su; } for(i=0;i<3;i++){ for(j=i+1;j<3;j++){ if(data[i].sum < data[j].sum){ temp=data[i]; data[i]=data[j]; data[j]=temp; } } fprintf(fp,"名前%s",data[i].name); fprintf(fp,"国語%d",data[i].koku); fprintf(fp,"算数%d",data[i].su); fprintf(fp,"合計%d",data[i].sum); }
[1] 授業単元:数値計算 [2] 問題文:連立n元一次方程式を掃き出し法で解くプログラムを 作成せよ。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ(バージョン):gcc [3.3] 言語:C [4] 期限:4/21まで [5] その他の制限:無し どなたかよろしくお願いします。
537 :
536 :2006/04/20(木) 10:53:10
i=1⇒ピボットa[i][i]を決定⇒ピボットでi行を割る⇒k行−(更新されたi行)×a[k][i] ⇒i=i+1⇒i≦n⇒終了 というアルゴリズムでお願いします。
できたけど二次元配列のうまい渡し方がわからないorz void sweepout(double a[][4], int rows, int cols) { int pivot, i, j; double p; for (pivot=0; pivot<cols-1; pivot++) { p = a[pivot][pivot]; for (i=pivot; i<cols; i++) a[pivot][i] /= p; for (i=0; i<rows; i++) if (i != pivot) { p = a[i][pivot]; for (j=pivot; j<cols; j++) a[i][j] = a[i][j] - p*a[pivot][j]; } } } double a[][4]の部分をもうちょい汎用的にしたいんだが・・・
本体はこんなん int main() { double m[][4] = { 1, 1, 1, 3, // x0+x1+ x2=3 1,-1, 1, 1, // x0-x1+ x2=1 1,-1, 2, 2 // x0-x1+2x2=2 }; int i; sweepout(m, 3, 4); for (i=0; i<3; i++) printf("x%d = %f\n", i, m[i][3]); }
[1] 授業単元: C言語による数値解析 [2] 問題文 1: f(x)=4x-xe^2x+2=0 の根をニュートン・ラフソン法で求めよ。 ただし、初期値x1=1、収束判定定数 ε=0,00001 とする。 2: 2分法とニュートン・ラフソン法で f(x)=x-cosx=0 の根を求め、収束の状況を比較せよ。 [3] 環境 [3.1] OS: Linuxです。 [3.2] コンパイラ名とバージョン: gccです。バージョンまでは分かりません… [3.3] 言語:C言語 [4] 期限: 23日までです。 [5] その他の制限:CとC++を習いました。 宜しくお願い致します。
>>538 mのアドレスを*aに渡さないと意味ないんじゃないか
っていうかスレ違い
542 :
538 :2006/04/20(木) 18:45:02
>>541 たしかにそうだな、すまんかった
結局一次元配列で扱うことにしたwwwwwwww
ちなみに俺は
>>536 ではないです、一応
解なしのときとかは考慮してないけどそこらへんは自分でやってくれ
>>540 #include <stdio.h>
#include <math.h>
double newton(double x, double (*f)(double), double (*df)(double)) {
return x - f(x)/df(x);
}
void bisection(double *x, double *y, double (*f)(double)) {
double m = (*x + *y)/2;
if (f(m)*f(*x) > 0) *x = m;
else *y = m;
}
double f1(double x) { return 4*x - x*exp(2*x) + 2;}
double df1(double x) { return 4 - exp(2*x)*(1 + 2*x);}
double f2(double x) { return x - cos(x);}
double df2(double x) { return 1 + sin(x);}
続き int main() { double x, y, m, e=0.00001; x=1; y=0; while (fabs(x-y) >= e) { y = x; x = newton(x, f1, df1); } printf("(1): x = %f\n", x); x=1; y=0; printf("Newton-Rhapson\n"); while (fabs(x-y) >= e) { y = x; x = newton(x, f2, df2); printf("%f\n", x); } x=1; y=0; printf("\nBisection\n"); while (fabs(x-y) >=e) { bisection(&x, &y, f2); printf("%f\n", x); } }
545 :
540 :2006/04/20(木) 22:24:02
>>543 こんなに早くにありがとうございます。
バイトから帰ってきて吃驚しました。
問題の1と2を分けたプログラムは、
各数値に対応している箇所を修正すれば良いのでしょうか?
546 :
527 :2006/04/21(金) 00:17:26
答えてくれた皆さんありがとうございました。 おかげで助かりました。
547 :
536 :2006/04/21(金) 10:27:49
>>538 どうもありがとうございます。
あとは自分で何とかします。
[1] 授業単元: [2] 問題文(含コード&リンク):標準入力またはコマンドライン引数で指定されたファイルからテキストを入力し、 必要なら特定の行の除去を行い、 標準出力に出力するプログラムを書け。 除去する行は、以下の二種類のオプションで指定する。 いずれのオプションも指定されていないときは、除去は行わない。 両方のオプションが同時にしていされているときは、両方の除去を行う。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: [3.3] 言語: C [4] 期限: 2006/04/23) [5] その他の制限:ヒント:現在、#で始まる行の中にいるかどうかを示すフラグを使うと便利です。 具体的には、そのフラグの初期値はオフにします。行頭の#に出会うとオンにします。 改行文字に出会うとオフにします。
>>548 詳細が何にもないじゃん。
オプションの詳細は?
#で始まる行を云々する仕様は?
550 :
548 :2006/04/21(金) 13:39:36
忘れてた。(´・ω・`) コマンドラインのオプション -e が指定されたときは、 空行を除去する。 コマンドラインのオプション -s が指定されたときは、 #で始まる行を除去する。
>>550 それだけの仕様なら、別段ヒントに頼る必要がない希ガス。
-e が sed -e '/^$/d'相当で
-s が sed -e '/^#/d'相当ってことでしょ。
とりあえずデキターヨ でもコマンドラインのオプションってどういう風に処理するのが 定番なのか知らんからすんげー汚い あと、空行、ってのを単に改行のみの行ってことにしてるから スペース、タブ、改行だけの行も扱いたいときはちょっといぢってくれ #include <stdio.h> enum State {NONE=0, E=1, S=2, ES=3, INVALID=4}; enum State getNewState(char c, enum State s) { if (s == INVALID) return INVALID; if (c == 'e') if ((s&E) == E) return INVALID; else return s|E; else if (c == 's') if ((s&S) == S) return INVALID; else return s|S; else return INVALID; } int main(int argc, char *argv[]) { char *filename; char s[1024]; int nfile=0, i, j; FILE *f; enum State state = NONE;
for (i=1; i<argc && state!=INVALID; i++) if (argv[i][0] == '-') if (argv[i][1] == '\0') state = INVALID; else for (j=1; argv[i][j]!='\0'; j++) state = getNewState(argv[i][j], state); else if(nfile != 0) state = INVALID; else { nfile++; filename = argv[i]; } if (state == INVALID) { fprintf(stderr, "Invalid arguments.\n"); return 1; } if (nfile == 0) f = stdin; else if((f=fopen(filename, "r")) == NULL) { fprintf(stderr, "File not exists.\n"); return 1; } while (fgets(s, 1024, f) != NULL) { if (s[0] =='#' && (state&S)==S) continue; if (s[0]=='\n' && (state&E)==E) continue; printf("%s", s); } } ちなみに hoge.exe -s finename -e ってやっちゃってもOKになるけどこれっていいのかしら・・・
>>553 コマンドライン処理の定番を外しているのはいいとして、
1行1024バイト以上だと巧くいかないっぽいね。
>>550 その辺の制限はあっていいの?
555 :
デフォルトの名無しさん :2006/04/21(金) 23:28:00
[1] 授業単元: [2] 問題文(含コード&リンク)というか質問です: [3] 環境 [3.1] OS: (Windows) [3.2] コンパイラ名とバージョン: (visual studio.net2003) [3.3] 言語: (C) [4] 期限:今夜中 [5] その他の制限: 製品1: 製品2: 製品3: ってやりたいんですけど 製品1 製品1 製品1ってなるのはどうしてですか? for(i=0; i<1; i++) for(k=0; k<3; k++) { printf("製品%2d:",i+1); scanf("%d",&ma[i][k]); }
printf("製品%2d:",i+1); ↑ ここがiだから。
>>555 ここは宿題スレ
質問じゃなく目的を書けば答えが出てくるはず
1] 授業単元: Cプログラミング [2] 問題文(含コード&リンク):10人分の名前を全角文字を入力していき入力した文字が半角だったら入力し直し。 また途中でENDを入力したらそれまで入力した名前を保存して終了するプログラムを作成せよ。 [3] 環境 [3.1] OS: windows xp [3.2] コンパイラ名とバージョン: vc6.0 [3.3] 言語: C [4] 期限: 2006/04/24
559 :
デフォルトの名無しさん :2006/04/22(土) 00:17:04
>>558 ENDを入力したら?
確かにキーボードを見ると「END」と書かれたキーはあるが。
>>558 素敵な悪問だ。足りない部分は脳内補完。
Shift_JISの規格は厳密に定められていないようなので、適当。
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
char name[512];
int input_num = 0;
unsigned int i;
memcpy(name, name + 512, 0);
while(input_num < 10) {
fprintf(stdout, "名前%d人目(全角):", input_num + 1);
scanf("%s", name);
++input_num;
if(strcmp(name, "END") == 0)
break;
for(i = 0; i < strlen(name); i += 2) {
if((unsigned)name[i] < 0x80) {
fprintf(stdout, "全角で入力すること\n");
--input_num;
break;
}
}
}
return 0;
}
>memcpy(name, name + 512, 0); 何このゴミコード。
561 を勝手に改造。VC6 でまともに動くかは知らない。 #include <stdio.h> #include <stdlib.h> #include <locale.h> #include <string.h> #define MAX_ENTS (10) int main(int argc, char *argv[]) { char name[MAX_ENTS][512]; char buff[512]; int input_num = 0; int i; char *p; FILE *fp; setlocale(LC_ALL, ""); while(input_num < MAX_ENTS) { fprintf(stdout, "名前%d人目(全角):", input_num + 1); fgets(buff, sizeof(buff), stdin); sscanf(buff, " %[^\r\n]", name[input_num]);
if(strcmp(name[input_num], "END") == 0) break; mbtowc(0,0,0); for(p = name[input_num]; *p != 0 ;) { i = mbtowc(0, p, sizeof(name[0])); if(*p != ' ' && i < 2) { fprintf(stdout, "全角で入力すること\n"); input_num--; break; } p+=i; } input_num++; } fp = fopen("name.txt","w"); for(i=0; i<input_num; i++) fprintf(fp,"%s\n", name[i]); fclose(fp); return 0; }
>>562 人のソースに文句つけることしかできないお前がゴミ
>>565 大丈夫、少なくとも文句つけるより自分のコードを載せる方が多いから。
つーか、ゴミをゴミと言って何が悪い。
567 :
デフォルトの名無しさん :2006/04/22(土) 15:17:10
[1] 授業単元:プログラム演習基礎1 [2] 問題文:初項X0=1の漸化式Xn+1=Xn*Xn+2Xn+1の第n項の値を求める プログラムを再帰の方法を使って求める [3] 環境 [3.1] OS: SORALIS [3.2] コンパイラ名とバージョン: gcc バージョンはわかりませんけど古くない [3.3] 言語: C [4] 期限: 日曜の24時です [5] その他の制限:ないです。お願いします
あの memcpy() は確かに意味不明。memset() でもしたかったのかしらん?
>>567 mainは書くの面倒だから省略
int X(int n){
if(n == 0)return 1;
n = X(n-1);
return n * n + 2 * n + 1;
}
>>566 誰も考えないことをやる人を人は天才と呼ぶのです
>>570 _
/´~ ~`ヽ
ム ,__ i
!;;j_ ゞ;;;):、;;; ゙| ほうほうそれで?
};'=' __,ィ-‐ァノ____,
'リ冊アァ".j~ 、t /"ヽ、
'ー‐‐'''´,,_/ i、、 丶
/| j j ヽ/ i
! ハ ヽ __、'`⌒|
| ^ヘ,_,,、-ー'' ̄ }
レ--(_____,,,-く
丶 __/ |
''---‐‐ー'" |
再帰つかってこれで良い解?
>>567 #include <stdio.h>
int Sequence(int n)
{
return (n == 0) ? 1 : Sequence(n-1) * Sequence(n-1) + 2 * Sequence(n-1) + 1;
}
int main(void)
{
int n;
int Sum = 0;
puts("求める項");
scanf("%d",&n);
Sum = Sequence(n);
printf("%d\n",Sum);
return 0;
}
>>572 Sequence(n-1) が三回も評価されるのが勿体無いのでキャッシュしませう
ぼくのコンパイラは優秀なのでがんばってコピペするのがいいんです
>>573 キャッシュって意味よくしらないけど
キャッシュしゅるー
[1] 授業単元:授業課題 [2] 問題文: 下に示すように、横幅と高さを読み込んで、 縦横に * を並べて長方形を表示するプログラムを作成せよ。 なお、必ず横長になるように表示すること。 『実行結果』 長方形を作りましょう。 一辺(その1):3 一辺(その2):7 ***** ***** ***** [3] 環境 [3.1] OS: XP [3.2] コンパイラ:Visual c++6.0 [3.3] 言語:C 以上です。よろしくお願いします。
void printRect(int len1, int len2) { if (len1 <= 0 || len2 <= 0) return; if (len1 > len2) { int tmp = len1; len1 = len2; len2 = tmp; } for (int yc = 0; yc < len1; ++yc) { for (int xc = 0; xc < len2; ++xc) { putchar('*'); } putchar('\n'); } } int main() { int len1 = 0, len2 = 0; printf("長方形を作りましょう。\n一辺(その1):"); scanf("%d", & len1); printf("一辺(その2):"); scanf("%d", & len2); printRect(len1, len2); return 0; }
#include <stdio.h> int main() { int l1, l2, temp, i, j; printf("長方形を作りましょう。\n一辺(その1):"); scanf("%d", &l1); printf("一辺(その2):"); scanf("%d", &l2); if (l2 > l1) { temp = l2; l1 = l2; l2 = temp; } for (i=0; i<l2; i++) { for (j=0; j<l1; j++) putchar('*'); putchar('\n'); } } って書いてたら先客がw しかもコンパイルしてないからちゃんと動くかワカンネ
580 :
:2006/04/22(土) 23:33:55
[1]授業単元:プログラミング基礎(C) [2]テーラー展開によってsin(x)の近似値を計算する関数mySinを書きなさい。以下のステップを踏むと良い。 (1)展開式の第i項の正負を1,-1の値で表す関数fa(i)を書きなさい。 (2)展開式の第i項のうち、符号を除いた値を計算する関数fb(x,i)を書きなさい。 (3)sin(x)の近似値を表示する関数mySin(x)を書きなさい。展開式の第i項は、fa(i)*fb(x,i)である。 [3]環境 OS:Windows XP コンパイラ名:gcc(バージョンなどはわかりません。Cygwinを使っています) 言語:C [4]期限:2006年4月24日午前9時頃まで [5]補足:C言語に関してはまだ入り口程度で、floatなどは習っていません。一応Javaはやりました。 よろしくお願いします。
float、double使わずにやるの? 分数自分で実現しろってこと?
float は習ってなくとも double は習っていると見た。 double fa(int i) { if ((i-1)/2 % 2 == 0) { return 1; } else { return -1; } } double fb(double x, int i) { int j; if (i % 2 == 0) { return 0; } else { double ans = 1.0; for (j = 1; j <= i; ++j) { ans *= x; ans /= j; } return ans; } } double mySin(double x) { int i; double ans = 0; for (i = 0; i < 20; ++i) /* 20 は適当な値 */ ans += fa(i) * fb(x,i); return ans; };
>>580 です
解答ありがとうございました
>>582 のコードでコンパイルは出来たんですが
実行してみると『Syntax error: "(" unexpected』と出ました
これはどういうことなのでしょうか?
追加で申し訳ないのですが、メインメソッドは以下にしました
エラーと何か関係があるのでしょうか?
int main(void){
double x;
for(x = 0;x <= 6.0;x += 0.3){
printf("%f\t%f\n", x, mySin(x));
}
}
# コンパイルが出来てんなら、んなエラーメッセージ出てるわけねぇだろ。 # とか思ってしまうのは俺だけだろうか?
# うん俺だけ。
>>583 メインメソッドとは言わない
CはC,JAVAはJAVA
応用効くのは、ifとかの制御ステートメント
それも全部じゃない、あと、データ型も違う。
とにかくオブジェクティブではない。
CからJAVAなら
「へー便利な関数いっぱいあんな〜とか、char型2バイトだとか
あ、メソッドっていうのかとか、オブジェクト?インスタンス?
オーバライド?オーバーロード?インターフェース?
便利だけどややこしい〜ってな感じで入っていく」
JAVAからCだと、たぶん不便極まりない
>>587 色々とありがとうございました
今のところ講義はJavaで書いたコードをほぼそのまま書いてCプログラムを書いているだけなので、
C言語に関する知識はあまりありませんでした
勉強になりました
ありがとうございました
>>583 どうでもいいことなんだけど、
intでmain関数を宣言するなら
ちゃんと値を返そうよ
>>587 そうそう、おれもC++やってからJavaやったんだけど
SunのAPIリファレンスを見て驚愕したよ
「なにこれ、揃いすぎじゃね!?」
って。
Linuxマシンもしょっちゅう触る俺にとっては
もうWin32 APIとか触るのが馬鹿馬鹿しく感じられるようになった
[1] 授業単元:C言語実習 [2] 問題文(含コード&リンク): 整数値a,b,cをキーボードから与えたとき,ax"+bx+c=0の解を求めるプログラムを作成せよ。 ただし、平方根を求めるためにsqrt関数を使用すること。 ※axのxについてある『"』は二乗という意味です。二乗をキーボードからどうやって 打つかわかりませんでした。。 よろしくお願いします。 [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン:BCC [3.3] 言語:C [4] 期限:4月24日(月) [5]補足:そこまで難しいところまで習ってないので、一番簡単でシンプルな解答をお願いします。
#include <stdio.h> #include <math.h> #include <stdlib.h> #define D(a,b,c) pow(b, 2) - 4 * a * c; typedef struct Complex{ double a; double b; }complex;
int F(double a, double b, double c, complex *x1, complex *x2) { double d; d = D(a, b, c); if(d > 0){ x1->a = (-b + sqrt(d)) / (2 * a); x2->a = (-b - sqrt(d)) / (2 * a); x1->b = x2->b = 0; return 1; }else{ if(d == 0){ x1->a = x2->a = -b / (2 * a); x1->b = x2->b = 0; return 1; }else{ printf("%f\n", -b / (2 * a)); x1->a = x2->a = -b / (2 * a); x1->b = sqrt(-d) / (2 * a); x2->b = -sqrt(-d) / (2 * a); return 1; } } return 0; }
void printC(complex *x) { if(x->b == 0) printf("%f\n", x->a); else{ if(x->b > 0) printf("%f + %fi\n", x->a, x->b); else printf("%f - %fi\n", x->a, -x->b); } } たぶん、こんな感じかな? あと、 #include <stdlib.h> いらないから
>>593 すばやい返答ありがとうございます。
でも、typedef struct Complex{ とかまだ習ってないんですよ。。
もっと簡単なプログラムはないんですかね??何度もすいません。
よろしくお願いします。
1] 授業単元: C [2] 整数を入力し偶数か奇数かを判定せよ。ただし%は使わずに。 [3] 環境 [3.1] OS:windows [3.2] VC 6.0 [3.3] 言語:C/C++/どちらでも可 [4] 期限:[無期限] [5] その他の制限:なし。 簡単な問題かもしれませんがよろしくお願いします。
>>597 #include <stdio.h>
int main(){
int x;
printf("整数を入力してください->");
scanf("%d",&x);
printf("これは%sです。", x&1?"奇数":"偶数");
return 0;
}
#include<stdio.h> int main(){ int n; scanf("%d",&n); puts(n&1 ? "奇数" : "偶数"); }
あえてビット演算を使わずに素人っぽさを演出してみる #include<stdio.h> int main(){ int n; printf("入力>");scanf("%d",&n); puts(n/2*2!=n ? "奇数" : "偶数"); }
#include <stdio.h> #include <stdlib.h> int main(void) { int n; char tmp[1024]; fgets(tmp, 1023, stdin); n = atoi(tmp); if( n & 1 ) puts("奇数"); else puts("偶数"); return 0; } %を使わずにやってみた。
#include <stdio.h> #include <stdlib.h> int f(int n) { if (n < 0) n = abs(n); return n==1 ? 1: (!n ? 0 : f(n-2)); } int main(void) { int n = -15421; printf("%s\n", f(n)?"奇数です><":"偶数です><"); return 0; } 再帰を使ってやってみた
#include <stdio.h> #include <stdlib.h> #include <math.h> int main() { char buf[100]; fgets(tmp, sizeof(buf), stdin); puts(fmod(atoi(buf), 2) ? "奇数" : "偶数"); return 0; }
[1] 授業単元: C言語 [2] 問題文(含コード&リンク): データファイルから50万個の値を fopen(),fscanf()などの関数を使用して配列に格納する [3] 環境 [3.1] OS: WINDOWS [3.2] コンパイラ名とバージョン:lcc-win32 [3.3] 言語:C お願いします
データファイルの形式は?
>>604 データファイルの中の書き方はどんな書式?
ファイル名は指定されている?
すみませんdatファイルです。
例えば「テキストファイルに int 型に入るような整数が空白と改行区切りで 50万個並んでいる 」 とか、そういうことを聞いている。
W型の改行区切りで50万個です
#include <stdio.h> #include <stdlib.h> #define N 500000 int main(void) { FILE* fp; int* data, i; if((data=(int*)malloc(sizeof(int)*N))==NULL) return 1; if((fp=fopen("data.dat","r"))==NULL){free(data); return 1;} for(i=0;i<N;i++) fscanf(fp, "%d", &data[i]); // 50万個のデータ使ってやりたいことがあればここに記述 free(data); fclose(fp); return 0; }
611 :
597 :2006/04/23(日) 14:30:08
今はdouble型をW型って教えるのか?
[1] 授業単元: C [2] 段数を読み込んで、 縦横に * を並べて左下側が直角となる直角三角形を 表示するプログラムを作成よ。 [3] 環境 [3.1] OS:windows xp [3.2] VC++6.0 [3.3] 言語:C [4] 期限:[無期限] よろしくお願いします。
段数って縦と横両方読むの?
2唐変でいいんぢゃねの?
>>614 多分、両方読み込みなんだと思います。
実行結果が下のようになる感じですね。
『実行結果』
何段ですか?:5
*
**
***
****
*****
#include <stdio.h> void printTri(int l){ int i,j; if(!l)return; for(i=0;i<l;i++){ for(j=0;j<=i;j++) printf("*"); puts(""); } } int main(void){ int l; puts("段数?"); scanf("%d", &l); puts(""); printTri(l); return 0; }
>>613 ,616
ドゾー
i,j,l;
main()
{
scanf("%d",&l,printf("何段ですか?:"));
for(;i<l;j++<=i?printf("*"):puts((i++,j^=j,"")));
}
#include<stdio.h> int main(){ int n,m,i; printf("何段ですか?:");scanf("%d",&n); for(m=1;m<=n;putchar('\n'),++m) for(i=0;i<m;++i) putchar('*'); }
i,j; main(k) { printf("何段ですか?:"); for(scanf("%d",&k);i<k;)putchar(j++>i?j=!++i,10:42); }
>>597 # include <stdio.h>
int main(void)
{
int input;
printf("Input an integer:");
scanf("%d", &input);
if(input / 2 * 2 == input)
printf("even\n");
else
printf("odd\n");
return 0;
}
いつも思うんだが、問題文の「整数を入力し」って日本語としておかしいよな。
623 :
622 :2006/04/23(日) 16:59:40
ごめん。解答が見えてなかった。
624 :
デフォルトの名無しさん :2006/04/24(月) 11:23:29
[1] 授業単元:c [2] 問題文@1000魔での素数をすべて表示するプログラムを以下の手順に従って作成せよ @ 2〜Nまでの素数候補リストを昇順に用意する A リストの先頭にある数を素数リストに記入する B 新たに素数リストに記入された素数のすべての倍数を素数候補リストから削除する C Aに戻る A100万までの素数の個数をなるべく高速に求めるプログラムを作成せよ hint :リストを数ではなく、フラグで用意する :mallocでメモリを確保する [3] 環境 [3.1] Linux [3.2]gcc [3.3] 言語:c [4] 期限: [水曜日] [5] その他の制限: 無し、2代も依頼して申し訳ないですが、どうかお願いします(´Д⊂ Aは100万が難しかったら50万、10万と減らしても可だそうです
>>624 今PC使えないんでソースはだせないが
素数を求めるにはエラトステネスの篩という
有名すぎるアルゴリズムがあるから
調べて挑戦してみれ
[1] 授業単元:C言語研究1 [2] 問題文(含コード&リンク): -------------------------------------- 次の順で, リスト(リンクリスト)を扱うプログラムを書いて下さい. ・intの値のリスト構造を定義して下さい. ・このリストの内容を表示する関数を書いて下さい. ・このリストをサーチして, 最も大きな数を返す関数を書いて下さい. ・このリストをサーチして, 最も大きな数をリストから外す関数を書いて下さい. (複数ある場合, 全てを削除します.) ・このリストをソートする関数を書いて下さい. 要素の比較には通常の整数の大小関係を使って下さい. -------------------------------------- [3] 環境 [3.1] OS:WindowsXP SP2 [3.2] コンパイラ名とバージョン:VS .NET 2003 [3.3] 言語:C [4] 期限:今週の金曜(4/28)の17:00 どうかよろしくお願いします
>>624 「リスト」って一覧とかの一般的な意味なん?
それとも構造としてリスト構造を使えって意味なん?
一般的な意味と仮定:
#include <stdio.h>
#define N 1000
main(){int c[N+1]={0},p[N+1]={0},i,j,k;
for(i=2;i<=N;++i)c[i]=i;j=0;
for(i=2;i<=N;++i) if(c[i]!=0){p[j]=c[i];for(k=p[j];k<=N;k+=p[j])c[k]=0;++j;}
for(i=0;i<j;++i)printf("%d ",p[i]);}
>>624 (2)の方。1個目のヒントは無視。
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#define N 1000000
int* getPrimes(){
int count=1,prime=1,*primes=malloc(sizeof(int)*N),*judges=malloc(sizeof(int)*N);
int limit=1,next=2,next2=next*next,i;
for(i=1;i<N;++i)primes[i]=INT_MAX;primes[0]=2;
while(primes[count-1]<N){prime+=2;
if(next2<=prime){++limit;++next;next2=next*next;}
for (i=1;primes[i]<=limit;++i){while(judges[i]<prime)judges[i]+=primes[i];if(judges[i]==prime)goto while_end;}
primes[count]=prime;judges[count]=prime*2;++count;
while_end:;}free(judges);return primes;}
main(){int*p=getPrimes(),i=0;while(p[i]<N)printf("%d ",p[i++]);free(p);}
>>626 とりあえずソート以外
#include <stdio.h>
#include <stdlib.h>
typedef struct _list list;
struct _list{
int n;
list * next;
};
void showlist(list *header) {
list *p;
for (p=header->next; p!=NULL; p=p->next)
printf("%d ", p->n);
putchar('\n');
}
list * insert(int x, list *prev) {
list *ins, *next;
if ((ins=(list*)malloc(sizeof(list)))==NULL) return NULL;
next = prev->next;
prev->next = ins;
ins->next = next;
ins->n = x;
return ins;
}
list * delnext(list *prev) { //delete prev's next
list *del;
del = prev->next;
if (del == NULL) return NULL;
prev->next = del->next;
free(del);
return prev;
}
int delnum(int x, list *header) { list *p, *prev; int c = 0; prev = header; for (p=header->next; p!=NULL; p=p->next) { if (p->n == x) { delnext(prev); p = prev; ++c; } prev = p; } return c; } int getmax(list *header) { list *p; int max; max = header->next->n; for (p=header->next; p!=NULL; p=p->next) if (p->n > max) max = p->n; return max; } int delmax(list *header) { return delnum(getmax(header), header); } main() { int array[] = {5, 1, 1, 3, 4, 5, 0, 2, 3, 5, 1, 5}; int i; list _h, *header, *p; header = &_h; header->next = NULL; p = header; for (i=0; i<sizeof(array)/sizeof(int); i++) { insert(array[i], p); p = p->next; } }
インチキっぽいソートもできたがこれでいいんだろうか・・・(;´Д`) void intikisort(list *header) { list *p, _h, *tmphead; int c, max, i; tmphead = &_h; tmphead->next = NULL; while(header->next != NULL) { max = getmax(header); c = delmax(header); for (i=0; i<c; i++) insert(max, tmphead); } header->next = tmphead->next; } main() { int array[] = {5, 1, 1, 3, 4, 5, 0, 3, 5, 1, 5}; int i; list _h, *header, *p; header = &_h; header->next = NULL; p = header; for (i=0; i<sizeof(array)/sizeof(int); i++) { insert(array[i], p); p = p->next; } showlist(header); intikisort(header); showlist(header); }
632 :
暗号コード :2006/04/24(月) 19:01:29
[1] 授業単元:C programming
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1793.zip [3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 明日
[5] その他の制限: 一通り
[問題文]
1, すべてのshell scriptsを Makefilesに変える。(40%)
2, CVS version controlのもとにコードとMakefilesを置き、standard version keywordsを使って、updateし、version 2.0を宣言する。(10%)
3, default code valueを使わなければならないときは、いつでも、warning messageをstderrにprint outするようにsrc/getcode.cを書き変える。(10%)
4, 現在のコードは、アルファベットの大文字しか、encode/decodeできない。小文字、space, tab, newline, period, comma, query, bang,もできるようにコードを変える。(10%)
5,lib/cm_defs.hのtranslation table sizeを128から256に変え、unsigned charactersであるinput arrayを宣言するために、lib/{sparc,x86}/cm_trans.cのtranslate functionsを変える。(10%)
今、自分でも取り組み中ですが、最初からなかなか進みません。
どなたか、助けてください。部分的でもありがたいです。本当にお願いします。
>>632 最初から意味がわからんと思ったら訳違ってるじゃねーか
まともに訳せないなら原文貼れよ
634 :
暗号コード :2006/04/24(月) 19:24:36
中に入ってる、Makefileは、自分で作ったものですが、間違ってます。 一つではなく、sh filesように、ディレクトリごとに、作らなければならないと思います。
>>632 どこにもCVSなんて書かれてないのに、勝手に付け加えてる所からして
RCSやmakeとかのサポートしてくれるプログラムの事、なんも知らないんだろうな
[1] 授業単元:C言語実習 [2] 問題文(含コード&リンク):int型の配列とポインタを用意し、 ポインタをインクリメントしたとき、アドレスが何バイト進むのか表示しなさい。 表示例(答え):int = 4 [3] 環境 [3.1] OS:UNIX [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:今月中 よろしくお願いします。
悪い問題文だ
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): 長いので、次のレスに。 [3] 環境 [3.1] OS:windowsXP [3.2] Borland C++ 5.5.1 for Win32 [3.3] 言語:C言語 [4] 期限:[2006年4月26日まで] [5] その他の制限:まだCを勉強しだして3週間です。本屋に置いてある入門書は 何冊か読んでいるので、一通り基本的なことは理解しているつもりですが、 課題がハイレベルなのと、期限が短すぎるので今ピンチです。 かなり長い問題ですので解くのが面倒でしたらアドバイスだけでもお願いします。 時間的な余裕が無いので、大雑把でもいいので早めにお願いします。
>一通り基本的なことは理解しているつもりですが、 理解してないからピンチなんだろ
de,kadai ha naniyo?
もういいです。
643 :
639 :2006/04/25(火) 00:00:19
問;商品マスタファイル、店舗マスタファイル、売上マスタファイル、 都道府県マスタファイルを基にして、各店舗売上ファイルを作成せよ。 条件1;各ファイルは昇順に並んでいるものとする。 条件2;商品コードの先頭文字は、A;肉類、B;魚類、C;野菜の種類である。 条件3;店舗コードの先頭2文字、都道府県コードである。 条件4;各店舗売上ファイルの金額は、単価*数量である。 備考1;商品マスタファイル、店舗マスタファイル、売上マスタファイル、 都道府県マスタファイルにはすでにデータが入っている。(データ例は次スレで) 備考2;サイズはバイトである。 ・売上マスタファイル 項目 サイズ ・店舗マスタファイル 店舗コード 5 項目 サイズ 商品コード 5 店舗コード 5 売上数 5 店舗名 20 ・都道府県マスタファイル ・商品マスタファイル 項目 サイズ 項目 サイズ 都道府県コード 2 商品コード 5 都道府県名 6 商品名 20 単価 5 ・各店舗売上ファイル 項目 サイズ 店舗コード 5 都道府県名 6 店舗名 20 商品コード 5 商品名 20 単価 5 売上数 5 金額 10
次スレ建てる?(´Д`)
>636,640 授業でcvsの話をしていたので、てっきりそうなんだと、のcvs勉強をして、やってみてました。 >641 漢字はないです。 部分的でもいいので、どなたか助けてください。本当にお願いします。
647 :
639 :2006/04/25(火) 00:11:44
データ例 ・売上マスタファイル 店舗コード 商品コード 売上数 01001 A0001 10 01001 B0003 100 02001 A0002 55 02001 C0001 3000 03001 A0003 100 03001 B0004 1 03001 C0003 140 03002 A0003 30 05001 A0001 100 05001 C0003 5000 ・店舗マスタファイルデータ例 店舗コード 店舗名 01001 本店 02001 あおもりりんご店 03001 あきた店 03002 秋田空港前店 04001 岩手めんこい店 05001 仙台店 続きは次スレに。
次スレ建てる?(´Д`)
649 :
639 :2006/04/25(火) 00:23:16
>>647 の続き
データ例
・都道府県マスタファイル
都道府県コード 都道府県名
01 北海道
02 青森
03 秋田
04 岩手
05 宮城
・ ・
・ ・
・ ・
・商品マスタファイル
商品コード 商品名 単価
A0001 松坂牛 1500
A0002 米沢牛 1500
A0003 東京X 1000
A0004 飛騨牛 900
B0001 本マグロ 500
B0002 鮭 300
B0003 いくら 400
B0004 あさり 100
B0005 車海老 300
C0001 ニンジン 15
C0002 ピーマン 20
C0003 キャベツ 10
650 :
639 :2006/04/25(火) 00:34:13
各店舗売上ファイルデータ例 店舗コード 都道府県名 店舗名 商品コード 商品名 単価 売上数 金額 01001 北海道 本店 A0001 松坂牛 1500 10 15000 01001 北海道 本店 A0003 いくら 400 100 40000 03001 秋田 あきた店 A0003 東京X 1000 100 100000 ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・
651 :
639 :2006/04/25(火) 00:38:29
652 :
639 :2006/04/25(火) 00:43:32
>>640 確かにそうなのかも知れません。
もう一度、本をしっかり読み、基本を叩き込みたいと思います。
しかし、この問題を解くには時間がありません。
自分の力だけではどうしようもできないので、皆様の力を貸してください。
よろしくお願いします。
次スレって次スレって
これC言語でやんの? AccessとかSQL使ったほうが遥かに速そうなんだが・・・
655 :
639 :2006/04/25(火) 01:07:40
>>654 僕もそうおもったのですが、
C言語の講義なのでCじゃないとダメなんです。
面倒ですがお願いします。
656 :
デフォルトの名無しさん :2006/04/25(火) 01:31:27
[1] 授業単元: C言語プログラミング [2] 問題文(含コード&リンク): 4つのCSVファイルを読み込み、検索対象とするキーワードを入力し、そのキーワードが何個あるか計算し表示するプログラムを作れ。 CSVファイルは任意データを個人で作成し、プログラムソースとCSVファイルを提出すること [3] 環境 [3.1] OS: (Windows) [3.2] コンパイラ名とバージョン: ( VC 6.0等) [3.3] 言語: (C/C++/) [4] 期限: ([2006年4月26日00:00まで]) [5] その他の制限: 制限無し よろしくお願いします。
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク): #include <stdio.h> #include <stdlib.h> int main (void) { int i; int rv; srand(12345); for(i=0; i<10; i++) { rv = rand(); printf("%f\n", (double) rv/RAND_MAX); } return 0; } 0より大きく1より小さい一様乱数を生成するには何行目をどのように変更すればよいか [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語:C [4] 期限: 今月中 [5] その他の制限: なし 0以上1未満ならRAND_MAX+1でできるのですが0より大きいってところができないです。 よろしくお願いします。
>>657 適当だが、これでどうよ?
(rv + 1) / (RAND_MAX + 2)
659 :
デフォルトの名無しさん :2006/04/25(火) 01:43:36
[1] 授業単元:情報処理演習 [2] 問題文 :3変数の連立方程式をガウスの消去法を用いて解くプログラムを作成せよ a+3b-4c=8 a+b-2c=2 -a-2b+5c=-1 また、10の次数の連立方程式を、ガウスの方程式を用いて解くプログラムを作成せよ。 入力データーとして方程式の次数Nと各方程式の係数をプログラム実行時に読み込むようにせよ データはキーボードから入力 [3] 環境 [3.1] Linux [3.2]gcc [3.3] 言語:c [4] 期限: 水曜午後6時まで [5] 2題あるようですが片方だけでも宜しいのでできればお願いします
>>658 思いつきませんでした、助かります。
ありがとうございました
>>656 CSVってRFC4180でいいの?それともRFC違反の
MS実装をベースにするのどっち?
CSVファイルは任意
1,2,3,4,5,6 こうゆうベーシックなやつしか来ないんだよね? 空カンマとか意地悪無しで考えていいんだよね?
というか一週間前までに宿題は書こうな
ありがとうございます。 >662 特に何も言われてないです。 >664 はい。
>666 実は、あと12時間後です。 全てではなくて、良いので、本当によろしくお願いします。
>>637 #include <stdio.h>
main(){int a[2],*p=a;printf("int = %d",(int)++p-(int)a);}
671 :
デフォルトの名無しさん :2006/04/25(火) 07:15:03
int rmc(int p[],int i,int j) { int k; intm,q; if(i==j)return 0; for(k=i;k<j;k++){ q=rmc(p,i,k)+rmc(p,k+1,j)+p[i-1]*p[k]*p[j]; if(k==i)m=q; else if(q<m)m=q; } return m; } 行列の積の計算回数を最低にしたときの回数を求めようとしたんですが簡単な数を入れても おかしな値(数十兆くらい)が出てしまいますどこがおかしいんでしょうか?
672 :
671 :2006/04/25(火) 07:19:46
追加 [1] 授業単元: アルゴリズム [2] 問題文(含コード&リンク): <連鎖行列積問題> 入力: 行列積 A_1 x A_2 x … x A_n. 但し,A_iは p_i-1 x p_i 型. 問題: 乗算回数を最小化する演算順序を求めよ. (1) 分割統治法で解くプログラムを作成せよ. (2) 動的計画法(DP)で解くプログラムを作成せよ. (3) (1)と(2)の時間計算量を比較せよ. の1 [3] 環境 [3.1] OS: 環境:XP SP2 [3.2] VC++ 6.0) [3.3] 言語:C [4] 期限: 今日の8:30 [5] その他の制限: Cならば何でもおk 急ぎですいませんが誰かお願いします
673 :
デフォルトの名無しさん :2006/04/25(火) 07:35:54
誰もいないorz
674 :
639 :2006/04/25(火) 07:36:07
皆さん、お願いします。助けてください。
どなたか助けてください。本当にお願いします。Makefileだけでもいいので。
>>632
バカしかいないのでできないです(>_<)
そうです。ここにはバカしかいません。あなたたちの課題は、我々には難易度が高すぎます。
>>639 データ読み込んで管理して、吐き出せばすぐ終わるだろうが。
クラスか構造体使えば楽だろう。あとは自分で考えれ。
680 :
暗号コード :2006/04/25(火) 11:43:44
どなたか、私のもお願いします。 締め切りまで、あと4時間しかないのです。 本当にお願いします。
681 :
デフォルトの名無しさん :2006/04/25(火) 11:48:55
682 :
659 :2006/04/25(火) 11:52:22
ネット上のサンプルを写すのは禁止されているので多少変更していただけないでしょうか おねがいします
( ゚д゚)ポカーン
684 :
デフォルトの名無しさん :2006/04/25(火) 11:59:44
>>682 夏目漱石は小説「こころ」の中で、 「向上心のないものは、馬鹿だ」 と書いた
( ゚Д゚ )・・・・・・
>>681 staticの意味を理解しているならx=2とか少なめに変えてみて紙に書き出してみろ。
687 :
デフォルトの名無しさん :2006/04/25(火) 13:31:29
>>686 あ、たぶん分かりました
ありがとうございあした
688 :
& ◆VP9H0VHJzM :2006/04/25(火) 14:00:20
誰かできるやつ、おらんのか
なかなかいい宿題だな。解いてやる気はしないけど。
いい課題だな 見てないけど
あと、1時間しかないです。 お願いします。どなたか、助けてください。 本気でピンチです。。。
693 :
デフォルトの名無しさん :2006/04/25(火) 15:42:48
よし、任せろ。 俺の実力を持ってすれば1時間もかからないぜ。 あと30分で上げてやる。
694 :
デフォルトの名無しさん :2006/04/25(火) 15:46:09
嘘つきは泥棒の始まり
>>693 お願いします。最後の望みです。
696 :
デフォルトの名無しさん :2006/04/25(火) 15:52:46
2ちゃんねるは嘘つきの始まり
みんなうそつき。大嫌い。
ウソつきではないのです。まちがいをするだけなのです。
700 :
デフォルトの名無しさん :2006/04/25(火) 19:35:29
ここに出てる宿題って高校の?それとも大学の?
大学のレベルに見えますか。
702 :
デフォルトの名無しさん :2006/04/25(火) 19:40:07
ごめん、見えない
703 :
デフォルトの名無しさん :2006/04/25(火) 19:53:22
>>682 ここに書いたものを写した時点で ネット上のサンプルを写した のと同じことなんだけど・・
同じ事というか、ずばりそのもの
705 :
デフォルトの名無しさん :2006/04/25(火) 20:59:15
開始時刻(時(h1)、分(m1))と終了時刻(時(h2)、分(m2)) を読み込み、開始から終了までの時間を分(md)で求め、表示してください。 hdを求める式は1つで書いてください。 例 開始時間、時?9 開始時刻、分?30 終了時刻、時?14 終了時刻、分?10 4時間40分 この問題のソースを教えてください。
>>705 int hd,md;
hd=(h2*60+m2-h1*60-m1)/60;
md=(h2*60+m2-h1*60-m1)%60;
って事?
707 :
639 :2006/04/25(火) 21:25:33
708 :
デフォルトの名無しさん :2006/04/25(火) 21:30:52
>>706 すいません。ちょっと抜けてました
開始から終了までの時間を時(hd)、分(m)で求め表示してください。
でした
[1] 授業単元: プログラミング1 [2] 問題文(含コード&リンク): #include <stdio.h> main() { int c,a,b; printf("文字を入れて下さい"); c=getchar(); a=c+0x20; b=(c<=0x5a)?a:c; printf("%c",b) } を改良して、アルファベットの大文字を入れると小文字に、小文字をいれると大文字に変換するプログラムにせよ [3] 環境 [3.1] OS: (Windows/Linux/等々) Win [3.2] コンパイラ名とバージョン: borland [3.3] 言語: C [4] 期限: あした [5] その他の制限: なし
>>711 すいません 問題そのまま写したので高圧的に感じたかもしれません。
最後にお願いしますと付け忘れてしまいました。すいません
ワロタwwwwww
>>710 が何処へ行っても嫌われるwwwwwwwwww
toupper, tolower
656の宿題してみたかった。
[1] 授業単元: 画像処理 [2] 問題文(含コード&リンク): 以下は,画像をR成分だけにするプログラム例である. (プログラム例1) #include "_wmgraph.h" #include "_stdfunc.h" main() { _init_wmimage(); printf("JPEGファイルを表示します.\n"); printf("何かキーを押して下さい.\n"); getchar(); char fname[256]; if(_fileopen(fname)) { _bmap *b = _read_bmap(fname); _newpage(1,"JPEG FILE",10,10,-(b->w),-(b->h)); _setactivepage(1); _put_bmap(b, 10); _putimage(0,0,10); _setactivepage(1);
//画像の操作 unsigned char *c = b->b;//bの画素の先頭へのポインタ int blw=b->lw; //画素1ラインのバイト数 for (int i=0; i<b->h; i++) for (int j=0; j<b->w; j++) { //配列cで(i,j)画素の操作ができる. c[blw*i+3*j+0]=0; //Blue c[blw*i+3*j+1]=0; //Green //c[blw*i+3*j+2]=0; //Red } _newpage(2,"JPEG FILE",20,20,-b->w,-b->h); _setactivepage(2); _put_bmap(b, 10); _putimage(0,0,10); _setactivepage(2); delete b;//画像を破棄 } return 0; }
問題:画像をグレースケールにする.画像をネガにする. (参考)画像をグレースケールにするときの注意:画像をグレースケールにするときには,R,,G,B各成分をすべて共通の平均値(R+G+B)/3にすればよいように思うだろう.しかし,色彩の理論によれば,そうではなく,重みをつけた平均 0.2126R+0.7152G+0.0722B を使わなければならないことが知られている.単なる平均を使った場合と,色彩理論による正しい方法でつくったグレースケール画像を同時に表示して比較してみよ. [3] 環境 [3.1] OS: WindowsXP [3.2] Miclosoft Visual Studio.net 2003 [3.3] 言語: C++ [4] 期限: 2006年4月26日17:00迄 [5] その他の制限: 特に無し 長くなってしまいましたが、どうか宜しくお願い致しますm(_ _)m
>>710 int main(void){
int c, a, b;
puts("文字を入れて下さい");
c=getchar();
b=((c>=0x41)&&(c<=0x5a))?(c+0x20):(c-0x20);
printf("%c",b);
return 0;
}
>>720 不正な文字 ' ' (0x8140)と出てコンパイルできません・・・
723 :
デフォルトの名無しさん :2006/04/26(水) 00:03:47
724 :
697 :2006/04/26(水) 00:04:15
>715 今更だが、やっていいと思うよ。 他の人が答えたからってやっちゃ駄目って事はないし、今までだって複数人が回答した事もあったしね。 あんまり気にせずに好きにすればいいんじゃないか?
[1] 授業単元:C言語実習 [2] 問題文(含コード&リンク): 整数値a,b,cをキーボードから与えたとき,ax"+bx+c=0の解を求めるプログラムを作成せよ。 ただし、平方根を求めるためにsqrt関数を使用すること。 ※axのxについてある『"』は二乗という意味です。二乗をキーボードからどうやって 打つかわかりませんでした。。 よろしくお願いします。 [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン:BCC [3.3] 言語:C [4] 期限:できれば明日の朝まで。 [5]補足:そこまで難しいところまで習ってないので、一番簡単でシンプルな解答をお願いします。 前に591で質問したんですけど、その返答のプログラムが難しかしくて、提出しても先生に説明できず 困ったので簡単でシンプルなやつをどうぞお願いします。
>>725 えぇ〜、割と簡単に作ったつもりなのに(´・ω・`)ショボーン
それよりも、日本語でおk
727 :
デフォルトの名無しさん :2006/04/26(水) 00:19:59
728 :
bit ◆bRMlyjWKAQ :2006/04/26(水) 00:20:36
こんばんは、お世話になりたいと思い書き込みしました。 高校2年です。 ここ3日間悩んだんですが自分では解決に至りませんでした。 皆様お願い致します。 [1] 授業単元:情報B [2] 問題文:unsigned longの32ビット列があります。 任意の位置を指定し0か1か判定不能かを調べる関数bitCheckを作れ。 [3] 環境 [3.1] OS:WindowsXP sp1 [3.2] コンパイラ名とバージョン:bcc ver5.5 [3.3] 言語: C言語 [4] 期限:2006年05月01日10:40まで [5] その他の制限: 特にないと思います。
729 :
デフォルトの名無しさん :2006/04/26(水) 00:21:03
両方レベル低・・・・
判定不能ってどういうこと?!
>>728 判定不能の意味が分からない
unsigned long bitCheck(unsigned long value,int n){
return value & 1 << n;
}
>>725 基本的なこと聞くが(代数的に)解を求める方法は知ってるのか?
以下、ソースです。 #include<stdio.h> #define __Val1 0x12345678 #define __Val2 0x87654321 #define __ValX 0xFFFFFFFF typedef struct { unsigned long Bit; //検定値 int Num; //ビット位置指定 int Result; //検定結果 } _bitUnit; _bitUnit Tab[]= { { __Val1, 0, 0 } ,{ __Val1, 1, 0 } ,{ __Val1, 2, 0 } ,{ __Val1, 3, 0 } ,{ __Val1, 4, 0 } ,{ __Val1, 41, 0 } ,{ __Val1, -1, 0 } ,{ __Val2, 33, 0 } ,{ __Val2, 32, 0 } ,{ __Val2, 31, 0 } ,{ __Val2, 20, 0 } ,{ __Val2, -3, 0 } ,{ __Val2, 1, 0 } ,{ __ValX, 0, 0 } //テーブル終了 };
//ここから先を変更する int bitCheck(int c,long arr) { printf("検定値は%d",arr); printf("位置は%d",c); arr >>= c; printf("シフト後は%d",arr); //指定位置が0〜32の間かを調べて測定値を返す if (c < 0){ //指定位置が0以下か調べる c = -1; //指定位置が0以下なとき-1を返す } else { if(c <= 32){ //指定位置が32以下か調べる c = (arr & 0x00000001); //アンドを取って1か0を返す } else { //指定位置が33以上なとき c = -1;//-1を返す } return(c); }; //ここまで
void bitChk(void) { int i; for(i=0; Tab[i].Bit != __ValX; i++){ Tab[i].Result = bitCheck(Tab[i].Num, Tab[i].Bit); printf("検定結果:%d\n",Tab[i].Result ); } }; //■F:\bcpad231> bcc32 bitE.c //Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland //bitE.c: //エラー E2140 bitE.c 51: ここでは宣言はできない(関数 bitCheck ) //エラー E2141 bitE.c 52: 宣言の構文エラー(関数 bitCheck ) //エラー E2134 bitE.c 58: 複合文に } がない(関数 bitCheck ) //警告 W8070 bitE.c 58: 関数は値を返すべき(関数 bitCheck ) //*** 3 errors in Compile *** 以上です。お願いします。
>>725 とりあえずa,b,cに入力するところはパスで。
if(a==0){
if(b!=0){printf("x=%f\n",c/(double)b);}
else{printf("aもbも0だと無理です。\n");}
}else{
if(b*b-4*a*c<0){printf("解なし。\n");}
else if(b*b-4*a*c==0){printf("x=%f\n",-b/(2.0*a));}
else{printf("x=%f,%f\n",(-b+sqrt(b*b-4*a*c))/(2.0*a),(-b-sqrt(b*b-4*a*c))/(2.0*a));}
}
>730様 >731様 判定不能とは指定位置に1〜32以外が入ったときです。
>>738 普通0-31のような気がするけどまぁいいや。
/*
valueのnビット目が立っているか確認する
返地
+0 -> bitがたってない
+1 -> bitがたっている
-1 -> 範囲外
*/
int bitCheck(unsigned long value,int n){
return n-1 <32u ? value>>n-1 & 1 : -1;
}
>>732 はい。たぶん。。
>>734 複素数は考えないです。
すいません、さっきの問題の追加で、「a=0ではない」ということでお願いします。
>>725 D=b^2-4acとするとき D>=0なら解ありでx=(-b+-sqrt(D))/2a D<0なら解なし、ってことを踏まえて
#include <stdio.h>
#include <math.h>
main() {
double a, b, c, D;
/* a〜cを与える処理は自分で書きやがれコンチクショウ */
D = b*b - 4*a*c;
if (D<0)
printf("解無し\n");
else if(D=0)
printf("x = %f\n", -b/(2*a););
else
printf("x = %f, %f\n", (-b-sqrt(D))/(2*a), (-b+sqrt(D))/(2*a));
}
コンパイルしてないけど多分あってる(´・ω・`)
>738様 そうですよね。0〜31ですね。 マイナスも考慮しなければいけなかったので改良しました。 // int bitCheck(int n, unsigned long value){ if(n>=0){ return n-1 < 32u ? value>>n-1 & 1 : -1; } else{ return n = -1;} } ; 完成しました。 大変助かりました。 ありがとうございました。
743 :
739 :2006/04/26(水) 01:00:17
>>742 たぶん俺のこと指してると仮定して話す。
全然改良になってない。俺の奴は最初から負数も考慮している。
もし、範囲を1-32から0-31に変えたいのなら俺のコードのn-1の部分をnに変えればOK
>739様 ありがとございます。 739様のプログラムは仰る通り負数を考慮してると思いました。 しかし結果は「0」が返されてしまったので改良してみました。 ちょっとナゾです。
>739様 やはり int bitCheck(unsigned long value,int n){ return n <32u ? value>>n & 1 : -1; } ではダメです。負数の位置に「0」が返されます。 以下で完成とします。 int bitCheck(int n, unsigned long value){ if(n>=0){ return n < 32u ? value>>n & 1 : -1; } else{ return n = -1;} } ; 夜分遅くに付き合っていただき、ありがとうございました。
747 :
739 :2006/04/26(水) 01:16:35
>>744 んー0が返るのか。
原因として思いつくのはn-1 < 32uとちゃんと書いてないとか。
例えば、 n < 33uとか n-1<32とか n<=32uとかそういう風に変形するとうまく動かなくなる。
もしちゃんと書いてて結果が変なら俺には原因が分からん。
俺の手元の全てのコンパイラで問題なく動くし
748 :
739 :2006/04/26(水) 01:18:18
>>746 それでうまく動かないのか......
一応動かない入力の厳密な組み合わせを1個で良いから教えて。
ちょっと調べてみるから
>>746 あ、そうだもう一つ原因が思いついた。
上下の関数で引数の順序が入れ替わってるけど、
引数の順番間違えてるとか (まぁさすがに、これはないか
>739 俺も試してみたけど0になったよ。 return (unsigned int)(n-1) < 32u ? value>>n-1 & 1 : -1; で強制的にunsigned intにしたら-1になったけど。 ちなみにwinXPでbcc
752 :
739 :2006/04/26(水) 01:40:13
>>751 BCCって暗黙の整数の昇格が正しく実装されていないのかー
間違いなくコンパイラのバグですねぇ。
コンパイラを疑うのは普段絶対しないから気づかんかった。ありがと
>>750 というわけでBCCのバグのようなので、
>>751 のようにキャストしてくださいな。
>>739 様
int bitCheck(int n,unsigned long value){
return (unsigned int)(n-1) < 32u ? value>>n-1 & 1 : -1;
}
は「-1」が返されました。
問題点はなんだったのかナゾですが、一応これで完成ということで。
本当にお世話になりました。
ありがとうございました。
754 :
751 :2006/04/26(水) 01:48:03
追記。cygwinでgccを試したら元の>739のソースでも正しく-1と出た。
>>739 様
父の.NET2003でも元ソースで正常に動きました。
ボーランドのコンパイラは信用ならないと痛感しました。
以上、ありがとうございました。
>>754 追試ありがと。
やっぱり他のコンパイラでは正しく出ますね。
自分も追試ということで、clとdmcとgccでやってみた。
結果は全部正しい結果になった。
bcc持ってないから他のコンパイラで試したのが仇だったか......
>>755 まぁコンパイラのバグを正確に把握してない俺も悪いんだけどなw
うーん、templateの展開に難があるからbccって使ってないんだけど、
バグチェック用にbccもダウンロードしたほうが得策っぽいな。
ま、動いたから良しということで気分よく寝るわー。
なんか宿題の量がすごいあるな 暇ならやってみたいけど今はまんどくせ
758 :
デフォルトの名無しさん :2006/04/26(水) 02:58:11
[1] 授業単元:C言語実習 [2] 問題文:y=2x^2の値を0≦x≦5の範囲で0.5刻みに計算し、表示するプログラムを作成しなさい。 ただし、get_sqrなる関数を各自定義し、2x^2の値はそれにより計算させること。 また、結果を以下のように表示させること x=0.0 y=0.0 x=0.5 y=0.5 x=1.0 y=1.0 ・ ・ ・ ・ x=5.0 y=0.0 [3] 環境 [3.1] OS:linux [3.2] コンパイラ名:gcc [3.3] 言語: C [4] 期限:木曜3時 [5] すみませんが、どうかお願いいたします
759 :
デフォルトの名無しさん :2006/04/26(水) 02:59:22
[1] 授業単元:C言語実習 [2] 問題文:y=2x^2の値を0≦x≦5の範囲で0.5刻みに計算し、表示するプログラムを作成しなさい。 ただし、get_sqrなる関数を各自定義し、2x^2の値はそれにより計算させること。 また、結果を以下のように表示させること x=0.0 y=0.0 x=0.5 y=0.5 x=1.0 y=1.0 ・ ・ ・ ・ x=5.0 y=0.0 [3] 環境 [3.1] OS:linux [3.2] コンパイラ名:gcc [3.3] 言語: C [4] 期限:木曜3時 [5] すみませんが、どうかお願いいたします
760 :
デフォルトの名無しさん :2006/04/26(水) 03:00:07
2重投稿もうしわけありません
#include <stdio.h> double get_sqr(double x){ return 2.0 * x * x; } int main(){ int i; double x, y; for(i = 0;i <= 50;i += 5){ x = i / 10.0; y = get_sqr(x); printf("x=%1.1f y=%1.1f\n", x, y); } return 0; }
#include <stdio.h> double get_sqr(double x) { return 2 * (x * x); } int main() { double x, y; for(x = 0 ; x <= 5 ; x += 0.5) { y = get_sqr(x); printf("x=%.1f y=%.1f\n", x, y); } return 0; } 素人コードで参入
763 :
デフォルトの名無しさん :2006/04/26(水) 06:46:10
開始時刻(時(h1)、分(m1))と終了時刻(時(h2)、分(m2)) を読み込み、開始から終了までの時間を時(hd)、分(m)で求め表示してください。 hdを求める式は1つで書いてください。 例 開始時間、時?9 開始時刻、分?30 終了時刻、時?14 終了時刻、分?10 4時間40分 この問題のソースを教えてください。
765 :
デフォルトの名無しさん :2006/04/26(水) 12:24:35
[1] 授業単元:プログラミング演習 [2] 問題文: 16進数の乗算を求めるプログラムを作成せよ [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名: gcc [3.3] 言語: C [4] 期限:4月28日
>>765 int main(){
printf("%x\n",0x10 * 0x2);return 0;}
767 :
765 :2006/04/26(水) 13:02:56
2つの16進数を読み込んで、その乗算を出力するような感じで作成していただきたいです
#include <stdio.h> main(){ int n1, n2, p; scanf("%x %x", &n1, &n2); p = n1 * n2; printf("%x\n", p); }
769 :
725 :2006/04/26(水) 14:19:48
>>737 >>741 両方ともエラーがでるんですよ。
もう一度、すいませんが検討してみてください。
それと、できれば最初から最後までのプログラムをお願いします。
それくらい自分でやれ 問題の大部分を解いてくれた人に失礼だろうが
771 :
741 :2006/04/26(水) 15:13:32
検討してみてください、とはえらそうなやつだ(゚Д゚) 俺のは else if(D=0) printf("x = %f\n", -b/(2*a)); になおせばコンパイルは通るぞ
>>769 コンパイラのメッセージからミスを修正できない+その程度の補完も出来ない奴が
C言語の講義の単位取る資格なんてないんじゃね?
>>769 何様だ、お前は
最初にお前が質問したときに作られたソースを少しいじればできるだろ。
それを習ってないとか難しいとか文句ばっかり言いやがって
学習する気のないやつにできるわけないだろ、と。
おまえこそ何様だ。 質問者の都合なんて放っとけよ。
[1] 授業単元: 文字列 [2] 問題文(含コード&リンク): 標準入力から文字列を読み込み、文字列の 数値を0に置き換えて表示するプログラミングを作りなさい。以下のような 結果になるようにする。 abc123dt→abc0dt 111 222 aaa bbb→0 0 aaa bbb [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: [無期限] [5] その他の制限: です。一応自分でも作って見たんですがスペースを文字列に入れるとうまく 働かなかったり、どうしても出来ません。よろしくおねがいします。
期限が無制限か 来年の今ごろ、覚えていたらやってやるよ
>>775 #include<stdio.h>
#include<ctype.h>
int main(){
for(;;){
int c=getchar();
if(isdigit(c))for(putchar('0');isdigit(c=getchar());){}
if(c==EOF)break;
putchar(c);
}
}
>>777 さんありがとうございました。1文字出力と入力のときはgetcharとputchar
をつかえばよかったんですか・・・とても参考になりました〜
穴埋め問題ですが・・・。 fopen関数はモードを指定し、ファイルをどのように利用するか明確にする。 書き込み専用に利用するのであればモードは( 14 )であり また、読み取り専用にオープンするのであれば、( 15 )となる。 また、追加書き込みを可能にする場合は、( 16 )を用いると良い。 バイナリファイルを利用するときはモードに( 17 )をつける。 C言語にはランダムファイルを利用する関数が無いので、 必要なデータの先頭位置にアクセス位置を( 18 )関数に移動して、アクセスを行う。 14〜15に当てはまる言葉を教えてください。よろしくお願いします。
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク):#include <stdio.h> #include <limits.h> #include <float.h> main() { int a; printf("size of (a ) = %dbyte\n", sizeof(a)); printf("size of (short int ) = %dbyte\n", sizeof(short int)); printf("size of (int ) = %dbyte\n", sizeof(int)); printf("size of (long int ) = %dbyte\n", sizeof(long int)); printf("size of (float ) = %dbyte\n", sizeof(float)); printf("size of (double ) = %dbyte\n\n", sizeof(double)); printf("TYPE\t\tMIN\t\t\tMAX\n"); printf("char\t\t%d\t\t\t%d\n", CHAR_MIN, CHAR_MAX); printf("short\t\t%d\t\t\t%d\n",SHRT_MIN, SHRT_MAX); printf("int\t\t%d\t\t%d\n", INT_MIN, INT_MAX); printf("long\t\t%ld\t\t%ld\n", LONG_MIN, LONG_MAX); printf("float\t\t%f\t\t%f\n",FLT_MIN,FLT_MAX); printf("float\t\t%e\t\t%e\n",FLT_MIN,FLT_MAX); printf("double\t\t%lf\t\t%lf\n", DBL_MIN, DBL_MAX); printf("double\t\t%e\t\t%e\n", DBL_MIN, DBL_MAX); } このプログラムを実行し、各変数に用いられてるbyte数と最大値最小値を確認し、考察せよ [3] 環境 [3.1] OS: Win [3.2] コンパイラ名とバージョン: borland bcc [3.3] 言語: C [4] 期限: 今週中まで [5] その他の制限: 特にありません やたらながいのがでてきて表記に困ってます、考察もなにをいったらいいか・・・お願いします
>>779 googleを開いて「fopen」でぐぐるんだ。
一番最初のヒットページを見れば
14:w 15:r 16:a
までは小学生でも埋められるだろう。
あと数行読み進めれば
17:b
が分かって、ちょっと根気良く読み進めれば
18:fseek
も分かるだろ。ちょっとくらい調べてから聞けよ。
>>782 じゃぁサイズが2倍になったら表せる範囲も2倍になってるらしいぞ。とか
同じサイズなのに表せる範囲が違うのはこうじゃないか?とか
あと注意するのはfloatとdoubleのとこの%fと%eについて調べるくらいでいいんじゃね?
[1] 授業単元:プログラミング言語C [2] 問題文:投入金額と購入金額の値を入力してお釣りを表示するプログラムの作成 (お釣りは五千円札x枚、千円札y枚、百円玉z枚)といった感じです [3] 環境 [3.1] UNIX [3.2] gcc [3.3] C [4] 期限: 今日の日付が変わるまで お願いします
>>786 #include <stdio.h>
int main() {
int a, b;
printf("投入金額?:");scanf("%d", &a);
printf("購入金額?:");scanf("%d", &b);
printf("お釣りは一円玉%d枚\n", a - b);
return 0;
}
要求は正確に伝えないとヘリクツこねられる。
>>786 コンパイルはしてないので適当に修正しる
金額が負のときとかまったくかんがえてましぇん
#include <stdio.h>
main() {
int tonyu, konyu, oturi, x, y, z;
printf("投入金額:");
scanf("%d", &tonyu);
printf("購入金額:");
scanf("%d", &konyu);
oturi = tonyu - konyu;
x = oturi / 5000;
oturi %= 5000;
y = oturi / 1000;
oturi %= 1000;
z = oturi / 100;
printf("稲造:%d枚, 漱石:%d枚, 100円玉:%d個\n", x, y, z);
}
>>777 チョット気になったんですが、この分はどんな処理をしているんですか?
for(putchar('0');isdigit(c=getchar());)
>>789 細かいつっこみを無視すれば
for(A;B;C){〜}
は
A
while(B){
〜
C}
と一緒。
792 :
1/2 :2006/04/27(木) 01:20:29
>>786 #include <stdio.h>
int main() {
int pay, buy, oturi=0,
itiman, gosen, nisen, sen, gohyaku, hyaku, gojuu, juu, goen, itien;
printf("投入金額 > ");
scanf("%d", &pay);
printf("購入金額 > ");
scanf("%d", &buy);
while(pay < buy) {
printf("金額オーバー、再入力 > ");
scanf("%d", &buy);
}
oturi = pay - buy;
if(oturi <= 0) {
printf("お釣りはありません。");
return 0;
}
itiman = oturi / 10000;
oturi %= 10000;
gosen = oturi / 5000;
oturi %= 5000;
nisen = oturi / 2000;
oturi %= 2000;
793 :
2/2 :2006/04/27(木) 01:21:08
sen = oturi / 1000; oturi %= 1000; gohyaku = oturi / 500; oturi %= 500; hyaku = oturi / 100; oturi %= 100; gojuu = oturi / 50; oturi %= 50; juu = oturi / 10; oturi %= 10; goen = oturi / 5; oturi %= 5; itien = oturi / 1; oturi %= 1; if(itiman) printf("一万円札が%d枚。", itiman); if(gosen) printf("五千円札が%d枚。", gosen); if(nisen) printf("二千円札が%d枚。", nisen); if(sen) printf("千円札が%d枚。", sen); if(gohyaku) printf("五百円玉が%d枚。", gohyaku); if(hyaku) printf("百円玉が%d枚。", hyaku); if(gojuu) printf("五十円玉が%d枚。", gojuu); if(juu) printf("十円玉が%d枚。", juu); if(goen) printf("五円玉が%d枚。", goen); if(itien) printf("一円玉が%d枚。", itien); return 0; }
二千円札キター(´Д`)
[1] 授業単元:C言語入門 [2] 問題文:問題1.以下のメンバを持つ構造体があるとき、各メンバに任意の値を代入し画面に 表示プログラムを書きなさい。 メンバ1:char mark メンバ2:char para[5] メンバ3:int no 問題2.1で作成したプログラムを、画面表示処理のみ別関数にした形にしなさい。 (別関数名は任意) 問題3.2で作成したプログラムを、画面表示関数の仮引数にポインタを使用した形に 書きかえなさい。 問題4.3で作成したプログラム中の構造体をtypedefを用いた形に書きかえなさい。 [3] 環境 [3.1] UNIX [3.2] gcc [3.3] C言語 [4] 期限: 27日の昼までですが早ければ早いほど嬉しいです。 よろしくお願いします。
問題1---------- #include <stdio.h> struct data_s { char mark, para[5], int no; }; int main(void){struct data_s data = {'c', "hoge", 2}; printf("mark->%c\npara->%s\nno->%d\n", data.mark, data.para, data.no); return 0;} 問題2---------- #include <stdio.h> struct data_s { char mark, para[5], int no; }; void display(struct data_s d){printf("mark->%c\npara->%s\nno->%d\n", d.mark, d.para, d.no);} int main(void){struct data_s data = {'c', "hoge", 2}; display(data); return 0;} 問題3----------- #include <stdio.h> struct data_s { char mark, para[5], int no; }; void display(struct data_s* p){printf("mark->%c\npara->%s\nno->%d\n", p->mark, p->para, p->no);} int main(void){struct data_s data = {'c', "hoge", 2}; display(&data); return 0;} 問題4----------- #include <stdio.h> typedef struct { char mark, para[5], int no; } data_t; void display(data_t* p){printf("mark->%c\npara->%s\nno->%d\n", p->mark, p->para, p->no);} int main(void){data_t data = {'c', "hoge", 2}; display(&data); return 0;} ---------------- 詰め込んだ気がするけど、こんなもん?
眠いけど寝れる気がしないなぁ
>>796 問題4だけで堪忍
#include <stdio.h>
typedef char char1;
typedef int int1;
struct TEST {
char1 mark;
char1 para[5];
int1 no;
};
void out(struct TEST *temp) {
printf("mark=%c\n"
"para[5]=%s\n"
"no=%d\n", temp->mark, temp->para, temp->no);
return;
}
int main() {
struct TEST test = {'a', "test", 1};
out(&test);
return 0;
}
799 :
798 :2006/04/27(木) 02:52:04
しまった、問題よく読んでなかった 無視でよろしく(´・ω・)
[1] 授業単元: プログラミング [2] 問題文:プログラムPrint_ScreenにABE IOKA OGAWA FUKUMORIというパラメタが 与えられている場合、argc、argvの値をすべて答えなさい。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 明日の午前中 [5] その他の制限:よろしくおねがいします。
print_screen.c ここから #include <stdio.h> #include <stdlib.h> int main(void) { int i; printf("argc=%c\n", argc); for( i = 0 ; argv[i] != NULL ; i++ ) { printf("argv[%d]=%s\n", i, argv[i]); } return 0; } print_screen.c ここまで $ gcc print_screen.c -o Print_Screen $ ./Print_Screen ABE IOKA OGAWA FUKUMORI
わからない点 *bp bp b の区別がよくわからない Get_int関数がどのような処理を行っているのか? B++ num++などの ++表現 #define SKIP(cp) {while(isspace(*cp)) cp++;の機能がどのように使われているか SKIPが使用されることでどのような処理がされているか [1] 授業単元: プログラミング [2] 問題文:このプログラミングがどのような処理を行っているか答えよ [3] 環境 [3.1] OS: Win [3.2] コンパイラ名とバージョン: vi [3.3] 言語: C [4] 期限: 出来れば今日の午前中〜午後3時くらいまでに [5] その他の制限:よろしくおねがいします。漠然とした質問でスイマセン時間がないもので。 うpろだの15にソースを貼っておきました。
>>802 リンクを貼りましょう。ここの住人だって別にうpろだをブックマークしてるわけじゃないんだから。
>>802 正直、書かれているコメント通りの動作(ただし get_int() 内にある *i *= 0; 以外)しかしてないと思うんだが。
>*bp bp b の区別がよくわからない
はよく初心者が混乱することで有名だから別にいいけど
>B++ num++などの ++表現
が分からないんだったら一から勉強しなおして。今後プログラム
やらないとしても、この状況でプログラムの単位もらわないで。
ついでに、vi はコンパイラじゃない。
[1] 授業単元:C言語 [2] 問題文:fopen()関数が以下の定義の時の処理内容と戻り値を答えなさい。 定義:FILE *fopen(char *filename, char *mode); 処理内容: 戻り値: [3] 環境 [3.1] UNIX [3.2] gcc [3.3] C [4] 期限: 今日中にお願いします。
>>800 main関数の引数がvoidだと無理
int main(int argc, char *argv[])
で
$ ./Print_Screen ABE IOKA OGAWA FUKUMORI
とでもすれば
argc=ここは未定
argv[0]=Print_Screen
argv[1]=ABE
...
argv[4]=FUKUMORI
とでもなるんじゃない?試してないけど
>>805 fopen()の中身が書かれていないので分かりません。
809 :
801 :2006/04/27(木) 03:56:23
>>805 質問に不備がないんだったら
www.linux.or.jp/JM/html/LDP_man-pages/man3/fopen.3.html
ここの内容を適当にコピればOK。
>>807 $ ./Print_Screen ABE IOKA OGAWA FUKUMORI
とするなら argc は5だね。
>>801 printf("argc=%c\n", argc);
は%cじゃなくて、%dではないか?
812 :
デフォルトの名無しさん :2006/04/27(木) 09:33:37
[1] 授業単元:プログラム以前の問題・・・orz [2] コンパイルできないつД`)・゚・。・゚゚・*:.。 [3] 環境 [3.1] win xp [3.2] vcc 5.5 [3.3] C [4] マッハ [5] C言語勉強始めたいつД`)・゚・。・゚゚・*:.。 昨日本買ってコツコツ勉強しようとしたんだけどさ、 「Error: 外部シンボル'_main'が未解決」って出てくる(´・ω・`) 一応ググってみたが意味わからんヽ(´ー`)ノ 誰か解決方法を漏れみたいなド素人でもわかるように教えてエロイ人
813 :
812 :2006/04/27(木) 09:36:46
ageちまったorz
宿題じゃないならスレ違いだ。
815 :
812 :2006/04/27(木) 10:12:53
そうか・・・許せ
コンソールプロジェクトでやってみたら それ、Windowsプログラムになってない?
818 :
デフォルトの名無しさん :2006/04/27(木) 12:16:23
質問なんですが、整数a,b,cを与えたとき、ax^2+bx+c=0の解を求めるプログラム教えてくれないですか? コンピュータ苦手で
断る。
>>818 >817
コンピュータ苦手とか以前に、常識を弁えろ。
822 :
デフォルトの名無しさん :2006/04/27(木) 12:56:41
[1] 授業単元: 情報工学演習 [2] 問題: 多倍長整数の演算プログラムをつくる [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 4月27日まで [5] その他の制限: まだポインタはよくわかりません。。。 整数(int型)を受け取って、それを配列に一数値づつ区切って入れたいのですが どうやるのでしょうか? やはりchar型に変換しなくてはならないですか? ちなみにsprintfでchar型に変換しようとしましたが、11桁?以上になると なぜか変換できなくなるみたいです。(strlenで数えられなくなる)
>>822 期限が今日ということは、既に期限切れか?
あんたの理解が悪すぎるらしくて説明が殆ど理解できないから、
宿題として丸投げしたいなら問題を正確に書き写せ。
丸投げではなくある程度は自力でやりたいなら日本語の勉強を
しなおしてから初心者スレ辺りへ。
int p[128],i,err; for(i=0;i>128;i++){ if(scanf("%d",*p[i])==0) break; }
また意味不明なコードの断片を…… 突っ込み所が多すぎて涙が出てくるぞ。
826 :
824 :2006/04/27(木) 13:07:44
正直すまんかった
827 :
デフォルトの名無しさん :2006/04/27(木) 13:16:15
最初からそれうpしろ禿 sageろ
何でここの回答者は威張ってるんだ?
832 :
デフォルトの名無しさん :2006/04/27(木) 13:39:33
答えて*やってる*から。 嫌なら他あたってくれ。
>>832 おまえがそう思うのは勝手だが、そう思うのが当然だとは決めつけないでくれ。
「答えてやってる」なんて考えたこともない回答者もいる。
834 :
827 :2006/04/27(木) 14:06:46
そろそろお願いできますか?^^;
835 :
827 :2006/04/27(木) 14:13:50
No.1802 さん本当にありがとうございます。 自分なりにがんばって理解して勉強してみますm(__)m
837 :
デフォルトの名無しさん :2006/04/27(木) 16:44:31
_,,,,、、、、、、,,_ 、-''~:::::::::::::::::::::::"ー-,, .;":::::::::::::::::::::::::::::::::::::::::::i! |:::/ ̄ ̄ ̄`' ̄ ̄¨ヾ::::| |:::| ━、_ _.━ |.:.:.:| |/ ,-ェュ 、 ,-ェュ、 |.:.:.|_ (゙| ´ ̄ ,/ 、  ̄` |/,. | | ( 、 ゙、__,-'' 、)ヽ__/ 俺達に感謝しろよ \ `こニニ'´ _..┘ \___ _,/ヽ _,. - ' ヽ...|:::::|... -‐' `` ヽ、 ,. '" ,r::::::::::::::'::::::| ``'''' ヽ.、 / i::::::r──‐''" ヽ i 、i. ゚"!:::::|"゚ ,. l, | l ゚"|:::::|"゚ | ,/ 〉 /' | |::::::| !i l i / '、 l:::::::i, ヾ| l __,.ィヘ、 ! ヽ.ヾ::::::i | | .! ヽ、 ヘl | 'i::::::| ハ l 〉 ヽ、, X,ノ,-‐-、. ハ. !:::::| / ヽ | ヽ.,ヽ-ノイ 'l ヾ` / ! |:::::| } l ノ 〉 `="丿 } l }--':::::|_ ,ヘヘ,.-‐{ {/,. -‐ l ヽ / / | r'==--、  ̄二二/`l ` 〉-''} { ヽ ヽ__/- 、__,,. ノ 〉、 ` ー= -=(, ,!l ソ,ヾ、ヘ. | | / `!::::.、___,,. -‐''"| !Y、" ヾ) l |
漏れは?
840 :
デフォルトの名無しさん :2006/04/27(木) 18:13:42
>>827 変数pとLIMITがいくつに定義してあるか、が書いてあるとよかった。
>>783 スルーされても良いような質問なのに丁寧な解答ありがとうございました。
842 :
840 :2006/04/27(木) 19:05:53
>>827 #include <stdio.h>
#include <math.h>
#define LIMIT 16+1
typedef struct bignum{
int p;
int sign;
char str[LIMIT];
} BIGNUM;
BIGNUM tobignum(int x){
BIGNUM b;
int a, i;
if(x >= 0)b.sign = 0;
else b.sign = 1;x*=-1;
for(i = 0;i < LIMIT && (a = x % (int)pow(10, i+1)) != 0; i++){
b.str[i] = a / (int)pow(10, i) + '0';
x -= a;
}
b.p = i;
for(;i < LIMIT - 1;i++)b.str[i] = '0';
b.str[LIMIT - 1] = NULL;
return b;
}
やってみた
もう少しきれいにできるかも試練
signも説明なかったから0が+、1が-としてみた
843 :
デフォルトの名無しさん :2006/04/27(木) 19:18:39
#define STACKSIZE 10 // デフォールトのスタックサイズ class CIntStack { private: int m_StackPointer;//スタックポインタの役割をする整数(=データの数) int m_StackSize;//スタックのサイズ int *m_StackArea;//スタックエリアへのポインタ
844 :
デフォルトの名無しさん :2006/04/27(木) 19:20:01
//上の続き public: // 例外 のためのクラス class CEmptyStackPopError{ }; //空のスタックに対するPop操作 の 例外 class CFullStackPushError{ }; //一杯のスタックに対するPush操作 の 例外 }; 上記ヘッダをもとに実装部をお願いします。 言語はC++で期限は5月1日です。
845 :
デフォルトの名無しさん :2006/04/27(木) 19:22:16
すみません途中が抜けてしましました。 下記のものが間に入ります。 public: //コンストラクタ CIntStack();//type1 デフォールトのサイズでスタックエリアを確保 CIntStack( int size);// type2 引数sizeのスタックエリアを確保 //デストラクタ ~CIntStack();//スタックエリアを開放する void Push( int x); // x をプッシュする. //具体的には(1)xの値を現在のスタックポインタの位置に保存し,(2)スタックポインタを1増やす. //スタックがフルの場合に,Pushすると,例外CFullStackPushError を送出する. int Pop( void); // ポップした値を返す. //具体的には(1)スタックポインタを1減らし,(2)スタックポインタの位置の値を返す. //スタックが空の場合に,Popすると,例外CEmptyStackPopError を送出する. bool IsEmpty( void); // スタックが空のとき,真を返す.空でないときは偽を返す. bool IsFull( void); // スタックが一杯のとき,真を返す.一杯でないときは偽を返す.
846 :
デフォルトの名無しさん :2006/04/27(木) 19:46:58
847 :
デフォルトの名無しさん :2006/04/27(木) 19:54:01
[1] 授業単元:情報工学演習 [2] 問題:単振り子の運動方程式をオイラー法により数値解析する。 [3] 環境 [3.1] OS:Windows [3.2] cygwinと一緒に入れたgcc [3.3] 言語:C [4] 期限: 5月8日まで [5] その他の制限:特になし ググったら↓こんなの出てきたんですが、これをCに直したらどうなるんでしょうか? // オイラー法の計算開始 x1dot = x2; x2dot = -(g/l) * sin(x1); x1 = x1 + x1dot * dt; x2 = x2 + x2dot * dt; // オイラー法の計算終了
>>845 これでいいかい?
CIntStack::CIntStack():m_StackPointer(0),m_StackSize(STACKSIZE),m_StackArea
(new int[m_StackSize]){}CIntStack::CIntStack(int size):m_StackPointer(0),m_StackSize
(size),m_StackArea(new int[m_StackSize]){}CIntStack::~CIntStack(){delete[]m_StackArea
;}void CIntStack::Push(int x){if(IsFull())throw CFullStackPushError();m_StackArea[
m_StackPointer++] = x;}int CIntStack::Pop(void){if(IsEmpty())throw CEmptyStackPopError();
return m_StackArea[--m_StackPointer];}bool CIntStack::IsEmpty(void){return m_StackPointer
== 0;}bool CIntStack::IsFull(void){return m_StackPointer == m_StackSize;}
>>847 //から行末まではコメントなので、適宜削除するか/* */で囲めばいい。
その点を除けば、その断片はCとして通用するはずだ。
850 :
アホ者です :2006/04/27(木) 20:03:50
▼課題1 通販のWebページでよく見かける「1万5千円以上のお買い物なら,送料無料」を実現するプログラムを作ってください. 具体的には,(あなたが買った品物の)合計金額をキーボードから入力して,1万5千円未満の場合は送料(680円とします)を加算し,最終的な金額を表示するプログラムを作ってください. ▼課題2 課題1にさらに以下の条件を加えます. @ (合計金額が)3万円以上なら,10%値引き A 5万円以上なら,15%値引き B 3万3333円なら,特割33%値引き!(ifの入れ子を使うと楽ですよ) 上記以外の条件も,おもしろいアイデアがある人は加えてみてください. 誰か、このプログラムをつくってください。
>>848 すげぇ…
C++だと、ずらずら〜っとつなげられるって聞いたけどまさかこんな風にできるとは…
852 :
845 :2006/04/27(木) 20:17:53
書き方悪くてすみません。 改行が多すぎるとエラーメッセージが出るんですけど、 どうすればすべてかけるのでしょうか?
>>850 #include <stdio.h>
int main(void)
{
int x;
scanf("%d", &x);
x = (x>=15000)?x:x+680; //課題1
printf("%d\n", x);
}
課題2
x=
の文を
x = (x>=50000)?x*0.85:(x==33000)?x*0.67:(x>=30000)?x * 0.9:(x>=15000)?x:x+680; //課題2
にかえる
855 :
854 :2006/04/27(木) 20:21:04
>>854 printfの後に
return 0;
いれといて
>>854 0以下を入れた時の判定も追加しておいて
>>852 UpロダにUpして、そこへのURLをここに張ればよい。
858 :
854 :2006/04/27(木) 20:32:25
x = (x>=15000)?x:(x>=0)?x+680:x; //課題1 x = (x>=50000)?x*0.85:(x==33000)?x*0.67:(x>=30000)?x * 0.9:(x>=15000)?x:(x>=0)?x+680:x; //課題2 とりあえず負値の場合はそのまま返すようにした
860 :
アホ者です :2006/04/27(木) 20:37:13
説明不足でした。 今回はif(条件式)でプログラムの流れを変える構文を学びましたので,それを応用した課題となります.それぞれの課題に対して,ソースプログラムをペーストしてください. ▼課題1 通販のWebページでよく見かける「1万5千円以上のお買い物なら,送料無料」を実現するプログラムを作ってください. 具体的には,(あなたが買った品物の)合計金額をキーボードから入力して,1万5千円未満の場合は送料(680円とします)を加算し,最終的な金額を表示するプログラムを作ってください. ▼課題2 課題1にさらに以下の条件を加えます. @ (合計金額が)3万円以上なら,10%値引き A 5万円以上なら,15%値引き B 3万3333円なら,特割33%値引き!(ifの入れ子を使うと楽ですよ) 上記以外の条件も,おもしろいアイデアがある人は加えてみてください.
861 :
アホ者です :2006/04/27(木) 20:38:11
If文を考慮のもと、elseも加えてください。
釣ってきます
865 :
アホ者です :2006/04/27(木) 20:50:50
難しすぎてできません。すいません。
スルー
精神的に向上心のないものは、馬鹿だ
それ何のセリフだっけ?
869 :
845 :2006/04/27(木) 21:16:54
>>850 #include<iostream.h>
void main ()
{
int x;
cout<<"";cin>>x;
if(x<=0)
{
cout<<"値段がないよ〜"<<endl;
}
else if(x>=15000)
{
cout<<x<<endl;
}
else
{
cout<<x+680<<endl;
}
}
この流れで!?
[1] 授業単元:なし [2] 問題:aで割るとb余りcで割るとd余る数Xを求める関数を異なった処理内容で3つ作りなさい [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: BCC [3.3] 言語: C [4] 期限:GWが始まるまで [5] その他の制限:なし
872 :
845 :2006/04/27(木) 21:30:11
874 :
845 :2006/04/27(木) 21:39:32
>>873 お手数ですが見やすくおねがいいたします。
自分でやれ
精神的に向上心のないものは、馬鹿だ
最近やたらえらそうなのが増えたな もちろん質問側な
878 :
アホ者です :2006/04/27(木) 21:58:27
これが限界です。 #include <stdio.h> int main(void) { int a,b,c; printf("金額を入力せよ:"); scanf("%d", &a); printf("続いて金額を入金せよ:"); scanf("%d", &b); if(c>=15000){ printf("送料は680です:"); }else{ c = (x>=15000)?x:x+680; printf("送料は無料です:"); } return0; }
>>871 よくわからんので0と正の数のみ扱うことに
func1(int a, int b, int c, int d) {
int i;
for (i=1; i>0; i++)
if (i%a==b && i%c==d) return i;
return -1;
}
func2(int a, int b, int c, int d) {
int n;
for (n=b; n>0; n+=a)
if (n%c == d) return n;
return -1;
}
func3(int a, int b, int c, int d) {
if (a<c) return func2(c, d, a, b);
else return func2(a, b, c, d);
}
882 :
854 :2006/04/27(木) 22:25:20
>>878 条件演算子でぐぐればすぐに分かると思うけど…
A?B:C;
だったら、Aが成立するときBの処理を、成立しなければCの処理を
つまりif文で書くと
if(A) B
else C
となるわけだ
883 :
デフォルトの名無しさん :2006/04/27(木) 23:44:52
>>871 #include <stdio.h>
#include <limits.h>
int main()
{
int x, a, b, c, d;
scanf("%d", &a);
scanf("%d", &b);
scanf("%d", &c);
scanf("%d", &d);
for (x=INT_MIN ; x<INT_MAX ; x++)
{
if (x%a==b && x%c==d)
{
printf("x:%d", x);
break;
}
}
return 0;
}
>>775 やってみたかったのでやってみた。しょぼくてゴメンネ
#include <stdio.h>#include <stdlib.h>#include <ctype.h> #include <string.h>#include <unistd.h>#include <getopt.h>
int main(int argc, char **argv){
int size = 0, opt = 0, mcount = 0, scount = 0, i = 0;
char *result, *data_r, *result_r;char zero = '0';
char *data = "akokpe-00eaij ejiajof efe00 ejoifa033r 004 3 43";size = strlen(data);
result = (char *)malloc(sizeof(char) * size + 1);data_r = data;result_r = result;
for(i =0; i < size; i++){
if( *(data + i) >= 0x30 && *(data + i) <= 0x39){
if(scount > 0){
memcpy(result_r, data_r, scount);result_r = (result_r + scount);
data_r = (data_r + scount);scount = 0;
}mcount++;
}else{
if(mcount > 0){
memcpy(result_r, &zero, 1);result_r = (result_r + 1);
data_r = (data_r + mcount);mcount = 0;
}scount++;
}
}
if(scount > 0)
memcpy(result_r, data_r, scount);
if(mcount > 0)
memcpy(result_r, &zero, 1);
fprintf(stdout, "result = %s\n", result);
free(result);
return 0;
}
885 :
827 :2006/04/28(金) 01:26:07
886 :
871 :2006/04/28(金) 02:36:40
>>879 3っつめが。。%なしで挑戦してみませんか
cobolの質問ってここでしちゃ駄目?
ダメ。
890 :
デフォルトの名無しさん :2006/04/28(金) 10:50:00
,:::-、 __ ,,r 〈:::::::::) ィ::::::ヽ 〃 ,::::;r‐'´ ヽ::ノ ,'::;' /::/ __ l:::l l::::l /:::::) ,:::::、 ji |::::ヽ j::::l、ゝ‐′ ゙:;;:ノ ,j:l }:::::::ヽ!::::::::ゝ、 <:::.ァ __ノ::;! . {::::::::::::::::::::::::::::`='=‐'´:::::::::/ ';::::::::::::ト、::::::::::::::i^i::::::::::::/ `ー--' ヽ:::::::::::l l;;;;::::ノ `ー-" 【ラッキーコアラ】 このレスを見た人はコピペでもいいので 10分以内に3つのスレへ貼り付けてください。 そうすれば14日後好きな人から告白されるわ宝くじは当たるわ 出世しまくるわ体の悪い所全部治るわでえらい事です。
つまりペーペーで恋人もおらず宝くじに頼る体の不健康な人間にしか関係ないと。
ええぃ、宿題はまだか
【質問テンプレ】 [1] 授業単元: プログラム基礎演習 [2] 問題文(含コード&リンク): 20名の学生の成績表を作成。 成績表は学生番号、名前、点数、評価からなる。学生番号は 1番から20番、名前はa,b,c・・・の順に割り振る。点数は0〜100までの間の乱数で 作成し、成績は80点以上がAで70〜79がBで60〜69がCで59点以下がD また、20名の点数の平均値を計算する。 [3] 環境 [3.1] OS:Solaris [3.2] コンパイラ名とバージョン: gcc バージョンはわかりません [3.3] 言語: C [4] 期限: 日曜の0時までです [5] その他の制限:特にないです よろしくお願いします。途中まで作ったんですが平均値がわからなくて・・・ 一応自分が作ったのも載せておきます。1からやってくださっても結構です
894 :
893 :2006/04/28(金) 18:30:02
#include <stdio.h> #include <stdlib.h> #include <time.h> int GetRandom(int min,int max); int main(void) { int i,j,k, number[] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20}; char name[21] ={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','\0'}; srand((unsigned int)time(NULL)); for (i = 0;i < 20;i++) { j = GetRandom(1,100); if (j < 60) { printf("%c %d %d D\n",name[i],number[i],j); } else if (j < 70) { printf("%c %d %d C\n",name[i],number[i],j); } else if (j < 80) { printf("%c %d %d B\n",name[i],number[i],j); } else if (j < 101) { printf("%c %d %d A\n",name[i],number[i],j); } } } int GetRandom(int min,int max) { return min + (int)(rand()*(max-min+1.0)/(1.0+RAND_MAX)); }
HAEEEEEEEEEEEE!!!!!!!!!!!!!!!!
>>893 #include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 20
int GetRandom(int min,int max){ return min + (int)(rand()*(max-min+1.0)/(1.0+RAND_MAX)); }
int main(void){
int i,number[N],score[N],s=0;char name[N],result[N];
srand((unsigned int)time(NULL));
for(i=0;i<N;i++)number[i]=i+1;
for(i=0;i<N;i++)name[i]='a'+i;
for(i=0;i<N;i++){score[i]=GetRandom(1,100);s+=score[i];}
for(i=0;i<N;i++)result[i]=score[i]>=80?'A':score[i]>=70?'B':score[i]>=60?'C':'D';
printf("name\tno.\tsocore\tresult\n");
for(i=0;i<N;i++)printf("%c\t%d\t%d\t%c\n", name[i], number[i], score[i], result[i]);
printf("average\t%d\n",s/N);
}
平均値って、合計の点数/人数じゃなかったっけか?
まあ、平均値のとこはintでもdoubleでも好きに変えてくれ
897 :
896 :2006/04/28(金) 20:27:55
#include <stdio.h> #include <stdlib.h> #include <time.h> #define N 20 int GetRandom(int min,int max){ return min + (int)(rand()*(max-min+1.0)/(1.0+RAND_MAX)); } int main(void){ int i,score,s=0;char result; srand((unsigned int)time(NULL)); printf("name\tno.\tsocore\tresult\n"); for(i=0;i<N;i++){score=GetRandom(1,100);s+=score; result=score>=80?'A':score>=70?'B':score>=60?'C':'D'; printf("%c\t%d\t%d\t%c\n", 'a'+i, i+1, score, result);} printf("average\t%d\n",s/N); } コンパクトにしてみた
>>893 GetRandom()の第一引数が1だと、
returnするときにminを足してるから最低点数が1以上になっちゃうぞ。
あとGetRandom()の中身が俺にはよう分からんかった。
[1] 授業単元:なし [2] 問題:%を作る [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: BCC [3.3] 言語: C [4] 期限:GWが始まるまで [5] その他の制限:なし
一瞬 percent = n * 100.0; が思い浮かんだ俺(w
>>899 >[2] 問題:%を作る
をもっと詳しく書かないと怖いお兄さんが出てくるぞ。
とりあえず、余りだと考えて int main(void){int a=11,b=3;printf("%d\n", a-(a/b)*b);return 0; }
>>893 C++の勉強がてらに組んでみた。
配列をコンストラクタ初期化子で初期化する方法がイマイチわからずorz
#include<time.h> #include<iostream> #include<vector> using namespace std; class CStudentData { protected: char StudentName[64]; char TestPoint; public: CStudentData() :TestPoint( 0 ) { memset( StudentName, 0 , sizeof(StudentName ) ); } void setTestPoint(char InputPoint) { TestPoint = InputPoint; } void setName(const char *InputName) { strcpy(StudentName, InputName); } const int getTestPoint() const { return TestPoint; } const char *getName() const { return StudentName; } };
int main() { int PointSum = 0; srand(time(NULL)); static const char *Name[3] = { "Takeo", "Masako", "Butao", }; vector<CStudentData> SData( 3 ); for(int i = 0; i < 3; i++) { SData[i].setName( Name[i] ); SData[i].setTestPoint( rand()%100 ); }
for(i = 0; i < 3; i++) { int buffer = SData[i].getTestPoint(); cout << SData[i].getName(); cout << "\n"; cout << buffer; cout << "\n"; if( buffer > 80 ) cout << "A\n"; if( buffer > 70 && buffer <= 79 ) cout << "B\n"; if( buffer > 60 && buffer <= 69 ) cout << "C\n"; if( buffer <= 59 ) cout << "D\n"; PointSum += buffer; } cout << PointSum; return 0; }
生徒番号についてなんだが、それはそれは生徒データの配列番号に+1したものと 同じになるわけで、そこから算出すればいいかなと思った。 表示するだけならデータ構造体、またはクラスの中に入れる必要性は感じない
>>871 正しく計算できてると思う。多分。
#include <stdio.h>
int main()
{
long long x, a, b, c, d, i, j, la, lc, m;
scanf("%lld", &a);
scanf("%lld", &b);
scanf("%lld", &c);
scanf("%lld", &d);
for (x = a, i = c; (j = (x % i)) > 0; i = j)
x = i;
if (i != 1 && (b % i) != (d % i)) {
printf("解が無い\n");
return 0;
}
if (a == i) {
printf("x:%lld\n", d);
return 0;
}
if (c == i) {
printf("x:%lld\n", b);
return 0;
}
a /= i;
c /= i;
m = a * c;
for (la = c; ((la * c) % a) != 1; la = ((la * c) % a)) /* nop */;
for (lc = a; ((lc * a) % c) != 1; lc = ((lc * a) % c)) /* nop */;
printf("x:%lld", (((((b/i)*la)%m)*c*i)+((((d/i)*lc)%m)*a*i)+(b%i))%(m*i));
return 0;
}
909 :
デフォルトの名無しさん :2006/04/29(土) 07:59:29
[1] 授業単元:なし [2] 問題:ユーザーに4−8桁の数字のパスワードを入力させ、 そのパスワードの安全性を3段階で示す(弱、中、強)プログラム 作りなさい。4桁ならば、弱。5−6桁ならば、中、7,8桁ならば、 強になります。またリピートする数字、例えば、1111や1212、1234567など は安全性に欠けている事を考慮します。(隣り合った数字の引き算が2以上ならば、 リピートする数字とは考えられません。) [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: BCC [3.3] 言語: C [4] 期限:5/1 [5] その他の制限:なし よろしくお願いします。
つ[1357] つ[15263748]
新人研修のネタは宿題じゃねーだろ 金貰ってるんだからそれぐらい自分で やれよ。ヒントあれだけ教えたのにわからねぇってか?
つーか、[13131313]でも安全か。
書いててそう思ったから、今から家いって 引き回してくる
お前ら遊んでないで自分で宿題やれ以上 もう次スレはないと思え
918 :
デフォルトの名無しさん :2006/04/29(土) 13:40:53
とカスが申しております
弱キックと弱パンチの区別がつかんぞ
金貰ってるからやれじゃなく、研修にならんからやれじゃないかな。 まぁ>909が営業職で単なる消化期間なら丸投げでもええかもしれんが。
921 :
デフォルトの名無しさん :2006/04/29(土) 15:33:49
【質問】
http://ysserve.int-univ.com/susi/Lecture/c2/ ↑のページの【必須CAI課題】のどれかをクリックして適当に学生の番号入力するとようにオンラインのコンパイラに飛べて、
このようなC言語のオンラインコンパイラを自分のHPに設置したいのですがどうしたらいいのでしょうか?
ちなみに自分のHPサービス(sakura.ne.jp)にはCGI,PHP,gcc等コンパイラがあり、パスも分かるのですが
そこからどうしたよいのでようか?
ソースが入力された文章を受け取って、次にgccのパスを・・・どうやったらコンパイルできるのでしょうか?教えてください
「考慮します。」じゃ話にならんよ
もし本当に
>>911 が出題者なら反省してくれ
>>909 研修課題なら自分でこなせ。
じゃないとこれからより辛くなるぞ・・・。
>>909 #include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char password[9];
int password_length;
char rank[][3]={"弱", "中", "強"};
int i;
do
{
scanf("%s", password);
password_length=strlen(password);
} while(password_length<4 || password_length>8);
puts(rank[(password_length-3)/2]);
for (i=1 ; abs(password[i-1]-password[i])<=1 ; i++)
if (password[i+1]=='\0')
puts("安全性に欠けている事を考慮します");
return 0;
}
>>899 #include <stdio.h>
int amari(int hijosu, int josu)
{
if (hijosu<josu)
return hijosu;
return amari(hijosu-josu, josu);
}
int main()
{
int hijosu=97, josu=5;
printf("%d", amari(hijosu, josu));
return 0;
}
927 :
デフォルトの名無しさん :2006/04/29(土) 16:35:34
>>893 #include <stdio.h>
int main()
{
int sum=0, i, score;
char *rank="DDDDDDCBAAA";
for (i=1 ; i<=20 ; i++)
{
sum+=(score=rand()%101);
printf("%d %c %d %c\n", i, i+0x60, score, rank[score/10]);
}
printf("%d\n", sum/20);
return 0;
}
929 :
デフォルトの名無しさん :2006/04/29(土) 17:08:38
>>928 のをそのまま改良して完全ランダムにしておいた
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int main()
{
int sum=0, i, score;
char *rank="DDDDDDCBAAA";
srand(time(NULL));
for (i=1 ; i<=20 ; i++)
{
sum+=(score=rand()%101);
printf("%d %c %d %c\n", i, i+0x60, score, rank[score/10]);
}
printf("%d\n", sum/20);
return 0;
}
>>871 #include <stdio.h>
int sx(int a, int b, int c, int d, int smax)
{
int x1, x2;
x1=b;
x2=d;
while (x1!=x2)
{
if (x1<x2)
x1+=a;
else
x2+=c;
if (x1>smax||x2>smax)
{
puts("解無し");
return smax;
}
}
return x1;
}
int main()
{
int a=117,b=5,c=58,d=183,smax=99999;
printf("%d\n", sx(a,b,c,d,smax));
}
>>929 完全ランダムという言葉の意味を分かっているのかと問いたい。
>>871 #include <stdio.h>
int sx(int a, int b, int c, int d, int smax)
{
int x, tmp;
if (a<c)
{
tmp=c;
c=a;
a=tmp;
tmp=d;
d=b;
b=tmp;
}
for (x=b ; x<=smax ; x+=a)
if ((x-d)%c==0)
return x;
return smax;
}
int main()
{
int a=117,b=5,c=58,d=183,smax=99999;
printf("%d\n", sx(a,b,c,d,smax));
}
乱数とは次の値が予想できないもの、といいたいわけだな
>>931
MT実装しろってか
rand() / (RAND_MAX / N + 1)
実装しても擬似乱数に変わりはないでしょ
周期がほぼ無限になるような乱数なんて実装だけで 金もらえるから諦めろ落しどころ覚えろ。
そこで円周率ですよ
円周率だと出てきやすい値とでにくい値があるからなぁ
とりあえず電圧とか温度とかをシードにして周期の長いMT法で実装しとけばよくね?
942 :
デフォルトの名無しさん :2006/04/29(土) 19:17:04
質問じゃないがこのプログラム コンパイルしてみるまでミスに気がつかんかった・・・ 恐るべし・・・getchar() #include <stdio.h> int main(void) { int ch; char name[20]; puts("名前を入力せよ"); scanf("%s", name); puts("よろしいですか(Y/N)?"); ch = getchar(); if (ch == 'Y' || ch == 'y') { /* 処理 */ } else { /* 処理 */ } return 0; }
943 :
デフォルトの名無しさん :2006/04/29(土) 19:19:09
scanfではエンターキー(\nのこと?)は代入されないならまだしも、getcharにがそのエンターキーを受け取るとは・・ どうなってんだ?
944 :
デフォルトの名無しさん :2006/04/29(土) 19:22:18
scanfのキーb−ド入力では最後エンターキーを押さないといけないルールがあるが どうしたらいいんだ?
scanf(" %c", &ch); こんな感じでいいんじゃなかったっけ? 確認してないからわからんけど
VC++8.0 dllをdefでエクスポートした関数を呼び出したいが宣言のしかたが分かりません ディペンデンシーウォーカーで見るとちゃんとエクスポートされてます。
2回getcharすりゃいいんじゃない
無理数って一様なもんなの?
950 :
デフォルトの名無しさん :2006/04/29(土) 19:47:28
>>945 だめでしたね
scanf("%c", &ch);
scanf("%c", &ch);
と2回やってもだめでした
>>947 ch = getchar(); 2回でできました。でも冗長な気がしますがしょうがないのでしょうか?
>>950 " %c"とちゃんと%の手前の空白を打ってるか?
"%c"と打ってる低脳の予感がする......
953 :
デフォルトの名無しさん :2006/04/29(土) 20:17:10
>>952 空白も入れてますが
if文の真偽判定で必ず偽になってしまいます
if (ch == 'Y' || ch == 'y') {
puts("成功");
} else {
puts("失敗");
}
>>953 scanfの後にffluch(stdin);
scanf("%c ")で前じゃなく後ろに空白じゃなかた?
ぐぐったらすぐ出た 以下コピペ scanf は,読み込む前の空白文字(スペース,改行など)は,読み飛ばしますが, 読み込んだ後の空白文字は,そのまま入力バッファに残ります。 この後で,gets やgetchar を実行すると,バッファに残っている改行文字が入力 されてしまい,見かけ上スキップされるように見えます。 たとえば,scanf の書式 指定の末尾に %*c と書いておくか,scanf の実行後に fflush(stdin); などを使っ て入力バッファをクリアしておけば,この問題を回避することができます。 scanf は,注意して使わなければならない関数の1つです。
>>953 %c は 1byte しか書き換えないのに、16bit 以上ある未初期化の int ch 使ってるからでは?
fflush(stdin) は規格上有効だっけ?
960 :
デフォルトの名無しさん :2006/04/29(土) 20:50:35
>>959 int型ではエンディアンによっては巧くいくがエンディアンによっては巧くいかない。
>>958 >streamが出力ストリームまたは直前の操作が入力でない更新ストリームを指すとき(略)
>それ以外の時の動作は、未定義とする。
JIS X3010:2003 - 7.19.5.2
まぁわざわざ規格票見なくても入力ストリームに対するfflushは未定義動作って事ぐらい常識だろ
素直に fgets 使おうよ
fgets(,,stdin)だと後ろの\n\0も吸い込むね
>>964 それを sscanf で解析。
入力動作と解析動作を分ける事で自由度も良くなるし、今回みたいな
厄介事も回避できる。
まあ書き捨てるプログラムなら scanf もよく使うけど。
【質問】
http://ysserve.int-univ.com/susi/Lecture/c2/ ↑のページの【必須CAI課題】のどれかをクリックして適当に学生の番号入力するとオンラインのコンパイラに飛べますが、
このようなC言語のオンラインコンパイラを自分のHPに設置したいのですがどうしたらいいのでしょうか?
ちなみに自分のHPサービス(sakura.ne.jp)にはCGI,PHP,C言語(gcc)等のコンパイラがあり、パスも分かるのですが
そこからどうしたよいのでようか?
ソースが入力された文章を受け取って、次にgccのパスを・・・どうやったらコンパイルできるのでしょうか?教えてください
ちなみにCやVBといった言語やHPビルダーは使えますが、Webプログラミングの勉強はしたことないので、HPビルダーで出来る程度でお願いします。
(さらにこのオンラインコンパイラだとscanf関数等数値のキーボ−ド入力が出来ないので、余裕があれば改善したいです。HTMLだけじゃ無理そうですが・・)
【質問テンプレ】 [1] 授業単元: 2ちゃんねる [2] 問題文(含コード&リンク): C/C++の宿題を片付けます64代目スレを立てる。 [3] 環境 [3.1] OS: 任意 [3.2] コンパイラ名とバージョン: 任意 [3.3] 言語: 日本語 [4] 期限: 2006年04月30日12:00まで] [5] その他の制限: 立てる前に作業入り宣言お願いします。 テンプレの避難所スレが落ちてるので、その辺もよしなに取り計らってください。 寝落ちするので先にお礼言っておきます。スレ立てありがとうございました。
>>966 新スレにまで出張ご苦労様です、と
っていうか、質問スレ池
>>970 ヘッダにELFって、Unixのバイナリか
てかオンラインコンパイルとか何言ってんだ?
どうでもいいよ、宿題と関係ないし
>>971 966のリンク先はどうやってCソースをコンパイラしているんでしょうか
サーバー管理者じゃないとこのようなことは無理なんですかね?
>Cソースをコンパイラしている >Cソースをコンパイラしている >Cソースをコンパイラしている >Cソースをコンパイラしている >Cソースをコンパイラしている >Cソースをコンパイラしている >Cソースをコンパイラしている >Cソースをコンパイラしている
ル
ノレ
#include <stdio.h> void otsuri(int zankin) { int i, syubetsu[]={1,5,10,50,100,500,1000,2000,5000,10000}; for (i=9 ; i>=0 ; i--) { printf("%d %d\n", syubetsu[i], zankin/syubetsu[i]); zankin%=syubetsu[i]; } } int main() { int tonyu, konyu; scanf("%d", &tonyu); scanf("%d", &konyu); otsuri(tonyu-konyu); }
>>966 何か恐ろしいレベルで勘違いしてそうだからあらかじめ言っておくが、
オンラインコンパイラなんて代物は存在しない。
とりあえずCGIというものについてちゃんと勉強してから来なさい。
ちなみにホームページビルダーでは何も出来ない。以上。
>>728 #include <stdio.h>
int bitCheck(unsigned long bit, int pos)
{
return (bit >> pos-1)&1;
}
int main()
{
unsigned long bit=0xAAAAAAAA;
int pos;
for (pos=1 ; pos<=32 ; pos++)
{
if (bitCheck(bit, pos))
puts("ON");
else
puts("OFF");
}
}
>>963 素直?なのかは分かりませんが
結局fgetsが一番スマートな書き方っぽいですね( ×scanf("%s",name);⇒○fgets(name,20,stdin); )
982 :
822 :2006/04/30(日) 06:50:08
[1] 授業単元: 情報工学演習
[2] 問題: 多倍長整数の演算プログラムをつくる
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 5月1日まで
すいません、つい先日お世話になったものでそれを参考に
作っていたのですが、また壁にぶち当たって困っています。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1809.txt ↑二つの数値を入力し、それを配列に入れて表示させるんですが、
失敗してしまいます。(二つの数値の桁が同じだと時々成功する)
どこがおかしいのでしょうか?
あと、int f_intminとINT_MINの意図がわからなかったりします。
void print(struct bignum b){ int i; if(b.sign == MINUS){ printf("-"); } for(i=b.p-1;0<=i;--i){ printf("%c",b.str[i]); } } >INT_MINの意図 ビット表現の話になるが大丈夫か?
なんでわざわざ
>>887 のを改悪してるのかわからんが・・・
例えばintが8bitの環境だと(んなもんねえけどw)、intの表現できる範囲は-128〜127
んで、-128がtobignumの引数になったとき、反転させるだけだと困ったことになる(0になる)
なので+1して-127にしてから反転させて127にして処理して、最後に+1させる
>なんでわざわざ
>>887 のを改悪してるのか
FILEまだ習ってないんじゃない?
そもそもなんでchar型の配列を使っているのか? 素直にint型でいいんじゃないの?
987 :
822 :2006/04/30(日) 15:10:19
>>984 ありがとうございました。
こんなにスマートに表現できるとはorz
参考までに
>>982 のどこが悪かったのか教えてくださいませんか?
自分の悪い頭で考えても思い浮かばない。。。
>>984 >-128がtobignumの引数になったとき、反転させるだけだと困ったことになる(0になる)
これは-128であるときの表現を可能にする(=表現の幅を広げる)という解釈でよろしいですか?
>>986 それができればいいんですが、int型で数値を丸ごと受け取ったあと
そのまま一桁ずつint型の配列に入れ込む方法が思い浮かばなかったので。
そういう方法はありますか?
あと、スレ違いっぽいので申し訳ないのですが、%sと%cとの違いはなんでしょうか?
解説のサイトを見ても、前者は文字列の表示、char型の表示と今市違いが
わかりません。
ものすごくざっくり言えば %c は一文字、 %s は複数文字
ル
990 :
986 :2006/04/30(日) 18:19:55
自分で処理の分からないプログラムを書くなwwww
while ( x != 0 ){ b.str[b.p++] = x % 10 + '0';x /= 10; }
↑のchar型の配列に数値を一桁ずつ格納する処理が理解できれば
int型の配列に一桁ずつ入れる処理も分かるでしょ
>>987
991 :
986 :2006/04/30(日) 18:39:23
今、ふと思ったんだけどtobignumの引数がintだから int型の範囲を超える値を入れるとエラーになるよね
>>988 ありがとうございます。
>>990-991 ああ、なんとなくわかりました。
int型は確かに自分も最初間違ってるんじゃないかと混乱しました。
993 :
デフォルトの名無しさん :2006/04/30(日) 20:29:37
多倍長整数てことは32bit(環境に依存するが)以上の時のことも考えるわけで、 tobignumの引数をintにしておくと、INT_MAX〜INT_MINまでの値しか扱えないのよね
入力した値をtobignumを使用して変換するのは間違い。 文字列として取得して、文字列としてそのまま格納するのが正(bignum自身をいじらないのであれば)。 入力文字列の解析時にエラーチェックをするのは当然として、0015などの入力も考慮する必要がある。 また、LIMIT桁を超えた入力をチェックするためには、LIMIT文字を受け取ったのでは×。
995
996
997
埋沢富市
1000
1000げっと
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。