トップページ⇒tech
1001コメント387KB

C/C++の宿題を片付けます 58代目

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2006/01/18(水) 03:35:45
あなたが解けないC言語/C++言語の宿題を片付けもらうスレッドです。気に入らない質問やその他や発言はスルーの方向で。
【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して
 投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。
【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):
[3] 環境
 [3.1] OS: (Windows/Linux/等々)
 [3.2] コンパイラ名とバージョン: (gcc 2.9 VC 6.0等)
 [3.3] 言語: (C/C++/どちらでも可 のいずれか)
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)

【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
【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
0232デフォルトの名無しさん2006/01/20(金) 03:10:09
>>231
#include <stdio.h>

int kaijo(int n)
{
    if (n==1)
        return 1;
    return kaijo(n-1)*n;
}

int main()
{
    int n,ans;
    scanf("%d", &n);
    ans=kaijo(n);
    printf("%d\n", ans);
    return 0;
}
0233名無し2006/01/20(金) 03:16:49
[1] 授業単元:再帰法と分割統治法
[2] 問題文:[入力]32個の異なる二桁の自然数[操作]32個の自然数の中で最大値(MAX)と最小値(MIN)を求める。
[出力]入力データ、最大値(MAX)と最小値(MIN)
[説明]入力された32個のデータを配列に記憶。記憶された32個のデータを集合と考え、配列の添数(インデックス index) m,n(m<nを仮定)を
使って配列のm番目からn番目までのデータを含む部分集合は添数を使って(m,n)で表せる。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:[2006年1月22日9:00まで]
[5] その他の制限:
0234デフォルトの名無しさん2006/01/20(金) 03:21:03
最小値と最大値を取り出すのではなく
求めるっつーことはソートの関数作れって事でしょ

バブルソートなんかは簡単だから自分で作ってみなさいな
0235デフォルトの名無しさん2006/01/20(金) 03:24:08
>>234
単元が分割統治と再帰だからソートを実装するのが
求められてるのだとしたら、バブルじゃなく
クイック・マージが妥当だろ
0236デフォルトの名無しさん2006/01/20(金) 03:26:23
問題の粒度を小さくするならマージかクイックが最適だな
0237デフォルトの名無しさん2006/01/20(金) 03:35:47
ところでなんで231のは7!以上は駄目なのだろうか

0238デフォルトの名無しさん2006/01/20(金) 03:41:32
>>237
オーバーフローじゃね?
確か16bit整数型だと8!でオーバーフロー起こす
もっともそれでも7!がダメな理由が分からんが

それにlongや(C99なら)long long使えばもっと伸びるしな
0239デフォルトの名無しさん2006/01/20(金) 10:59:27
宿題全然関係ないけどBCCでlong long int て使えないの?
0240デフォルトの名無しさん2006/01/20(金) 11:50:03
つかえね。
0241デフォルトの名無しさん2006/01/20(金) 12:30:49
[1] 授業単元: C言語プログラミング
[2] 問題文
学生20人の成績を入力すると、上位5人の成績・全体の平均点・
最低点を出力するプログラムを作成せよ。
[3] 環境
 [3.1] WindowsXP
 [3.3] C言語
[4] 期限: 1月22日午前10時
[5] その他の制限: 初心者なのでできるだけ簡単な方法でお願いします。
理解できるのは、if,for,while,配列,関数がかろうじて少し…といった
レベルです。

どなたかよろしくお願いします!!
0242デフォルトの名無しさん2006/01/20(金) 12:44:19
[1] 授業単元:情報処理
[2] 問題文:符号なし16進数を文字列s[]に変換する関数ItoH(n,s)を作りなさい。
     nを16で割った余りが16進数の一番低位の数となります。これを'0'〜'9'または'A'〜'F'
     の文字に変換します。次に16で割った商を新しいnとして上の変換を繰り返していきます。
     できあがった文字列は、逆順に並んでいますので、文字列の順序を入れ替えていきます。
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: bcc
 [3.3] 言語: C
[4] 期限: 一時間以内でお願いします。
[5]<string.h>を使ってください。
おながいします
0243デフォルトの名無しさん2006/01/20(金) 12:45:58
>>241
(゚Д゚)ノ ァィ
#include<stdio.h>
int main(void){
int ten[20],i,k,c;
float s=0.0;
for(i=0;i<20;i++){
scanf("%d",&ten[i]);
s += ten[i];
}
s /= 20;
for(i=0;i<5;i++)
for(k=19;k>i;k--)
if(ten[k]>ten[k-1]){
c = ten[k];
ten[k] = ten[k-1];
ten[k-1] = c;
}
for(i=0;i<5;i++)
printf("%d\n",ten[i]);
printf("平均点:%f点\n",s);
return 0;
}
0244デフォルトの名無しさん2006/01/20(金) 13:06:31
>>242
さ〜て間に合うかな(・∀・)ニヤニヤ
0245デフォルトの名無しさん2006/01/20(金) 13:09:20
13時44分辺りにうpるか
0246デフォルトの名無しさん2006/01/20(金) 13:16:47
>>242
<string.h>ってどこに使うんだ?
0247デフォルトの名無しさん2006/01/20(金) 13:17:16
sprintf使えば1行で出来るな…
0248デフォルトの名無しさん2006/01/20(金) 13:20:03
>>247
ッシ!!
0249デフォルトの名無しさん2006/01/20(金) 13:23:04
作ってみたがstring.hの使いどころが分らないw
無理やり使えないことはないが何か違う気がする
0250デフォルトの名無しさん2006/01/20(金) 13:25:24
sprintfはともかくとして
string.h使うならC++まで拡張して逆方向反復子が使えて便利だったのに
0251デフォルトの名無しさん2006/01/20(金) 13:26:05
string.hを使ってstrrevを使わせたいみたいです。
0252デフォルトの名無しさん2006/01/20(金) 13:36:36
文字列反転の関数Cにあったのか・・・
02532412006/01/20(金) 13:38:40
>243
素早い回答ありがとうございます!
もうお返事あるとは思わず少し感動…。
なのですが、これだと上位5人の成績表示されないと思うのですが…
どう直せばよいのかも分からずorz

すみません、どなたかお願いします!!
0254デフォルトの名無しさん2006/01/20(金) 13:44:21
>>253
あれでおkだよ。ソートしてんじゃん。
0255デフォルトの名無しさん2006/01/20(金) 13:45:06
>>253
(゚Д゚)ノ 悪い最低点忘れてたw
#include<stdio.h>
int main(void){
int ten[20],i,k,c;
float s=0.0;
for(i=0;i<20;i++){
scanf("%d",&ten[i]);
s += ten[i];
}
s /= 20;
for(i=0;i<19;i++)
for(k=19;k>i;k--)
if(ten[k]>ten[k-1]){
c = ten[k];
ten[k] = ten[k-1];
ten[k-1] = c;
}
puts("上位点");
for(i=0;i<5;i++)
printf("%d\n",ten[i]);
printf("最低点:%d\n",ten[19]);
printf("平均点:%f点\n",s);
return 0;
}
0256デフォルトの名無しさん2006/01/20(金) 13:46:17
>>242
そろそろ行くか
#include<stdio.h>
#include<string.h>
void ItoH(int,char*);
void ItoH(int n,char *s){
char str[]="0123456789ABCDEF";
int i=0;
do{
s[i] = str[n%16];
n = n/16;
i++;
}while(n>0);
s[i] = '\0';
strrev(s);
}
int main(void){
char s[256];
int n;
printf("数字入力:");
scanf("%d",&n);
ItoH(n,s);
printf("%s\n",s);
return 0;
}
0257デフォルトの名無しさん2006/01/20(金) 14:45:06
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
   ファイル名をコマンドラインで指定し、その内容を256バイトずつ1ブロックとして、16進と文字列形式でダンプ出力した上で、その内容を16進コードで更新するプログラムを作る。
ただし表示ブロック位置(先頭を0とする)はキーボードから入力するものとして、負値またはエンターキーのみが入力させるまで続ける。ブロック内の更新データの先頭はアドレスは16進で入力する。
更新データは2桁で1バイトの16進データを入力する。

:実行例:

a:\e12345.exe e12345.c
BLNo.->2
000200: 64 69 2e ・・・・・・・・・・・・・・ 63 28 dio.h>・v oid spc(
000210: 69 6e 74 ・・・・・・・・・・・・・・ 28 6e int n)・{ ・・if ((n

         |||途中省略|||

0002f0: 0a 09 7d ・・・・・・・・・・・・・・ 29 3b ・・}・・fcl ose(fi);
ADR->12
DATA->a1a2a4
000200: 64 69 2e 68 3e・・・・・・・・・・・ 63 28 dio.h>・v oid spc(
000210: 69 6e a1 a2 a4 ・・・・・・・・・・ 28 6e int n)・{ ・・if ((n

         |||途中省略|||

0002f0: 0a 09 7d 0a 09・・・・・・・・・・・ 29 3b ・・}・・fcl ose(fi);
DATA->_
ADR->_
Change OK?->y
BLNo.->
[3] 環境 Windows C言語
[4]2006/01/20 18:00まで
0258デフォルトの名無しさん2006/01/20(金) 14:54:18
>>257
ttp://pc8.2ch.net/test/read.cgi/tech/1136768567/409
02592562006/01/20(金) 15:11:53
ここまで自力で考えました。
これをいじれば出来ると思うのですが上手くいきません。
お願いします。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.cgi?mode=thr&no=1512
0260デフォルトの名無しさん2006/01/20(金) 15:19:39
五目並べ作れって言われたんですがどうすればいいんでしょう
0261デフォルトの名無しさん2006/01/20(金) 15:21:00
>>259
なんで単発スレ立ててるんだよ
もうくるな
0262デフォルトの名無しさん2006/01/20(金) 15:24:01
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
   ファイル名をコマンドラインで指定し、その内容を256バイトずつ1ブロックとして、16進と文字列形式でダンプ出力した上で、その内容を16進コードで更新するプログラムを作る。
ただし表示ブロック位置(先頭を0とする)はキーボードから入力するものとして、負値またはエンターキーのみが入力させるまで続ける。ブロック内の更新データの先頭はアドレスは16進で入力する。
更新データは2桁で1バイトの16進データを入力する。

:実行例:

a:\e12345.exe e12345.c
BLNo.->2
000200: 64 69 2e ・・・・・・・・・・・・・・ 63 28 dio.h>・v oid spc(
000210: 69 6e 74 ・・・・・・・・・・・・・・ 28 6e int n)・{ ・・if ((n

         |||途中省略|||

0002f0: 0a 09 7d ・・・・・・・・・・・・・・ 29 3b ・・}・・fcl ose(fi);
ADR->12
DATA->a1a2a4
000200: 64 69 2e 68 3e・・・・・・・・・・・ 63 28 dio.h>・v oid spc(
000210: 69 6e a1 a2 a4 ・・・・・・・・・・ 28 6e int n)・{ ・・if ((n

         |||途中省略|||

0002f0: 0a 09 7d 0a 09・・・・・・・・・・・ 29 3b ・・}・・fcl ose(fi);
DATA->_
ADR->_
Change OK?->y
BLNo.->
[3] 環境 Windows C言語
[4]2006/01/20 18:00まで

ここまで作りましたhttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.cgi?mode=thr&no=1512
0263デフォルトの名無しさん2006/01/20(金) 15:24:47
意味がわからんからやらない
0264デフォルトの名無しさん2006/01/20(金) 15:25:34
ageてるからやらない
0265デフォルトの名無しさん2006/01/20(金) 15:26:28
>>264!目欄!目欄!
0266デフォルトの名無しさん2006/01/20(金) 15:28:38
fprintf(>>262."%s"."氏ね");
0267デフォルトの名無しさん2006/01/20(金) 15:29:03
[1] 授業単元:C言語プログラミング
[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
>>268
だから 意味が分らない=できない
のつもり^^;
0270デフォルトの名無しさん2006/01/20(金) 15:30:38
はいはい
0271デフォルトの名無しさん2006/01/20(金) 15:32:37
>>262
英数字だけ?
それとも2バイト文字も含む訳?
0272デフォルトの名無しさん2006/01/20(金) 15:33:15
レスナンバー間違った
>>271::>>262 → >>267
0273デフォルトの名無しさん2006/01/20(金) 15:39:34
/* 名前はテケトー */
int 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
>>262
前スレで作ってもらったのは無視?
ttp://pc8.2ch.net/test/read.cgi/tech/1136768567/409
0275デフォルトの名無しさん2006/01/20(金) 15:42:45
>>268
できない

これでええか?
0276デフォルトの名無しさん2006/01/20(金) 15:57:39
>>273 惜しい
int 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:11
あんたらt[]に文字入れる気無しですか
0278デフォルトの名無しさん2006/01/20(金) 16:07:48
>>277 気づいたら直してあげなよ・・・

int 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:35
ところで
char配列をqsortして
値が大きくなったらカウンターの数をインクリメントするってのは駄目?
0280デフォルトの名無しさん2006/01/20(金) 16:17:12
>>278
今携帯なんでw
0281デフォルトの名無しさん2006/01/20(金) 16:19:19
>>279
有りだろ
むしろそっちの方がわかりやすくね?
0282デフォルトの名無しさん2006/01/20(金) 16:19:42
ダヨネ
0283デフォルトの名無しさん2006/01/20(金) 16:21:23
おもしろそうだから、レッツ・トライ!>>279
0284デフォルトの名無しさん2006/01/20(金) 16:23:38
一度作ったんだけど何か回答出てたんでソース消しちゃったよ(´・ω・`)
0285デフォルトの名無しさん2006/01/20(金) 16:42:09
俺が情報系の教官だったらこのスレチェックするなあ。

ところで、ときどきVisualC++でっていう指定があるけど、
学校のコンピュータに入ってんのかな?
0286デフォルトの名無しさん2006/01/20(金) 16:47:12
>>285
俺が教官でも最低限、自分の担当する言語の宿題スレは確認するな

VC++なんて入れたらとんでもない金掛かると思うがな
まぁ入ってるところもあるんじゃねーの
俺の所はおそらくずっとLinux(GCC)だろうが
0287デフォルトの名無しさん2006/01/20(金) 16:52:30
vcを全端末に入れると金かかるよね。
gcc,g++,borland c++だったら、ただだから
たいていの教育機関にはこれらが入ってると思う。
てか、初心者はプログラムの本質学ぶのが目的だから
vc使わなくてもいいような気もする・・・
0288デフォルトの名無しさん2006/01/20(金) 16:52:52
[1] 授業単元:情報処理[2] 問題文:
#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
>>286
うちの大学は全てのPCにVS.NETが入ってる
しかも授業ではCPadを使う
0290デフォルトの名無しさん2006/01/20(金) 17:01:24
>>289
ちょwww
どこの大学?
うち国立だけど、pascal、gcc、lisp、prologなんか入ってるOTZ
0291デフォルトの名無しさん2006/01/20(金) 17:03:42
うちは Mac だし国立でも私立でも専門でもいろいろあるんじゃないの?
0292デフォルトの名無しさん2006/01/20(金) 17:06:04
>>287
むしろ初心者にVCなんて使わせたら、悪影響な気がするがな
VCの補助機能は確かに便利だが、純粋にプログラミングの
本質的な部分を覚えるのにはかえって邪魔になる

>>290
俺も国立だが、gpc/gcc/g++/csccなんかが入ってるな
0293デフォルトの名無しさん2006/01/20(金) 17:14:38
うちは高専だが全部にVC++が入ってるな
0294デフォルトの名無しさん2006/01/20(金) 17:17:35
お兄さんの大学BASICと汗だけだった('A`;) ...
0295デフォルトの名無しさん2006/01/20(金) 17:20:24
VC だと、ヘッダファイルの変さを我慢すると、標準入出力を使う
コンソールアプリケーションのトレースができたりする。
0296デフォルトの名無しさん2006/01/20(金) 17:22:25
【質問テンプレ】
携帯からの書き込みですのでコピペできませんでした
C言語
期限 今日の19時頃まで
問い 整列済みデータを二分木で表現
整列済みデータは乱数を発生させて自分でソート って感じで…

もしできたら
二分木から指定した値を検索するプログラムも…
ょろしくです(>_<)
0297デフォルトの名無しさん2006/01/20(金) 17:42:34
携帯電話にコンパイラとデバッガはついていません
0298デフォルトの名無しさん2006/01/20(金) 17:58:13
>>290
地元の私立大学
偏差値は低いが金は有り余ってる
0299デフォルトの名無しさん2006/01/20(金) 18:11:22
違法コピーを通報しますた。
0300デフォルトの名無しさん2006/01/20(金) 18:34:20
うちの大学のPCにも全部VS.NETとか入ってたな。
っていうか、夏休みが終わって学校に行ってみたら100台くらいのPCがPen4 3.2G、メモリ768MB、WinXPに総入れ替えしてあったりしたし
0301デフォルトの名無しさん2006/01/20(金) 19:21:38
>>295
> VC だと、ヘッダファイルの変さを我慢すると、標準入出力を使う
> コンソールアプリケーションのトレースができたりする。
それってgdbとかでは出来ないの?
0302デフォルトの名無しさん2006/01/20(金) 19:23:56
>>301
gdb ってエディタと連動してたっけ?
0303デフォルトの名無しさん2006/01/20(金) 19:30:19
>>300
えらく豪勢なPCだな・・・('A`)
俺の所はDELLのPen4(2GHz程度っぽい)に入ってたXPをわざわざ消して
VineLinux入れてある

まぁ開発用途で使う俺らにとってはXPより使いやすいんだがな
0304デフォルトの名無しさん2006/01/20(金) 19:31:16
>302
emacsなら可。 よく知らんがリモートデバッグ機能使えば、いろいろできるかもしれん。

>296
二分探索木の挿入とトラバース、探索だな。
0305デフォルトの名無しさん2006/01/20(金) 21:01:03
[1] 授業単元:プログラミングのレポート
[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:30
>>305
BitBltなら幅を負数にする。
0307デフォルトの名無しさん2006/01/20(金) 22:22:30
[1] 授業単元:プログラミング1
[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
下旬っていつだよ
0309 ◆wa2f.aihh2 2006/01/20(金) 22:31:14
[1]授業単元:プログラミング
[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
[1] 授業単元:OSの基礎
[2] 問題文(含コード&リンク):哲学者の食事の説明と解決策
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語:C
[4] 期限: 今日中
[5] その他の制限:ありません。よろしくお願いします。
0311名無し2006/01/20(金) 22:34:44
>>233をよろしくお願いします。
0312デフォルトの名無しさん2006/01/20(金) 22:39:17
>>309
(1)はコマンドプロンプトなのに画面に表示と言う辺りが無理だな。
どうやって画面に表示するのか教わっているならその情報を提示しろ。
(2)も、標準入出力でいいのかWinAPIを使うのか、printf()などを使うのかcoutを使うのか、
はっきりしないことには手を出しにくいし。
0313デフォルトの名無しさん2006/01/20(金) 22:41:16
>>312
馬鹿?
0314デフォルトの名無しさん2006/01/20(金) 22:41:34
馬鹿はお前
0315デフォルトの名無しさん2006/01/20(金) 22:42:50
>>310
「哲学者の食事の問題」のどこがCと関係あるんだ?
つーか、ぐぐればわかることだろ。
0316デフォルトの名無しさん2006/01/20(金) 22:43:34
>313=309か?
恥の上塗りだな。
0317デフォルトの名無しさん2006/01/20(金) 22:43:46
>>314
問題よく読めよ馬鹿
0318デフォルトの名無しさん2006/01/20(金) 22:44:54
>>233 最小を求める部分だけ。
int 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:59
あ、ウソあった。・・・まあ、いいや。
0320デフォルトの名無しさんNGNG
>>315
書き込んでしまった後に気付いた。スレ違いスマソ
0321 ◆wa2f.aihh2 2006/01/20(金) 22:56:59
>>312
�@やり方は教わってません。これは普通に考えたらできないって話ですかね
�Aprintfでお願いします。WinAPIとcoutは習ってません
0322デフォルトの名無しさん2006/01/20(金) 22:57:25
>>310 説明。
哲学者が食事をしようと、食材を入れた箱を開けようとする。
ふと哲学者の脳裏にひょっとして、あけたらまずいんちゃうか? という思いがかすめる。
けっこう前のだし・・・・。
箱を開ければ状態は確定するが、箱を開ける前、
箱の中の状態は食べられるものか食べられないものかの状態が入り混じっている。
・・・って、こんなんじゃなかったっけ?

解決策は、箱を開けるとヤバイかもしんないので、箱は絶対に開けない。
0323デフォルトの名無しさん2006/01/20(金) 23:05:43
>>321
�@普通に考えたら
(0.1,0.6) (0.2,0.7) (0.3,0.8) (0.4,0.9) (0.5,0.0)
のような表示を出せばいいだけだろうな
�A言語がCならAPIだのcoutなんて言い出さないよな
0324 ◆wa2f.aihh2 2006/01/20(金) 23:15:33
>>323
その解釈であってると思います。レスありがとうございます

どなたかお願いします
0325デフォルトの名無しさん2006/01/20(金) 23:22:15
>>322
シュレディンガーのぬこかよ!
0326デフォルトの名無しさん2006/01/20(金) 23:23:27
>>322
シュレーディンガーの猫?
03272412006/01/20(金) 23:28:02
>255
このスレ回転速いですね…;
お礼遅くなってすみません、ありがとうございました!
0328デフォルトの名無しさん2006/01/20(金) 23:35:59
哲学者の食事って、アレじゃないの?
フォークとナイフが2人分しか用意されてない四角のテーブルに
4人の哲学者が座り、瞑想を終えた哲学者からさっさとフォーク、ナイフ
を取って食事を始めるって奴。

デッドロックのシミュレーションだと思う。要するに、デッドロックが起きない
ようにうまくプログラムをせよって事か?
0329デフォルトの名無しさん2006/01/20(金) 23:42:36
>>324
(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
>>328
それです。哲学者のルーチンを二つに分けて考えようとしたのですが、これは反則ですか?
Aは周りを気にせず自己中に食いたいときに食う。
Bは隣が食ってたら終わるまで待つ。
といった感じに。
0331デフォルトの名無しさん2006/01/20(金) 23:50:49
>>310
説明:
おなかをすかせた哲学者が角を曲がったところ、100メートル先に焼きいも屋をハケーン。
小カール君にもすんでのところで勝てそうだった経験のある哲学者は50メートル6秒フラットの俊足。
一方、リアカー商いの焼きいも屋のおじいさんは足取りも重く6秒で3メートルも進めたらいいとこ。
しかし哲学者が焼きいも屋を最初に見かけたところまでたどりつくと、
耳の遠いおじいさんはこちらの呼びかけにも気づかず5メートルほど先に行ってしまった。
あわてて哲学者がそこまで追いついても、その頃にはおじいさんはおじいさんなりのペースでまた先に。
哲学者とおじいさんの速さの比を20:1とすると、
哲学者がおじいさんがいたところにたどりつくたびに、おじいさんはその20分の1だけ先に行っていることになり、
哲学者は永遠に焼きいもを食べられない…って問題。

解決策:
宇宙は閉じているので全く反対方向に走れば
しばらくすると正面をこちらむきに歩いてくるおじいさんと出会うことになる。

■ このスレッドは過去ログ倉庫に格納されています