C/C++の宿題を片付けます 58代目
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2006/01/18(水) 03:35:45【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して
投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。
【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):
[3] 環境
[3.1] OS: (Windows/Linux/等々)
[3.2] コンパイラ名とバージョン: (gcc 2.9 VC 6.0等)
[3.3] 言語: (C/C++/どちらでも可 のいずれか)
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
【C 関数検索 man on WWW】
http://www.linux.or.jp/JM/index.html
【前スレ】
C/C++の宿題を片付けます 57代目
http://pc8.2ch.net/test/read.cgi/tech/1136768567/l50#tag993
【過去スレ一覧】
http://makimo.to/cgi-bin/search/search.cgi?q=C%2B%2B%82%CC%8Fh%91%E8&andor=AND&sf=2&H=&view=table&D=tech&shw=2000
0263デフォルトの名無しさん
2006/01/20(金) 15:24:470264デフォルトの名無しさん
2006/01/20(金) 15:25:340265デフォルトの名無しさん
2006/01/20(金) 15:26:280266デフォルトの名無しさん
2006/01/20(金) 15:28:380267デフォルトの名無しさん
2006/01/20(金) 15:29:03[2] 問題文(含コード&リンク): 文字列sの中の異なった文字の数を(種類)を数える関数SuteStr(s,t)を作りなさい。
文字列t[]には文字の種類を入れることにします。
<ヒント>
文字列sの要素*sを1つずつチェックしていきます。t[]には、今まで出てきた文字の種類を
入れておきます。文字*sと同じ文字がt[]の中になかったら、t[]の後に追加します。文字列
s[]の中に'\0'が出てくるまで繰り返します。
<実行例>
Input String: C-language
Different char number is 8
Output String:C-langue
[3] 環境
[3.1] OS: mac osX 10.4.4
[3.2] コンパイラ名とバージョン: X code2.0
[3.3] 言語: C言語
[4] 期限: 今日の五時まで
[5] その他の制限: なし
もう無理。教えてください。
0268デフォルトの名無しさん
2006/01/20(金) 15:29:22できないとはっきり言え
0269デフォルトの名無しさん
2006/01/20(金) 15:30:33だから 意味が分らない=できない
のつもり^^;
0270デフォルトの名無しさん
2006/01/20(金) 15:30:380271デフォルトの名無しさん
2006/01/20(金) 15:32:37英数字だけ?
それとも2バイト文字も含む訳?
0272デフォルトの名無しさん
2006/01/20(金) 15:33:15>>271::>>262 → >>267
0273デフォルトの名無しさん
2006/01/20(金) 15:39:34int count(char *s)
{
int table[256] = {0};
int i, sum = 0;
for (; *s; s++)
table[(unsigned char) *s]++;
for (i = 0; i < 256; i++)
if (table[i])
sum++;
return sum;
}
0274デフォルトの名無しさん
2006/01/20(金) 15:40:38前スレで作ってもらったのは無視?
ttp://pc8.2ch.net/test/read.cgi/tech/1136768567/409
0275デフォルトの名無しさん
2006/01/20(金) 15:42:45できない
これでええか?
0276デフォルトの名無しさん
2006/01/20(金) 15:57:39int a(char *b) { int c[256] = {0}, d = 0; for (; *b; b++) if (!c[*(unsigned char *) b]++) d++; return d; }
0277デフォルトの名無しさん
2006/01/20(金) 15:59:110278デフォルトの名無しさん
2006/01/20(金) 16:07:48int SuteStr(const char *s, char *t)
{
int table[256] = {0};
int count = 0;
for (; *s; s++) {
if (table[*(const unsigned char *) s]++ == 0) {
*t++ = *s;
count++;
}
}
*t = '\0';
return count;
}
0279デフォルトの名無しさん
2006/01/20(金) 16:15:35char配列をqsortして
値が大きくなったらカウンターの数をインクリメントするってのは駄目?
0280デフォルトの名無しさん
2006/01/20(金) 16:17:12今携帯なんでw
0281デフォルトの名無しさん
2006/01/20(金) 16:19:19有りだろ
むしろそっちの方がわかりやすくね?
0282デフォルトの名無しさん
2006/01/20(金) 16:19:420283デフォルトの名無しさん
2006/01/20(金) 16:21:230284デフォルトの名無しさん
2006/01/20(金) 16:23:380285デフォルトの名無しさん
2006/01/20(金) 16:42:09ところで、ときどきVisualC++でっていう指定があるけど、
学校のコンピュータに入ってんのかな?
0286デフォルトの名無しさん
2006/01/20(金) 16:47:12俺が教官でも最低限、自分の担当する言語の宿題スレは確認するな
VC++なんて入れたらとんでもない金掛かると思うがな
まぁ入ってるところもあるんじゃねーの
俺の所はおそらくずっとLinux(GCC)だろうが
0287デフォルトの名無しさん
2006/01/20(金) 16:52:30gcc,g++,borland c++だったら、ただだから
たいていの教育機関にはこれらが入ってると思う。
てか、初心者はプログラムの本質学ぶのが目的だから
vc使わなくてもいいような気もする・・・
0288デフォルトの名無しさん
2006/01/20(金) 16:52:52#incude <stdio.h>
#define LOW 3 /* 行数 */
#define COLUMN LOW /* 列数 */
int main(){int i,j,k;
double A[LOW][COLUMN + 1]={{3,2,1,10},{2,5,2,18},{1,4,1,12}};
double d;
double x[3] = {0,0,0}; /* 答えを入れる */
double b[3] = {0,0,0}; /* 式(6)で使う */
double s = 0; /* 0で初期化 */
/* 【前進消去】 */
for ( j=___A___; j < ___B___ ; j++ ){d = ___C___;
for ( k = 0; k <= COLUMN; k++ ){___D___; }}}
/* b=(b1,b2,b3)をつくる */
for ( i=0 ; i<LOW ; i++ ){b[i] = A[i][3];}
/* 【後退代入】 */
for ( i=LOW-1; i>= 0 ; i-- ){s = 0;
for ( k = i+1; k < COLUMN; k++ ){ /* 式(6)Σを計算 */
___E___; }
x[i] = ___F___; /* 式(6)のxを計算 */ }
for ( i=0 ; i<LOW ; i++ ){ /* 変形した行列の表示 */
printf ("%d: %lf %lf %lf\n", i, A[i][0],A[i][1],A[i][2], A[i][3]); }
printf ("X = (%lf %lf %lf)^T\n", x[0], x[1], x[2]);
return 0;}
解答がx1=(1,2,3)となるように(A)(B)(C)(D)(E)(F)をもとめよ
[3.3] 言語: C言語
[4] 期限: 一時間
0289デフォルトの名無しさん
2006/01/20(金) 16:58:45うちの大学は全てのPCにVS.NETが入ってる
しかも授業ではCPadを使う
0290デフォルトの名無しさん
2006/01/20(金) 17:01:24ちょwww
どこの大学?
うち国立だけど、pascal、gcc、lisp、prologなんか入ってるOTZ
0291デフォルトの名無しさん
2006/01/20(金) 17:03:420292デフォルトの名無しさん
2006/01/20(金) 17:06:04むしろ初心者にVCなんて使わせたら、悪影響な気がするがな
VCの補助機能は確かに便利だが、純粋にプログラミングの
本質的な部分を覚えるのにはかえって邪魔になる
>>290
俺も国立だが、gpc/gcc/g++/csccなんかが入ってるな
0293デフォルトの名無しさん
2006/01/20(金) 17:14:380294デフォルトの名無しさん
2006/01/20(金) 17:17:350295デフォルトの名無しさん
2006/01/20(金) 17:20:24コンソールアプリケーションのトレースができたりする。
0296デフォルトの名無しさん
2006/01/20(金) 17:22:25携帯からの書き込みですのでコピペできませんでした
C言語
期限 今日の19時頃まで
問い 整列済みデータを二分木で表現
整列済みデータは乱数を発生させて自分でソート って感じで…
もしできたら
二分木から指定した値を検索するプログラムも…
ょろしくです(>_<)
0297デフォルトの名無しさん
2006/01/20(金) 17:42:340298デフォルトの名無しさん
2006/01/20(金) 17:58:13地元の私立大学
偏差値は低いが金は有り余ってる
0299デフォルトの名無しさん
2006/01/20(金) 18:11:220300デフォルトの名無しさん
2006/01/20(金) 18:34:20っていうか、夏休みが終わって学校に行ってみたら100台くらいのPCがPen4 3.2G、メモリ768MB、WinXPに総入れ替えしてあったりしたし
0301デフォルトの名無しさん
2006/01/20(金) 19:21:38> VC だと、ヘッダファイルの変さを我慢すると、標準入出力を使う
> コンソールアプリケーションのトレースができたりする。
それってgdbとかでは出来ないの?
0302デフォルトの名無しさん
2006/01/20(金) 19:23:56gdb ってエディタと連動してたっけ?
0303デフォルトの名無しさん
2006/01/20(金) 19:30:19えらく豪勢なPCだな・・・('A`)
俺の所はDELLのPen4(2GHz程度っぽい)に入ってたXPをわざわざ消して
VineLinux入れてある
まぁ開発用途で使う俺らにとってはXPより使いやすいんだがな
0304デフォルトの名無しさん
2006/01/20(金) 19:31:16emacsなら可。 よく知らんがリモートデバッグ機能使えば、いろいろできるかもしれん。
>296
二分探索木の挿入とトラバース、探索だな。
0305デフォルトの名無しさん
2006/01/20(金) 21:01:03[2] 問題文(含コード&リンク):WindowsXPでデスクトップ画面を左右反転させるプログラムを作成せよ
[3] 環境
[3.1] OS: WindowsXP
[3.2] VC++
[3.3] 言語: C++
[4] 期限: 1月31日の17時まで。
[5] その他の制限: 特になし
ビデオカードなんかで回転ができるんだから、左右反転もすぐできるかと思ったけど
やってみたら全然わかんね・・・ orz
よろしくお願いします。
0306デフォルトの名無しさん
2006/01/20(金) 21:05:30BitBltなら幅を負数にする。
0307デフォルトの名無しさん
2006/01/20(金) 22:22:30[2] 問題文(含コード&リンク):
平面上の点の数n(n≦100),及び,n個の点の座標を配列 x,及び,y に読み込み,
すべての点の間の距離を計算し,その距離が最大になる点の組(2つの点の座標.最初に入力した点の座標を最初),
及び,その距離を出力するプログラムを書け。
(入力例) コメントの部分は除く
3 // 点の数
0 10 // 1 番目の点の x 及び y 座標
0 0 // 2 番目の点の x 及び y 座標
20 0 // 3 番目の点の x 及び y 座標
(出力例) コメントの部分は除く
0 10 // 1 番目の点の x 及び y 座標
20 0 // 3 番目の点の x 及び y 座標
22.36・・・ // 2点間の距離
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン:VC6.0
[3.3] 言語:C++
[4] 期限: 一月下旬
[5] その他の制限:特にありません。よろしくお願いします。
0308デフォルトの名無しさん
2006/01/20(金) 22:28:11[2]問題文:�@0〜1.0の範囲の二組の実数の乱数を5回生成し、
それらをx,yとして得られた5つのxy座標上の点(x,y)を画面に表示する
�A40から65の任意の整数をキーボードから入力し、その文字コードに対応するchar型文字を表示する
[3]環境
[3.1]OS:Windows
[3.2]コンパイラ名とバージョン:Visual C++ .NET 2003 コマンドプロンプト
[3.3]言語:C
[4]期限:月曜
[5]その他の制限:出来れば全文でお願いします
0310デフォルトの名無しさん
NGNG[2] 問題文(含コード&リンク):哲学者の食事の説明と解決策
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:
[3.3] 言語:C
[4] 期限: 今日中
[5] その他の制限:ありません。よろしくお願いします。
0311名無し
2006/01/20(金) 22:34:440312デフォルトの名無しさん
2006/01/20(金) 22:39:17(1)はコマンドプロンプトなのに画面に表示と言う辺りが無理だな。
どうやって画面に表示するのか教わっているならその情報を提示しろ。
(2)も、標準入出力でいいのかWinAPIを使うのか、printf()などを使うのかcoutを使うのか、
はっきりしないことには手を出しにくいし。
0313デフォルトの名無しさん
2006/01/20(金) 22:41:16馬鹿?
0314デフォルトの名無しさん
2006/01/20(金) 22:41:340315デフォルトの名無しさん
2006/01/20(金) 22:42:50「哲学者の食事の問題」のどこがCと関係あるんだ?
つーか、ぐぐればわかることだろ。
0316デフォルトの名無しさん
2006/01/20(金) 22:43:34恥の上塗りだな。
0317デフォルトの名無しさん
2006/01/20(金) 22:43:46問題よく読めよ馬鹿
0318デフォルトの名無しさん
2006/01/20(金) 22:44:54int min(int x, int m, int n)
{
int a, b;
if (m > n)
return min(x, n, m);
if (m == n)
return x[m];
a = x[m];
b = min(x, m + 1, n);
return (a < b) ? a : b;
}
・・・ウソはついていない。
0319デフォルトの名無しさん
2006/01/20(金) 22:45:590320デフォルトの名無しさん
NGNG書き込んでしまった後に気付いた。スレ違いスマソ
�@やり方は教わってません。これは普通に考えたらできないって話ですかね
�Aprintfでお願いします。WinAPIとcoutは習ってません
0322デフォルトの名無しさん
2006/01/20(金) 22:57:25哲学者が食事をしようと、食材を入れた箱を開けようとする。
ふと哲学者の脳裏にひょっとして、あけたらまずいんちゃうか? という思いがかすめる。
けっこう前のだし・・・・。
箱を開ければ状態は確定するが、箱を開ける前、
箱の中の状態は食べられるものか食べられないものかの状態が入り混じっている。
・・・って、こんなんじゃなかったっけ?
解決策は、箱を開けるとヤバイかもしんないので、箱は絶対に開けない。
0323デフォルトの名無しさん
2006/01/20(金) 23:05:43�@普通に考えたら
(0.1,0.6) (0.2,0.7) (0.3,0.8) (0.4,0.9) (0.5,0.0)
のような表示を出せばいいだけだろうな
�A言語がCならAPIだのcoutなんて言い出さないよな
その解釈であってると思います。レスありがとうございます
どなたかお願いします
0325デフォルトの名無しさん
2006/01/20(金) 23:22:15シュレディンガーのぬこかよ!
0326デフォルトの名無しさん
2006/01/20(金) 23:23:27シュレーディンガーの猫?
0327241
2006/01/20(金) 23:28:02このスレ回転速いですね…;
お礼遅くなってすみません、ありがとうございました!
0328デフォルトの名無しさん
2006/01/20(金) 23:35:59フォークとナイフが2人分しか用意されてない四角のテーブルに
4人の哲学者が座り、瞑想を終えた哲学者からさっさとフォーク、ナイフ
を取って食事を始めるって奴。
デッドロックのシミュレーションだと思う。要するに、デッドロックが起きない
ようにうまくプログラムをせよって事か?
0329デフォルトの名無しさん
2006/01/20(金) 23:42:36(1)
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void) {
int i;
srand((unsigned int)time(NULL));
for (i = 0; i < 5; i++) printf("(%f, %f)", 2 * rand() / (RAND_MAX + 1.0), 2 * rand() / (RAND_MAX + 1.0));
}
(2)
#include <stdio.h>
int main(void) {
int c;
scanf("%d", &c);
if (40 <= c && c <= 65) printf("%c", (char)c);
}
0330デフォルトの名無しさん
NGNGそれです。哲学者のルーチンを二つに分けて考えようとしたのですが、これは反則ですか?
Aは周りを気にせず自己中に食いたいときに食う。
Bは隣が食ってたら終わるまで待つ。
といった感じに。
0331デフォルトの名無しさん
2006/01/20(金) 23:50:49説明:
おなかをすかせた哲学者が角を曲がったところ、100メートル先に焼きいも屋をハケーン。
小カール君にもすんでのところで勝てそうだった経験のある哲学者は50メートル6秒フラットの俊足。
一方、リアカー商いの焼きいも屋のおじいさんは足取りも重く6秒で3メートルも進めたらいいとこ。
しかし哲学者が焼きいも屋を最初に見かけたところまでたどりつくと、
耳の遠いおじいさんはこちらの呼びかけにも気づかず5メートルほど先に行ってしまった。
あわてて哲学者がそこまで追いついても、その頃にはおじいさんはおじいさんなりのペースでまた先に。
哲学者とおじいさんの速さの比を20:1とすると、
哲学者がおじいさんがいたところにたどりつくたびに、おじいさんはその20分の1だけ先に行っていることになり、
哲学者は永遠に焼きいもを食べられない…って問題。
解決策:
宇宙は閉じているので全く反対方向に走れば
しばらくすると正面をこちらむきに歩いてくるおじいさんと出会うことになる。
ありがとうございます。感謝です
0333デフォルトの名無しさん
2006/01/20(金) 23:56:15アキレスの亀頭?
0334デフォルトの名無しさん
2006/01/21(土) 00:06:15これで分からなければ勉強不足、と言えるほど簡単に書いた。
#include <cmath>
#include <iostream>
int main() {
int n;
std::cin >> n;
double x[100], y[100];
for (int i = 0; i < n; ++i) std::cin >> x[i] >> y[i];
int index_start = 0, index_end = 0;
double dist2, max_dist2 = 0;
for (int i = 0; i < n; ++i)
for (int j = i; j < n; ++j)
if ((dist2 = (x[i] - x[j]) * (x[i] - x[j]) + (y[i] - y[j]) * (y[i] - y[j])) > max_dist2) {
index_start = i; index_end = j;
max_dist2 = dist2;
}
std::cout << x[index_start] << ' ' << y[index_start] << '\n' << x[index_end] << ' ' << y[index_end] << '\n' << std::sqrt(max_dist2) << std::endl;
return 0;
}
0335デフォルトの名無しさん
2006/01/21(土) 00:23:15かなり遅いレスになるが、標準Cにstrrevは含まれない。
0336デフォルトの名無しさん
2006/01/21(土) 00:28:27(なお、シュレディンガーの半死半生の猫の話はHALってマンガからの引用)
えーっと。哲学者の食事の解説(上手な解説はWebで見てくれ。脳内の情報だけで書いてる)
A)円形の卓があって、哲学者がN人居て、その間に1つづつ食器が置いてある。
B)哲学者は食器を2つ使わないとメシが喰えない。
C)哲学者は以下の動作を1つだけする
C1)まだ食器を持っていないなら、右手の食器を取ろうとする。右手の食器が開いていなければ次のチャンスを待つ
C2)C1が完了していれば、左手の食器を持とうとする。左手の食器が開いてなければ次のチャンスを待つ
C3)両手に食器を持っていれば、(メシを一口喰って)両手の食器を離す
D)哲学者が行動する順序はランダムである(続けて1人の哲学者が行動を続けることもある)
・・・ってすると、そのうち状態が変化しなくなってしまう。
改善:
食器に1〜Nの番号を振る(Cらしく、0〜N-1でも可)。
C1〜C2)を次のように変える。
C1)左右にある食器のうち若い番号の食器を持とうとする。持てなかったらC1へ
C2)もう一方の番号の食器を持とうとする。持てなかったらC2へ
0337デフォルトの名無しさん
2006/01/21(土) 00:29:110338デフォルトの名無しさん
2006/01/21(土) 00:43:100339デフォルトの名無しさん
2006/01/21(土) 00:47:510341デフォルトの名無しさん
2006/01/21(土) 00:59:30↓これは何をするプログラムですか?実行結果も教えてください。
#include <errno.h>
#include <dirent.h>
#include <stdio.h>
int main(void) {
DIR * dir;
struct dirent * ent;
/* "." is the current directory */
if (!(dir = opendir("."))) {
perror("opendir");
return 1;
}
/* set errno to 0, so we can tell when readdir() fails */
errno = 0;
while ((ent = readdir(dir))) {
puts(ent->d_name);
/* reset errno, as puts() could modify it */
errno = 0;
}
if (errno) {
perror("readdir");
return 1;
}
closedir(dir);
return 0;
}
0342デフォルトの名無しさん
2006/01/21(土) 01:08:39面白そうだな
つまりデッドロックが発生するまでをシミュレートしろということか
暇が出来たときに作ってみるか
0343デフォルトの名無しさん
2006/01/21(土) 01:10:370344デフォルトの名無しさん
2006/01/21(土) 01:14:41ls
実行結果は状況依存。環境依存じゃなくて状況依存。なので答えられん。
0345デフォルトの名無しさん
2006/01/21(土) 01:20:24スレッド使った方がすっきり書けるね。
手持ちのWin32システムサービスプログラミングって本に例が
載ってる。mutexを使って同期を取っているが、デッドロックの
回避にはWaitForMultipleObjects()を使ってる。
ま、この単純な方法では、スタベーション(飢餓状態)という
別の問題が発生するので、待機時間を無限ではなくて
タイムアウトを設定する事で回避しているね。
0346デフォルトの名無しさん
2006/01/21(土) 01:24:08そいつは哲学者の問題とは違ったニュアンスになるぞ。
Aばかり食いっぱなしになって、Bは飢え死にする。
ダイクストラが例えた哲学者の問題は、すべての者が
同様の権利を持つものだ。
0347デフォルトの名無しさん
2006/01/21(土) 01:29:23しとくから、後は自分で考えれ。
著作権の問題があるから本当はまずいんだが・・・・・・
0348デフォルトの名無しさん
2006/01/21(土) 01:41:29フローチャートでCのポインタを描くにはどのようにしたらいいですか?
例えば
*foo = *foo + 5;
だとどうなるのでしょうか。
よろしくお願いします。
0349デフォルトの名無しさん
2006/01/21(土) 01:42:570350デフォルトの名無しさん
2006/01/21(土) 01:43:410351デフォルトの名無しさん
2006/01/21(土) 01:45:510352デフォルトの名無しさん
2006/01/21(土) 01:46:090353デフォルトの名無しさん
2006/01/21(土) 01:46:54それはfoo+=5だろw
0354デフォルトの名無しさん
2006/01/21(土) 01:47:22ありがとうございます。
記号は処理を表す長方形でいいですか?
0355デフォルトの名無しさん
2006/01/21(土) 01:47:44fooがchar*とかだった場合な
0356デフォルトの名無しさん
2006/01/21(土) 01:47:49普通、フローチャートで型は指定しないよ
0357デフォルトの名無しさん
2006/01/21(土) 01:48:190358デフォルトの名無しさん
2006/01/21(土) 01:48:35あ・・・・・ボケたorz
0359デフォルトの名無しさん
2006/01/21(土) 01:49:29あ・・・確かにsizeof(型)分ずれるにしとこう
どっちにしろ間違ってるけど
0360デフォルトの名無しさん
2006/01/21(土) 01:49:430361デフォルトの名無しさん
2006/01/21(土) 01:50:210362デフォルトの名無しさん
2006/01/21(土) 01:51:30■ このスレッドは過去ログ倉庫に格納されています