1 名前:デフォルトの名無しさん [2008/10/30(木) 07:49:39 BE:113605834-PLT(24065)] あなたが解けないC言語/C++言語の宿題を片付けもらうスレッドです。気に入らない質問やその他や発言はスルーの方向で。 【質問者へ】 回答者の便宜のため、質問の際は以下を行うことを推奨します。 ・質問は【質問テンプレ】を利用してください。 ・問題文は、出題されたまま全文を書いてください。 ・問題文やコードをリンクするときは、一言内容にについて説明をつけましょう。 ・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。 ・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。 ・後から問題に付け足しするのはコラー!!です。付け足しは作業を無駄にしがちです。 ・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。 【質問テンプレ】 [1] 授業単元: [2] 問題文(含コード&リンク): [3] 環境 [3.1] OS: (Windows/Linux/等々) [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) [3.3] 言語: (C/C++/どちらでも可 のいずれか) [4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか) [5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々) 【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm 【C 関数検索 man on WWW】 www.linux.or.jp/JM/index.html 【過去ログ検索】 chomework.sakura.ne.jp/ 【wiki】 www23.atwiki.jp/homework/ 前スレ C/C++の宿題を片付けます 116代目 pc11.2ch.net/test/read.cgi/tech/1222813731/
208 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 19:45:56 ] >>206 実行してみたんですけど、ただ計算するだけでなく 表みたいにしないといけないんです。どうしたらいいですか?
209 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 19:47:57 ] >>208 int i, j; for( i = 1; i < 10; i++ ) { for( j = 1; j < 10; j++ ) { printf( "%2d ", i * j); } printf( "\n"); }
210 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 20:11:47 ] >>209 できました。ありがとうございます。
211 名前:デフォルトの名無しさん [2008/11/04(火) 20:30:10 ] 1/x![X=1から10まで]を求めるにはどうしたらいいでしょうか?
212 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 20:30:17 ] [1] 授業単元: 配列 [2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7939.txt (↓途中までですが、考えてみたものです) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7940.txt [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン: cc [3.3] 言語: C [4] 期限: 2008年11月5日14:00まで [5] 多次元配列を用いて
213 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 20:35:31 ] [1] 授業単元:プログラミング [2] 2つの3×3行列の入力に対して積を計算し、結果を出力せよ。 [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン:VS2008 [3.3] 言語:C++ [4] 期限: 明後日 [5] その他の制限: 繰り返しfor、2次元配列を使うこと。3重ループになるそうです。 しかし、どのように3重ループを使えばいいのかわかりません。
214 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 20:52:33 ] for(i=0; i<3; i++) for(j=0; j<3; j++) for(k=0; k=3; k++) c[i][j] += a[i][k] * b[k][j];
215 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 22:23:38 ] >>211 #include <stdio.h> int main (void) { int i, j; int kai; double sum = 0; for (i = 1;i <= 10; i++) { kai = 1; for (j = i;j > 0; j--) { kai *= j; } sum += (double)1.0 / kai; } printf("{Σ1/(x!) |1 <= x <= 10} = %f\n", sum); return 0; }
216 名前:デフォルトの名無しさん [2008/11/04(火) 22:34:19 ] [1] 授業単元: プログラミング [2] 問題文(含コード&リンク): y=cos(x)の座標を*でプロットするプログラムを作ります。 範囲は[0, 4π]です。 [3] 環境 [3.1] OS: UNIX [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] できるだけ早く [5] その他の制限:ループと条件分岐、putcharを使う よろしくお願いします。
217 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 22:50:06 ] >>216 >[4] できるだけ早く が非常に心証が悪いのですが、お気づきですか?気づかれたほうがいいですよ。
218 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 23:05:47 ] どうでもいい
219 名前:216 [2008/11/04(火) 23:38:43 ] >>217 不愉快な思いをさせてしまい申し訳ありませんでした。 これからは気をつけます。
220 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 23:50:29 ] >>192 レス遅くなりました。 プログラムありがとうございました。 出力の方は自分でなんとか、変えてみます。 助かりました。
221 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 00:09:10 ] >>212 その1のほう。原形とどめてないかも。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7941.txt ttp://www.mashimo.com/2c6.html を使ってテストした。多分大丈夫。
222 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 00:34:20 ] >>217 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7942.txt
223 名前:デフォルトの名無しさん [2008/11/05(水) 00:43:12 ] >>137 レス遅れてしまい申し訳ありません。 プログラムありがとうございました。 これからプログラムの内容を理解していきたいと思います。
224 名前:デフォルトの名無しさん [2008/11/05(水) 00:56:29 ] >>222 ありがとうございました。 とても助かりました。
225 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 01:00:03 ] xy.yu.to/ 始終荒れまくりの海外サーバ絵チャだ 一人の神プログラマーが強すぎてマクロ荒しが全く太刀打ちできてない。 荒しプログラマーは全員退散!! 誰か倒してくれwwwwww 荒らしても荒らしても線が消されてしまう 一体どうやっているのか?!
226 名前:デフォルトの名無しさん [2008/11/05(水) 01:23:50 ] 誰か助けてください。次のプログラムは関数の座標をプロットするプログラムなのですが、 y軸の数字はそのままで、もっと細かくプロットするにはどうすればよいでしょうか。 たとえば、(0.5, 0.25)をプロットするといった具合にです。お願いします。 int main(){ double x,y; y=100.0; while(y>=0){ printf("%.1f", y); x=-10; while(x<=10){ if(y==(x*x)){ putchar('*'); } else { putchar(' '); } x=x++; } putchar('\n'); y=y-5.0; } return 0; }
227 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 01:33:17 ] >x=x++; 関係ないがこれはやめろ
228 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 01:50:19 ] [1] コンピュータの基礎的なもの: [2] 1!+2!+....k!を求めよ: [3] 環境 [3.1] 一応Win: (Windows/Linux/等々) [3.2] VC6.0: (gcc 3.4 VC 6.0等) [3.3] C: (C/C++/どちらでも可 のいずれか) [4] 今晩中です: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか) [5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々) #include<stdio.h> main(){ int i,k; float n,m; printf("k="); scanf("□□",□□); n=0.0; m=1.0; for(i=1;i<=□;i□□){ n□□(m□□i); } printf("1!+2!+...+%□=%□\n",□,□); } forの内部以外のところは埋まりました。 forの内側のnから始まる分が分かりません。
229 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 01:57:32 ] n += (m *= i);
230 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 02:16:29 ] #include<stdio.h> main(){ int i,k; float n,m; printf("k="); scanf("%d",&k); n=0.0; m=1.0; for(i=0;i<=k;i++){ n+=(m*=i); } printf("1!+2!+.....+%d!=%f\n",k,n); } ありがとうございます。 こんなかんじでやって答えが0にしかならないのですが...
231 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 02:21:37 ] m=1.0; for(i=0;i<=k;i++){ n+=(m*=i); } これでは常にm = 0.0になってしまうのだが、for ( i = 1; ...)なだろうな
232 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 02:23:37 ] ありがとうございます。いけました
233 名前:デフォルトの名無しさん [2008/11/05(水) 02:27:39 ] どなたか226をお願いします。夜が明けるまでにお願いします。
234 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 03:01:49 ] >>233 cとyの刻み幅を変えるだけでいいと思う #include<stdio.h> int main(){ double x,y; y=100.0; while(y>=0){ printf("%.2f", y); x=-10; while(x<=10){ if(y==(x*x)){ putchar('*'); } else { putchar(' '); } x+=0.5; } putchar('\n'); y-=0.25; } return 0; }
235 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 03:20:02 ] ×c ○x
236 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 03:25:41 ] 1024がどうしたのやつ、まだ引きずってたのか。 前スレで205*5にするのは別に必須でなくて、1024個単位で処理できればいいんでしょ? って確認しておkが出てたはずなんだけどなー 何が分からないかを伝える練習の場となったか。それもまたよかろ。
237 名前:デフォルトの名無しさん [2008/11/05(水) 05:53:10 ] [1] 授業単元:計算機プログラミングII 「ポインタと文字列」 [2] 問題文(含コード&リンク):課題1 2つの任意の長さの文字列をポインタ変数pxとpyを使って入力し, pxとpyの文字列を結合した文字列を他のポインタ変数に記憶し,その 結果を出力するプログラムを作成せよ.ただし,ヘッダファイル string.hで定義されている関数およびsprintfを使用してはいけない. その他,未習のもの(memcpyなど)は使えない. [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:2008年11月6日10:30まで [5] その他の制限:ポインタの基礎を習い始めたところだと思います。 配列や文字列、for文、if文、関数ぐらいは簡単に習っています。 [6]出されたヒント:px,pyの長さを数える。たとえば,pxがn個の文字列ならば, 新たなポインタにまずこのn個の文字列が順に入り,その次のところからは, pyの1番目,2番目の文字が入っていく。 という方針であると説明を受けました。
238 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 06:27:37 ] >>237 長さ数えなくてもいける! ただsscanfは微妙によくない気がする!w #include<stdio.h> void concatenate(const char* px, const char* py, char* pz){ while(*px) *pz++ = *px++; while(*py) *pz++ = *py++; *pz = '\0'; } int main(){ char x[256]; char y[256]; char z[256]; printf("x:"); fscanf(stdin,"%s",x); printf("y:"); fscanf(stdin,"%s",y); concatenate(x,y,z); printf("z:%s\n",z); }
239 名前:デフォルトの名無しさん [2008/11/05(水) 09:26:58 ] [1] 授業単元: プログラミング [2] 問題文(含コード&リンク): 下位バイト側を,バイナリで出力するプロ グラムです。 [3] 環境 [3.1] OS: WINDOWS [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 無期限 [5] その他の制限:main()の引数として,argc, argvを使わなくてはいけません。 下のプログラムを元につくります。 よろしくお願いいたします。 #include <stdio.h> union UNION { int i; char ch[4]; }; int main() { union UNION obj; obj.i = 320; printf("%x %x %x %x",obj.ch[0],obj.ch[1],obj.ch[2],obj.ch[3]); return 0; }
240 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 10:29:58 ] [1] 授業単元:プログラミング [2] 問題文: 構造体を用いて配列の和、積を求めるプログラムを作成せよ。 ただし、配列のデータは2つのファイルから開いて使用すること。 配列のデータ例 3 4 1.1 2.2 3.3 4.4 1.0 2.0 3.0 4.0 2.0 3.5 6.2 2.5 [3] 環境 [3.1] OS:windows [3.2] コンパイラ名:gcc [4]11月6日 12:00まで [5]その他: 構造体のメンバーは 行のサイズ unsigned int 列のサイズ unsigned int 行列のデータへのポインタ double ** よろしくお願いします。
241 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 11:14:23 ] [1] 授業単元: ニューラルネットワーク [2] 問題文 ニューラルネットワークの初期状態が記憶パターン1とよく似ているが少しだけ異なっていたとする。 ニューロンが非同期的に状態更新し、記憶パターン1に近づいていく様子をシュミレーションするプログラムを c++で作成せよ。 [3] 環境 [3.1] OS: Windows Vista [3.2] コンパイラ名とバージョン: わかりませんが、最初から付いていたやつかと…。 [3.3] 言語: C++ [4] 期限: 2008年11月9日 [5] その他の制限: 序盤まではできたのですが後半からさっぱり・・・。下にできた(と思う)所までと、 与えられた問題のヒント、完成例など置いておきますのでどなたか御願いします>< 何か不明な点があったら言って下さい。 ↓ kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7913.zip
242 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 12:13:43 ] [1] 授業単元:C言語 [2] 問題文 指数関数ex の近似値を返す関数expon(x, n)をつくります。第1引数は浮 動小数点数x で,第2引数はex をTaylor 展開で展開する際の最大次数n になります。 n次項までのTaylor 展開の式は下に示す通りです。 さらに,浮動小数点数y と正の整数m を引数とし,y の小数点m 桁より下を切り捨てて出 力する関数trunc(y, m)をつくりなさい。 次に,これらの2つの関数を用いて,ex の近似値を小数点以下の桁数を指定して出力する プログラムをつくりなさい。 ex ? 1 + x + x2/2! + x3/3! + … + xn/n! △出力例: 指数関数exp(x)の近似値を計算します! x を入力してください:2.5? Taylor 展開の最大次数n は:100? 小数点以下の桁数m は:3? exp(x)の近似値 = 12.182 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C [4] 期限: 2008/11/7 24:00まで [5] その他の制限:printf("%.*f", m, y); は用いないで定義すること。 よろしくお願いします。
243 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 12:33:39 ] >>241 vistaにはコンパイラついてませんよ?
244 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 13:22:14 ] >>221 一つ目の問題、ありがとうございます。 2つ目の問題の、 3×3行列の余因子の二次元配列を使った書き方がわかりません。 全て書けばプログラムがかなり長くなってしまいますし、それでは配列を使わなくても書けるのでは、と思い考えています。
245 名前:デフォルトの名無しさん [2008/11/05(水) 13:49:36 ] [1] 授業単元:数値計算 [2] 問題文(含コード&リンク): data[n][n]に格納された、n次正方行列の逆行列を求めるプログラムを作成せよ。 対角要素に0に近い要素があっても、正しく求められるように工夫せよ。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: VC 6.0 [3.3] 言語: C [4] 期限: 明日 [5] その他の制限: なし お願いします
246 名前:デフォルトの名無しさん [2008/11/05(水) 14:03:52 ] このプログラムで*をもっと表示させるにはどうすればよいですか。 今日中にお願いいたします。 #include<stdio.h> #include<math.h> int main(){ double x, y, pai=3.14; for(y=1; y>=-1; y=y-0.1){ for(x=0; x<=4*pai; x++){ if(y==cos(x)){ putchar('*'); } else{ putchar(' '); } } putchar('\n'); } return 0; }
247 名前:デフォルトの名無しさん [2008/11/05(水) 14:11:58 ] >>246 #include<stdio.h> #include<math.h> int main(){ double x, y, pai=3.14; for(y=1; y>=-1; y=y-0.1){ for(x=0; x<=4*pai; x++){ if(y==cos(x)){ putchar('************************************'); } else{ putchar(' '); } } putchar('\n'); } return 0; }
248 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 14:11:59 ] もっとってどういう風に?
249 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 15:44:48 ] >>243 う〜ん、でもコンパイルは最初から普通に出来るんですが… Visual Studio 2008 Express Editionsのページから無料でインストールしたやつを 使用してるんですが、Webインストールした時に一緒に付いて来たとかなのかな… そうだとしたら落としたのはついこないだなのでvarは最新のはずですが…。
250 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 15:52:19 ] そういうときはVS2008と書けばおk
251 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 16:03:16 ] >>250 あ、なるほど。 お手数おかけしました><
252 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 16:03:57 ] >>242 n = 14 くらいまでにしておかないと、とんでもない結果になるよ kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7945.txt
253 名前: ◆591LS1rcWk mailto:sage [2008/11/05(水) 16:04:49 ] [1] 授業単元:プログラミング実習 [2] kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7944.txt [3] 環境 [3.1] OS: Win vista [3.2] borland C++ 2.31 [3.3] 言語: C [4] 期限: 11月06日14:00まで Rxh(k)=1/n * Σ(n-1,n=0)x[n]*y[n+k]を計算しRxhを1−7出力するプログラムなのですが 完成し、動作を確認した後途中式に用意しておいた二重forループ無いの17行目 printf("%d---%d\n",sum1,sum2); を消すと正常に稼働しなくなります。 原因解決策などお願いします。
254 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 16:07:35 ] >printf(x[8]={1,2,3,4,5,6,7,8}n); 何これ?
255 名前:246 [2008/11/05(水) 16:28:39 ] >>248 自分もなんといっていいかわからないのですが、246のままのプログラムでは、cosの値が整数のときしか*が表示されません。 でもpaiの値が小数を含んでいるので、cosの値が小数第何位かになってしまうわけです。 かといって、yの刻み幅をかなり小さくしてしまうと大変なことになってしまいます。 cosの値を四捨五入とかできればいいのですが・・・ そういう場合はどのようにすればよいのでしょうか。
256 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 16:30:21 ] >>254 一番最初に配列の内容を出力しておくこと という条件でした。 情報足りなくてすいません。
257 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 16:33:07 ] printf("x[8]={1,2,3,4,5,6,7,8}\n");かな?
258 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 16:55:22 ] #include <stdio.h> int main (void) { float rxh[8]={0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0}; int x[8]={1,2,3,4,5,6,7,8}, h[8]={8,7,6,5,4,3,2,1}; int sum1=0,sum2=0,n=8,k,y,z; printf("x[8]={1,2,3,4,5,6,7,8}\n"); printf("h[8]={8,7,6,5,4,3,2,1}\n"); k=0; y=n-1; z=n-k; for(k=0;k<y;k++,z--){ for(n=0;n<z;n++){ sum1 = x[n] * h[n+k]; sum2 += sum1; //printf("%d---%d\n",sum1,sum2); } rxh[k] = (float)sum2/8.0; printf("Rxh[%d]=%2.3f\n",k+1,rxh[k]); sum2=0; } return(0); }
259 名前: ◆591LS1rcWk mailto:sage [2008/11/05(水) 16:58:51 ] リンク先の方を見ると何故か色々欠けているみたいなのでこっちに張り直します。 #include <stdio.h> int main (void) { float rxh[8]={0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0}; int x[8]={1,2,3,4,5,6,7,8}, h[8]={8,7,6,5,4,3,2,1}; int sum1=0,sum2=0,n=8,k,y,z; printf("x[8]=[1,2,3,4,5,6,7,8]\n"); printf("h[8]=[8,7,6,5,4,3,2,1]\n"); y=n-1; z=n-k; for(k=0;k<y;k++,z--){ for(n=0;n<z;n++){ sum1 = x[n] * h[n+k]; sum2 += sum1; printf("%d---%d\n",sum1,sum2); } rxh[k] = (float)sum2/8; printf("Rxh[%d]=%2.3f \n",k+1,rxh[k]); sum2=0; } return(0); }
260 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 17:16:18 ] >>258 気づきませんでした。ありがとうございます。 修正して下さった点は k=0;の初期化とrxh[k] = (float)sum2/8.0;の8だった部分を8.0にで合っていますか?
261 名前:213 mailto:sage [2008/11/05(水) 17:53:35 ] >>214 返すのが遅れてすいません。どうもありがとうございます。 一晩考えたのですが… #include <stdio.h> int main() { int a[3][3]; int b[3][3]; int c[3][3]; int i, j, k; scanf_s("%d %d %d %d %d %d %d %d %d", &a[0][0],&a[0][1],&a[0][2],&a[1][0],&a[1][1],&a[1][2],&a[2][0],&a[2][1],&a[2][2]); scanf_s("%d %d %d %d %d %d %d %d %d", &b[0][0],&b[0][1],&b[0][2],&b[1][0],&b[1][1],&b[1][2],&b[2][0],&b[2][1],&b[2][2]); for(i=0; i<3; i++) { for(j=0; j<3; j++) { for(k=0; k<3; k++) { c[i][j] += a[i][k] * b[k][j]; } printf("%d, " ,c[i][j]); } printf("\n"); } } とするととんでもない数字が表示されます。
262 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 18:03:04 ] int c[3][3] = {0};
263 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 18:26:59 ] cを全部0で初期化しないとね。
264 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 18:44:48 ] [1] 授業単元:プログラミング演習 [2] @12個のデータを入力できる1次元配列(int型)を準備し、 キーボードから各自 適当な数字(int型の範囲)を12個入力する. 入力したデータは,準備した配列に格納される. 12個のデータの最大値と最小値を表示するプログラムを作成しなさい. A12個のデータを入力できる2次元配列(int型 3行4列)を準備し, キーボードから各自 適当な数字(int型の範囲)を12個入力する 入力したデータは,準備した配列に格納される. 12個のデータの最大値と最小値を表示するプログラムを作成しなさい. [3] 環境 [3.1] OS windows Vista [3.2] コンパイラ名:gcc [3.3] 言語: C [4]11月12日 13:00まで [5]その他制限:if文、for文、配列などは習いましたが、それ以上はまだ習っていません。よろしくお願いします。
265 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 19:36:54 ] >>262 ,263 できました。どうもありがとうございます。
266 名前:デフォルトの名無しさん [2008/11/05(水) 19:49:16 ] 239をどなたかお願いします。
267 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 20:00:44 ] >>239 の言ってる意味が分からないんだけど。 argc, argv をどうしたいの? 何の下位バイトを出力するの?
268 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 20:12:49 ] [1] 授業単元: C言語入門 文字処理の簡単な演習課題 [2] 問題文(含コード&リンク): 適当な1文字を入力し、それが元が何であったかが分からないように何文字かずらして暗号化し、また元に戻すようなプログラムを作りなさい。文字としては英字小文字のみと仮定します。 例を以下に示します。作成するプログラムも同じような出力形式にしてください。 [ 例 ] 入力文字 = x 暗号化された文字 = b 復号化された文字 = x 何文字ずらすか?については、各自で適当に設定して構いません。 ただし、暗号化された文字も、英字小文字でなければなりません。例えば、zに2を足すと、そのままでは英字でない記号になってしまいますが、これを z+1 -> a, z+2 -> b, z+3 -> c, … のようにアルファベットの先頭に戻してやる処理が必要です。 この点を工夫して下さい。 [3] 環境 [3.1] OS:Windows XP [3.2] Visual C++ 2005 [3.3] C++ [4] 期限:11月6日23時まで [5] その他の制限: Char型変数を使うのはわかるのですがそれからがよくわからなくて・・・。 初歩的なことですみませんが、よろしくお願いします。
269 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 20:15:06 ] >>239 #include <stdio.h> #include <limits.h> #include <stdlib.h> union UNION { int i; unsigned char ch[8]; }; void f(unsigned char c) { unsigned char i; for (i = (1 << (CHAR_BIT - 1)); i != 0; i >>= 1) { if ((c & i) != 0) putchar('1'); else putchar('0'); } } int main(int argc, char *argv[]) { union UNION obj; obj.i = 0; if (argc > 1) obj.i = atoi(argv[1]); printf("%d\n", obj.i); f(obj.ch[1]); putchar(' '); f(obj.ch[0]); return 0; } よくわからないとこは適当に判断させてもらった
270 名前:デフォルトの名無しさん [2008/11/05(水) 21:00:23 ] [1] 授業単元: C言語応用 [2] 問題文(含コード&リンク): テキストファイル CD_DATA|45 DVD_DATA|601 MD_DATA|24 メイン関数と読み込み関数で、テキストファイルの'|'より後ろを構造体に書き込み エラー処理でテキストファイルに'|'が無い時エラーメッセージをだす。 テキストファイルの中の行数が違った時エラーメッセージをだす。 [3] 環境 [3.1] OS:Windows XP [3.2] コンパイラ名とバージョン: [3.3] C [4] 期限:11月6日15時まで
271 名前:デフォルトの名無しさん [2008/11/05(水) 21:00:39 ] >>269 さん どうもありがとうございます。
272 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 21:44:12 ] >>268 offsset は -26 〜 26、入力文字 in の範囲チェックはどっかでやっておく int offset = 3; char in, en, de; in = getchar(); /* 暗号化 */ en = (in - 'a' + offset + 26) % 26 + 'a'; /* 復号 */ de = (en - 'a' - offset + 26) % 26 + 'a'; printf("入力文字 = %c\n暗号化された文字 = %c\n復号された文字 = %c\n", in, en, de);
273 名前:デフォルトの名無しさん [2008/11/05(水) 22:14:22 ] 宿題への助言をお願いします。 内容は、入力された整数列を文字型配列で読み込み、その整数を以下のような変換規則に従い出力するというものです。 0→D、1→f、2→k、3→E、4→y、5→Q、6→R、7→e、8→B、9→t 以下は作ってみたものとなります。出力結果が文字化けしてしまいます… #include<stdio.h> #include<string.h> #define N 50 int main(){ int i, j; char num[N], txt[N]; printf("%d個までの整数列を入力して下さい : ", N); scanf("%s", &num); for(i = 0; i < strlen(num); i++){ for(j = 0; j < 10; j++){ if(num[i] == 'j') txt[i] = "DfkEyQReBt"[j]; } } printf("\n整数列を変換した文字列は「"); for(i = 0; i < strlen(num); i++){ putchar(txt[i]); } printf("」です。\n"); return 0; }
274 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 22:24:23 ] >>273 scanf("%s", &num); --> scanf("%s", num); & をトル if(num[i] == 'j') --> if(num[i] = j + '0') 'j' という文字と比べてどうすんの 以上。
275 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 22:30:26 ] >>274 どうもです。コンパイル通りました(^^ とっても初心者なので、「j + '0'」とするのがどうも理解しにくいところですが…(^^; あと、sage忘れスマソ
276 名前:14 mailto:sage [2008/11/05(水) 22:34:32 ] >>16 ありがとうございます。先頭のセルの削除と解放ができました。 すべてのセルを削除すると同時に連結リストの先頭と2つ目に追加したセルの領域を解放する関数って どう書けばいいんですか? void *delete_all(struct cell *head) { struct cell * next; if(head == NULL){ return NULL; } while(next !=NULL){ next = head->next; } free(head); } whileでnextをセルの終わりまで飛ばして、削除しようと考えたのですが領域の解放の部分が分かりません。
277 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 22:51:42 ] [1] 授業単元: C言語 [2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7947.txt [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン: [3.3] C [4] 期限:11月8日 よろしくおねがいします。
278 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 22:52:31 ] >>275 '0' は ASCII コードで 48 という整数値に対応する。 '1' は ASCII コードで 49 だから '0' + 1 と表せる。 同様に、'2', '3', ..., '9' は '0' + 2. '0' + 3, ... , '0' + 9 となる。
279 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 23:04:20 ] >>272 できました。 本当に助かります。ありがとうございました
280 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 23:12:41 ] 『2つの文字列をポインタ変数pxとpyを使って入力し、 pxとpyの文字列を結合した文字列を他のポインタ変数に記憶し、 その結果を出力するプログラム』 を作れという課題なのですが、うまく動作してくれません。 誤ってる部分等、目につきましたら助言お願いします。 #include<stdio.h> #define N 10 int main(){ char *px,*py,*pz,x[N+1],y[N+1],z[N+(N+1)]; /*最大N文字まで入力可としたいので、N+1個分の配列を用意*/ px=x; py=y; pz=z; printf("2つの文字列を入力してください。(ただし、各々最大%d文字まで)\n",N); printf("1つ目の文字列 >"); scanf("%s",px); printf("2つ目の文字列 >"); scanf("%s",py); /* pxとpyの文字列をpzに記憶させる部分 */ while(*pz++ = *px++) ; pz--; while(*pz++ = *py++) ; printf("%s\n",pz); return(0); } /*以下、出力結果 2つの文字列を入力してください。(ただし、各々最大10文字まで) 1つ目の文字列 >yamada 2つ目の文字列 >tarou フフフフフフフフフフフフフフフフフフフフtarou */
281 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 23:15:38 ] >>280 printf("%s\n",pz); ↓ printf("%s\n",z);
282 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 23:18:01 ] printf()の時点でpzがどこを指してるか考えてみよう
283 名前:280 mailto:sage [2008/11/05(水) 23:18:50 ] >>281 出来ました。ありがとうございます。こんなにあっさり・・・。 すみません、どうして、pzではまずいんでしょうか?
284 名前:281 mailto:sage [2008/11/05(水) 23:20:21 ] >>283 >>282 の通りだけど、 pz--; これをできているんだからもう少し考えればいけるさ。
285 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 23:21:53 ] 文字列操作関数使えば瞬殺だったりして
286 名前:280 mailto:sage [2008/11/05(水) 23:30:55 ] >>283 >>284 解決しました。ありがとうございました。
287 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 23:35:15 ] >>264 1問目あがり。 全角スペースは適当に置き換えてちょ。 #include<stdio.h> #define N 12 int main() { int i, array[N]; int max, min; for( i = 0; i < N; i++ ) scanf( "%d", &array[i]); /* とりあえず0番目の要素を最大値,最小値として設定し, それ以降の要素と比べる */ max = min = array[0]; for( i = 1; i < N; i++ ) { if(max < array[i]) max = array[i]; if(min > array[i]) min = array[i]; } printf( "Max: %d\nMin: %d\n", max, min); return 0; }
288 名前:デフォルトの名無しさん [2008/11/05(水) 23:45:19 ] exeファイルの中身、C++でプログラミングした文章は、 exeファイルから知ることはできないのでしょうか?
289 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 23:55:03 ] >>288 なんとなくはできるよ 逆アセンブルすりゃいいじゃん したらばニモニックが登場して そこからアセンブリを割り出せばいい さらにそのあと好きな高級言語に翻訳
290 名前:デフォルトの名無しさん [2008/11/05(水) 23:58:49 ] [1] 授業単元: C言語 [2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7948.txt [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン: [3.3] C [4] 期限:11月6日 朝7時 [5] その他の制限:出来るだけ簡単に! よろしくおねがいします!!!
291 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 00:17:02 ] >>278 ありがとうございます、すっきりしました(^^
292 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 00:24:37 ] 245をお願いします
293 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 00:27:32 ] >>288 ソースコードを知るのか、例えばアドベンチャーゲームのような、実行ファイルに含まれる 文章を知るのかによってかわるかな。
294 名前:デフォルトの名無しさん [2008/11/06(木) 01:08:14 ] [1] 授業単元: ループと条件分岐 [2] 問題文(含コード&リンク): y=cos(x)の座標を*でプロットするプログラムを作ります。xの範囲は[0, 4π]です。 縦をy軸と見立てます。使うのは条件分岐のif、ループ、putcharです。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 夜が明けるまで [5] その他の制限: 今はループと条件分岐のifまで習っています。使うのは条件分岐とループ、putcharです。 初めて書き込みします。特に難しいことは必要としないとは言っていましたが、自分には難しすぎます。 どうかよろしくお願いします。
295 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 01:14:05 ] >>276 , >>14 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7950.txt
296 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 01:28:06 ] >>294 横80文字縦20行としてとりあえず。上下非対称だがその辺は丸め誤差のせいにして。 #define WIDTH 80 #define HEIGHT 20 #define PI 3.14159265358979 int x, y; int c[WIDTH]; for(x = 0; x < WIDTH; x++) c[x] = (cos(4 * PI / WIDTH * x) + 1)* HEIGHT/2; for(y = 0; y <= HEIGHT; y++){ for(x = 0; x < WIDTH; x++) if(c[x] == HEIGHT - y) putchar('*'); else putchar(' '); putchar('\n'); }
297 名前:296 mailto:sage [2008/11/06(木) 01:30:01 ] >>296 配列習ってないんだったら if(c[x] == の部分の c[x] を cos(4*PI/WIDTH * x) + 1)*HEIGHT/2 に置き換える。すると最初の for(x = 0; は不要。
298 名前:296 mailto:sage [2008/11/06(木) 01:33:10 ] と思ったけど、暗黙のキャスト使ってるから一度 int の配列に入れておくのが吉かも。
299 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 01:38:35 ] >>295 全然トリッキーじゃなかった。 struct cell *next, *curr; for (curr = head, next = NULL ; next = curr->next, curr != NULL; curr = next) { free(curr); } せめてこうだったわ。半日修行してくる。
300 名前:294 [2008/11/06(木) 01:48:40 ] >>296 配列習ってないので、c[x]を置き換えてやってみたんですけど、何かうまくいきませんでした。 どうすればよいでしょうか。 あと「横80文字縦20行とする」ってどういうことですか。
301 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 01:49:08 ] >>290 ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7952.txt
302 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 01:49:11 ] >>264 2問目あがり。全角スペースは適当に置き換えてちょ。簡単に、簡潔にかいたつもり。 #include <stdio.h> #define X 4 /* X,Yの値を交換しても動くから好きにしてちょ */ #define Y 3 int main(void) { int i, j, max, min, array[X][Y]; for( i = 0; i < X; i++ ) for( j = 0; j < Y; j++ ) scanf( "%d", &array[i][j]); max = min = array[0][0]; for( i = 0; i < X; i++ ) { for( j = 0; j < Y; j++ ) { if(max < array[i][j]) max = array[i][j]; if(min > array[i][j]) min = array[i][j]; } } printf( "Max: %d\nMin: %d\n", max, min); return 0; }
303 名前:301 mailto:sage [2008/11/06(木) 01:51:23 ] 問2の3行目は#include <string.h>だorz
304 名前:294 [2008/11/06(木) 02:08:21 ] 自分でもプログラムを組んでみたんですが、これから何とかなりませんか。 自分の組んだのだと、一つしか表示されません。 #include<stdio.h> #include<math.h> int main(){ double x, y, pai=3.14; for(y=1; y>=0; y=y-0.1){ for(x=0; x<=pai/2; x=x+0.1){ if(y==cos(x)){ putchar('*'); } else{ putchar(' '); } } putchar('\n'); } return 0; }
305 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 02:19:51 ] y==cos(x) 幅を持たせろ、なんで一致するとおもったんだ?
306 名前:294 [2008/11/06(木) 02:22:03 ] 幅を持たせるって、どういうことですか?
307 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 02:23:47 ] yが0.1刻みなのにぴったり一致するわけないだろ?
308 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 02:27:23 ] #include <stdio.h> #include <math.h> int main(){ double x, y, pai=3.14; for(y=1; y>=-1; y=y-0.1){ for(x=0; x<= 4 *pai; x=x+0.1){ if(y - 0.05 < cos(x) && cos(x) <= y + 0.05){ putchar('*'); } else{ putchar(' '); } } putchar('\n'); } return 0; } 答えわたしとけばいいんじゃね?