- 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/
- 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; } 答えわたしとけばいいんじゃね?
- 309 名前:294 [2008/11/06(木) 02:28:13 ]
- でも刻み幅を細かくしすぎたら、画面に収まりきらないと思うのですが・・・
そういう場合はどうすればよいでしょうか。
- 310 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 02:32:01 ]
- >>301
おお! あざーっす!!
- 311 名前:294 [2008/11/06(木) 02:32:57 ]
- 本当にありがとうございました。
自分の知識が足りず、申し訳ありませんでした。
- 312 名前:301 mailto:sage [2008/11/06(木) 02:39:00 ]
- >>277
#include <math.h>を足して 関数のプロトタイプ宣言して #define next(x) (((x)+1% (Q_SIZE+1)) ↓ #define next(x) ((x+1) % (Q_SIZE+1)) 関数enqueue内の return 0; の前に rear = next(rear); 足して ○○○1つ目 enqueue(n) == -1 ○○○2つ目 (n=dequeue()) == -1 viewqueueは printf("末尾(長さ:%d)\n", abs(front-rear));
- 313 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 02:39:31 ]
- 名前消すの忘れた(´・ω・`)
- 314 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 02:54:41 ]
- Cで以下のような関数を作りたいのですが、可能でしょうか?
可能ならば、どのように実装すればよいのか教えてください。 int myrand(int Max, int N, int prob) 0からMaxまでのランダムな整数を返しますが、 probの確率でNを返してくれるような関数です。 例えば、myrand(100, 10, 50)は50%で10を返しますが、 それ以外は1〜100までランダム、という具合です。
- 315 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 03:03:44 ]
- >>314
それ以外は1〜100までランダム 10は含むのか?
- 316 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 03:12:50 ]
- if( (double)rand()/RAND_MAX < prob )
return N; else return (int)(rand()*(Max+1.0)/(1.0+RAND_MAX));
- 317 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 04:12:38 ]
- >>316
probを100で割るか左辺を100倍しないと
- 318 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 09:54:40 ]
- [1] 授業単元: プログラミング実習2
[2] 問題文(含コード&リンク): 10進数⇔16進数の変換プログラムを作成せよ -10進⇒16進か16進⇒10進かを最初に選択 -変数はint型で 実行例 10進⇒16進なら1,16進⇒10進なら2を入力してください: 1 ↓ 10進数を入力してください: 1000 ↓ 入力した数は16進数で 3e8 です. 10進⇒16進なら1, 16進⇒10進なら2を入力してください: 2 ↓ 16進数を入力してください: f86a ↓ 入力した数は10進数で 63594 です. [3] 環境 Visual C++ [3.1] OS:Windows [3.2] コンパイラ名とバージョン: C++コンパイラ,リンカ [3.3] 言語: C言語 [4] 期限: 2008年11月10日(月)までお願いします。 [5] その他の制限: main関数,文末記号,エスケープシーケンス,printf関数 逐次処理(順次処理)、条件分岐(選択処理)if,if-else,switch、 繰り返し(反復処理)while,do-while,for、演算子の複合演算子(+=,-=,*=,/=,%=) インクリメント(++)デクリメント(--)、scanf関数、アドレス演算子は習いました。 お願いします。
- 319 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 10:02:27 ]
- >>318
strltolは使っちゃだめな課題っぽいけどそうなんだよね?
- 320 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 10:21:18 ]
- >>318
そうですね。 strltolは使わないでお願いします。
- 321 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 10:22:38 ]
- >>319
そうですね。 strltolは使わないでお願いします。
- 322 名前:デフォルトの名無しさん [2008/11/06(木) 10:46:05 ]
- >>318
#include <stdio.h> int main(void) { int i, n; printf("10進⇒16進なら1, 16進⇒10進なら2を入力してください: "); scanf("%d", &i); switch(i) { case 1: printf("10進数を入力してください: "); scanf("%d", &n); printf("入力した数は16進数で %x です\n", n); break; case 2: printf("16進数を入力してください: "); scanf("%x", &n); printf("入力した数は10進数で %d です\n", n); break; } return 0; }
- 323 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 11:47:27 ]
- [1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7953.txt [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:bcc [3.3] 言語:c [4] 期限:11/10 [5] その他の制限:とくになし よろしくおねがいします
- 324 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 12:07:30 ]
- >>323
int kaibun(char str[]){ { int i, n; /* 終端文字 \0 または \n までの文字数を数える */ for(n = 0; str[n] != '\0' && str[n] != '\n'; n++); /* 先頭からの文字と末尾からの文字でひとたび違ったら即 0 を return */ for(i = 0; i < n; i++) if(str[i] != str[n - i - 1]) return 0; /* 最後まで return 0 されなかったら 1 を return */ return 1; }
- 325 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 12:11:06 ]
- for(i = 0; i < n; i++)
は for(i = 0; i < n/2; i++) で十分だったな
- 326 名前:738 [2008/11/06(木) 12:23:09 ]
- [1] 授業単元: プログラミング
[2] 問題文(含コード&リンク): 入力した文字の先頭と最後の文字を出力する。 ”終わり”と入力すればプログラム終了。 [3] [3.1] OS:linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C言語 [4] 期限: 2008年11月8日までお願いします。 [5] その他の制限: scanfを使うのではなくgetcharを使用
- 327 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 13:23:19 ]
- >>326
マルチバイト文字の処理を要求しているのか
- 328 名前:324 mailto:sage [2008/11/06(木) 13:28:33 ]
- >>323
例文よく見てなかった。大文字小文字は区別しないのな 制限なしってことだから、ctype.h の tolower 使って書き換える if(str[i] != str[n - i - 1]) ↓ if(tolower(str[i]) != tolower(str[n - i - 1]))
- 329 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 13:33:00 ]
- >>252
ありがとうございました!
- 330 名前:324 mailto:sage [2008/11/06(木) 14:35:12 ]
- 何度もすまん。空白も無視しないとダメなんだな
int kaibun(char str[]) { int i, n; char buf[MAX_SIZE]; /* 終端文字 \0 または \n までの文字数を数えて空白を除いて buf にコピー */ for(i = 0, n = 0; str[i] != '\0' && str[i] != '\n'; i++) if(str[i] != ' ') buf[n++] = str[i]; /* 先頭からの文字と末尾からの文字でひとたび違ったら即 0 を return */ for(i = 0; i < n; i++) if (tolower(buf[i]) != tolower(buf[n - i - 1])) return 0; /* 最後まで return 0 されなかったら 1 を return */ return 1; }
- 331 名前:123 mailto:sage [2008/11/06(木) 16:34:15 ]
- >>123をお願いできないでしょうか?
- 332 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 18:49:14 ]
- >>324
なんども申し訳ありません ありがとうございます!
- 333 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 18:58:02 ]
- >>322
本当に有難う御座いました。 大変助かりました。
- 334 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 19:40:49 ]
- お願いします
[1] 配列 [2] 下に示す行列の積を求めて表示するプログラムを作りなさい。 int x[2][3]={{1,2,3},{4,5,6}} int y[3][2]={{1,5},{5,3},{8,1}} 実行結果 35 14 77 41 問 [3] 環境 [3.1] XP [3.2] VC 6.0 [3.3] 言語:C [4] 期限:明日まで
- 335 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 19:59:36 ]
- >>331
#include <string> #include <iostream> class Fish {}; class Wakana : public Fish{ protected: std::string name; public: Wakana() : name("ワカナ") { }; void show() { std::cout << name << std::endl; }}; class Tsubasu : public Wakana { protected: std::string name; public: Tsubasu() : name("ツバス") { } void show() { std::cout << Wakana::name << "→" << name << std::endl; }}; class Inada : public Tsubasu { protected: std::string name; public: Inada() : name("イナダ") { } void show() { std::cout << Wakana::name << "→" << Tsubasu::name << "→" <<name << std::endl; };}; class Hamachi : public Inada { protected: std::string name; public: Hamachi() : name("ハマチ") { }; void show() { std::cout << Wakana::name << "→" << Tsubasu::name << "→" << Inada::name << "→" << name << std::endl;}}; class Buri : public Hamachi { protected: std::string name; public: Buri() : name("ブリ") { }; void show() {std::cout << Wakana::name << "→" << Tsubasu::name << "→" << Inada::name << "→" << Hamachi::name << "→" << name << std::endl;}}; int main(){Buri().show(); return 0;}
- 336 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 20:08:41 ]
- 入出力関数は?
- 337 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 21:02:39 ]
- 題意がいまいち分からないので継承元の文字列を継ぎ足していく感じに
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7954.cpp クラス名がinabaになっちゃった.
|

|