C/C++の宿題を片付けます 75代目
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2006/10/19(木) 20:39:01【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して
投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。
【質問テンプレ】
[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] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
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++の宿題を片付けます 74代目
http://pc8.2ch.net/test/read.cgi/tech/1158844912/
【過去スレ一覧】
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
0478デフォルトの名無しさん
2006/10/29(日) 11:23:440479デフォルトの名無しさん
2006/10/29(日) 11:25:21具体的箇所(ry
0480デフォルトの名無しさん
2006/10/29(日) 11:30:29チャーなりキャラクターなり好きに呼べ
0481デフォルトの名無しさん
2006/10/29(日) 11:31:32[2]問題文:以下のプログラムを参考に、UNIXのgrepコマンド同様に1つ目の引数に示された文字列を持つ行を、2つ目の引数で示されたファイル内から抜き出して表示するプログラムを作ってください。
strlenght関数とstrinclude関数に関しては宣言だけで結構です。
int strinclude(char str1[], char str2[]){
int i, j;
int len1, len2;
len1 = strlength(str1);
len2 = strlength(str2);
if(len1 < len2)
return 0;
for(i = 0; i <= (len1 - len2); i++){
for(j = 0; j < len2; j++){
if(str1[i+j] != str2[j]){
break;
}
}
if(j == len2){
return 1;
}
}
return 0;
}
[3] 環境
[3.1] OS: WindowsXP
[3.2] gcc
[3.3] C言語
[4] 期限:本日中
よろしくお願いします。
0482デフォルトの名無しさん
2006/10/29(日) 11:38:420483デフォルトの名無しさん
2006/10/29(日) 11:58:25よし、じゃああえて標準関数で
>>481
/* 宣言だけで結構らしいので宣言だけする */
int strlenght(char[]);
int strinclude(char[],char[]);
#include<stdio.h>
#include<string.h>
int main(int argc,char**argv){
char*pattern;
char buf[1024];
int lineno;
if(argc <= 1)return 0;
pattern = argv[1];
if(argc > 2)freopen(argv[2],"r",stdin);
for(lineno=1;fgets(buf,sizeof buf,stdin);++lineno)
strstr(buf,pattern) && printf("%3d: %s",lineno,buf);
}
0484デフォルトの名無しさん
2006/10/29(日) 12:58:420485デフォルトの名無しさん
2006/10/29(日) 13:01:25>>473で問題ないよ
0486デフォルトの名無しさん
2006/10/29(日) 15:02:300487デフォルトの名無しさん
2006/10/29(日) 15:10:200488デフォルトの名無しさん
2006/10/29(日) 15:35:040489デフォルトの名無しさん
2006/10/29(日) 18:12:49main()
{
int *x;
*x=1;
printf("x=%o *x=%d\n",x,*x);
}
これを実行しろって問題なんだけど、コンパイルできませんでした。
なぜコンパイルできないのですか?
テンプレ無視ってスマソ
0490デフォルトの名無しさん
2006/10/29(日) 18:15:41return 0?
0491デフォルトの名無しさん
2006/10/29(日) 18:17:39こんなカンジかな。
#include <stdio.h>
int main(void)
{
int *x;
x=malloc(sizeof(int));
*x=1;
printf("x=%o *x=%d\n",x,*x);
free(x);
return 0;
}
0492デフォルトの名無しさん
2006/10/29(日) 18:21:46xがどこにも指定されてない。
#include<stdio.h>
int main()
{
int a=1;
int *x;
*x=a;
x=&a;
printf("x=%o *x=%d\n",x,*x);
return 0;
}
0493デフォルトの名無しさん
2006/10/29(日) 18:47:45俺の環境(gcc-4.1.1)ではコンパイルできた。
0494saga
2006/10/29(日) 19:21:26x=&a;
順番逆じゃない佐賀?
0495489
2006/10/29(日) 19:37:31どうなったんですか?
0496デフォルトの名無しさん
2006/10/29(日) 19:39:58セグメンテーション違反です (core dumped)
0497489
2006/10/29(日) 19:40:49それってどういう意味なんですか?
0498デフォルトの名無しさん
2006/10/29(日) 19:42:19プログラムが不正なメモリ操作をしたので強制終了、くらいの意味。
0499デフォルトの名無しさん
2006/10/29(日) 19:48:24*x=a;自体いらないんだぜ
0500デフォルトの名無しさん
2006/10/29(日) 19:55:34コンパイルエラーは?
まともなC89コンパイラなら通すはずだと思うんだが。
0501492
2006/10/29(日) 19:56:47#include<stdio.h>
int main()
{
int a=1;
int *x;
x=&a;
printf("x=%o *x=%d",x,*x);
return 0;
}
0502デフォルトの名無しさん
2006/10/29(日) 21:06:350503デフォルトの名無しさん
2006/10/29(日) 21:08:440504デフォルトの名無しさん
2006/10/29(日) 21:41:41普通は書き換える必要はありません。
0505デフォルトの名無しさん
2006/10/29(日) 21:41:50[2] 発生させた乱数の値に関して度数分布を求める関数を作る
関数 frequency( データ配列、データ配列の要素数、値の範囲、結果の配列、結果の配列の要素数)
とする。例えば、値の範囲が0〜100で、結果配列の要素数が20であれば、5刻みの区間で
その区間にある値をカウントする。つまり(0〜5、6〜10、11〜15.。。。。 96〜100)
のそれぞれの区間にあるデータの個数を結果として返す。
関数frequency内は、できるだけポインタを使ってきじゅつすること。以下雛形↓
#include <stdio.h>
int main( void )
{ int n;
int x[1024], f[20];
generate_dist( x , 1024, 100);
for(n=0; n<1024; n++) printf("%5d",x[n]);
frequency( x , 1024 , 100, f , 20);
puts("");
for(n=0; n<20; n++) printf("%5d",f[n]); }
int frequency( int x[], int numx, int r, int f[], int numy)
{
}
int generate_dist( int x[], int num, int r)
{ int *p;
for (p=x; p != &x[num] ; p++ ) {
*p = rand() % (r+1);
*p += rand() % (r+1);
*p += rand() % (r+1);
*p /= 3; } }
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc 3.4
[3.3] 言語: C
[4] 期限: 10月31日
[5] その他の制限:特になし
0506デフォルトの名無しさん
2006/10/29(日) 22:26:17#include <stdio.h>
#include <stdlib.h>
void frequency( int x[], int numx, int r, int f[], int numy);
void generate_dist( int x[], int num, int r);
int main( void )
{
int n;
int x[1024], f[20];
generate_dist( x , 1024, 100);
for(n=0; n<1024; n++) printf("%5d\n",x[n]);
frequency( x , 1024 , 100, f , 20);
puts("");
for(n=0; n<20; n++) printf("%d: %5d\n",n, f[n]);
return 0;
}
0507デフォルトの名無しさん
2006/10/29(日) 22:26:54void frequency( int x[], int numx, int r, int f[], int numy)
{
int i;
double tick = (double)r/numy;
for (i = 0; i < numy; i++) f[i] = 0;
for (i = 0; i < numx; i++) {
int n;
n = x[i]/tick;
f[n]++;
}
}
void generate_dist( int x[], int num, int r)
{
int *p;
for (p=x; p != &x[num] ; p++ ) {
*p = rand() % (r+1);
*p += rand() % (r+1);
*p += rand() % (r+1);
*p /= 3;
}
}
0508デフォルトの名無しさん
2006/10/30(月) 01:07:34[2]
# 2つの自然数 a, b に対し, a と b の最大公約数を求める関数 int gcd(int a, int b) を作成せよ.
# 2つの自然数 a, b に対し, その公約数をすべて表示する関数 void print_cd(int , int) を作成せよ.
※ 「a と b の公約数」は「a と b の最大公約数の約数」なので, gcd(a,b) を呼び出して 2 数の最大公約数 g を求めてその全約数を表示すればよい. i = 2, 3, …, g について i が g を割り切るかどうかテストし, 割り切ればそれを表示するようにする.
# main から gcd と print_cd を呼び出し, キーボードから入力した自然数 a, b に対して, 最大公約数とすべての公約数とを表示するようにせよ (表示形式は任意).
[3]
[3.1] winXP sp2
[3.2] cygwin
[3.3] C
[4] 23時59分
[5] 途中までやったんで続きお願いします。最大公約数は出せました
0509508
2006/10/30(月) 01:08:49void gcdprint(int,int);
int gcd(int,int);
int main (void)
{
int a,b;
printf("a bを入力して下さい>>");
scanf("%d %d",&a,&b);
gcdprint(a,b);
return 0;
}
void gcdprint(int a,int b)/*最大公約数を印字する関数*/
{
printf("%d\tgcd\t%d\t=\t%d\n",a,b,gcd(a,b));
}
int gcd(int a,int b)/*最大公約数を計算する関数*/
{
int z;
while((z=a%b)!=0)/*aをbで割った余りをzに代入し*/
{/*zが0以外のあいだにループする*/
a=b;/*aにbを代入し*/
b=z;/*bに余りzを代入する*/
}
return b;/*bに余りzを代入する*/
}
これに埋めて下さい。よろしくお願いします
0510デフォルトの名無しさん
2006/10/30(月) 01:58:440511デフォルトの名無しさん
2006/10/30(月) 02:55:02{
int g, i;
g = gcd(a, b)
printf("%d\tgcd\t%d\t=\t%d\n",a,b,g);
for (i = 1; i < g; i++)
{
if (g & i == 0)
{
printf("%d\n", i);
}
}
}
0512デフォルトの名無しさん
2006/10/30(月) 03:01:29void print_cd(int a, int b){
int c, i;
c=gcd(a, b);
for(i=1;i<=c;i++){
if(c%i==0)
printf("%d\n", i);
}
}
0513デフォルトの名無しさん
2006/10/30(月) 03:02:47void print_cd_recursive_call(int a, int b){
int c, i, j, k;
if(a==1){
printf("%d\n", b);
return;
}
for(i=2;a/i>=i;i++){
if(a%i==0){
c=a;
for(j=0;c%i==0;j++)
c/=i;
break;
}
}
if(a/i<i){
i=a;
j=1;
c=1;
}
for(k=0;k<=j;k++){
print_cd_recursive_call(c, b);
b*=i;
}
}
void print_cd(int a, int b){
int c;
c=gcd(a, b);
print_cd_recursive_call(c, 1);
}
0514デフォルトの名無しさん
2006/10/30(月) 12:33:02[2] 問題文(含コード&リンク):
1.入力した文章の半角スペースを改行に変換して表示せよ。
2.1の改行を削除し,文字を詰めて表示せよ
ex.
Hello World
ans1.
Hello
World
ans2.
HelloWorld
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン: Borland C
[3.3] 言語: C
[4] 期限: 10月30日まで
ご教授宜しくお願い致します。
0515デフォルトの名無しさん
2006/10/30(月) 12:48:54#include<stdio.h>
int main(void){
char c;
while(EOF != (c = fgetc(stdin))){
if(c == ' ') c = '\n';
if(c != '\n'){
printf("%c",c);
}
}
return 0;
}
0516デフォルトの名無しさん
2006/10/30(月) 12:49:56それだと「変換して」ないのでは?
0517515
2006/10/30(月) 12:49:58× char c;
○ int c;
0518デフォルトの名無しさん
2006/10/30(月) 12:50:07/* 問1 */
#include<stdio.h>
#define BUF_SIZE 1024
int main(void)
{
char buf[BUF_SIZE];
int i;
gets(buf);
for(i=0;buf[i]!='\0';i++)
{
if(buf[i]!=' ')
putchar(buf[i]);
else
putchar('\n');
}
return 0;
}
0519デフォルトの名無しさん
2006/10/30(月) 12:50:40/* 問2 */
#include<stdio.h>
#define BUF_SIZE 1024
int main(void)
{
char buf[BUF_SIZE];
int i;
gets(buf);
for(i=0;buf[i]!='\0';i++)
{
if(buf[i]!=' ')
putchar(buf[i]);
}
return 0;
}
0520デフォルトの名無しさん
2006/10/30(月) 15:00:57[2] 以下の文法を(Lexical analyze)字句解析するプログラムを作成せよ。
program --> declaration_list statement_list
declaration_list --> empty_string | declaration ; declaration_list
declaration --> VAR variable
variable --> a|b|c
statement_list --> statement | statement_list ; statement
statement --> variable := expression | PRINT variable
expression --> term | expression + term | expression - term
term --> integer | variable
integer --> digit | integer digit
digit --> 0 | 1
[3] 環境
[3.1] OS:Unix
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語: C
[4] 期限: 明後日まで
よろしくお願い致します。
0521デフォルトの名無しさん
2006/10/30(月) 18:12:07[2] 問題文(含コード&リンク):
(1)画面に繰り返し数を入力させるメッセージを表示し、キーボードから入力させる。
(2)画面に2つの整数を入力させるメッセージを表示し、キーボードから入力させる。
(3)画面に計算方法を2つ提示し、その中から1つを選択させる。
計算方法は四則演算、剰余、ビット演算のいずれか。
(4)選択された計算方法で、計算を行う。計算は関数を用いて行うこと。
関数には引数と戻り値があること。
(5)計算結果を画面に出力する。
(6)(2)に戻り、繰り返し数ぶん処理を繰り返す。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: cigwin
[3.3] 言語: C
[4] 期限: 11月10日
[5]if文、for文、関数まで習いました。
よろしくお願いします。
0522デフォルトの名無しさん
2006/10/30(月) 18:40:00http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2843.c
0523デフォルトの名無しさん
2006/10/30(月) 18:41:58def_func(sub,-)
def_func(mul,*)
def_func2(div,/)
def_func2(jouyo,%)
def_func(bit_and,&)
def_func(bit_or,|)
def_func(bit_xor,^)
↓
int add(int a, int b){return a + b;}
int sub(int a, int b){return a - b;}
int mul(int a, int b){return a * b;}
int div(int a, int b){if(b==0)return 0;return a / b;}
int jouyo(int a, int b){if(b==0)return 0;return a % b;}
int bit_and(int a, int b){return a & b;}
int bit_or(int a, int b){return a | b;}
int bit_xor(int a, int b){return a ^ b;}
0524デフォルトの名無しさん
2006/10/30(月) 18:50:490525デフォルトの名無しさん
2006/10/30(月) 19:30:41「置換」でなく「変換」しろとおっしゃいますか(;´Д`)
0526デフォルトの名無しさん
2006/10/30(月) 20:08:56[2] 問題文:
問題1@キーボードから姓と名を(別々に)入力して、文字列として結合して入力せよ。
(strcat()を使う?)
問題2@まず4桁の整数を入力する(要素数4の配列にそれぞれの桁を格納)
次に'\l'か十分な数だけ'\n'を出力(画面をスクロールアウトさせてクリアするため)
今度は別の人が4桁の整数を入力、入力に応じて、それぞれの桁の数字について
「位置も数字も当たっていればHを1つ」
「その数字は入っているけど位置が違うときはBを1つ出力」
当たるまで整数の入力を繰り返す。ただし何回かで終了してもよい。
当たったら、それまでの回数を表示。
問題3@4桁の数字を入力⇒1234(1234を入力)
ここで画面をスクロールアウト
他の人が4桁の数字を入力する
1回目:1352 ⇒ 1は場所を含めて正解、2と3は場所が違う。よって「H1B2」と出力
2回目:1235 ⇒ 1と2と3は場所を含めて正解。よって「H3B0」と出力
このようにH4B0になるまで繰り返させる(5回目で正解を表示して終了させる)
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C言語
[4] 期限: 無期限
0529デフォルトの名無しさん
2006/10/30(月) 22:31:58なお、許容誤差をε=10^-7とし、区間幅がεを下回ったところで計算を打ち切ること。
(for文とwhile文を使用すること)
0530デフォルトの名無しさん
2006/10/30(月) 22:45:24画面をスクロールアウトさせるのに必要な改行の数を書け。
>>529
>>1読め。
0532529
2006/10/30(月) 23:13:09[2] 問題文(含コード&リンク):10分法のアルゴリズムにより、x^3-10=0の非線形方程式の解を求めるプログラムを作成せよ。
なお、許容誤差をε=10^-7とし、区間幅がεを下回ったところで計算を打ち切ること。
[3] 環境
[3.1] OS:windows
[3.2] コンパイラ名とバージョン:borland 5.5
[3.3] 言語: C
[4] 期限: [無期限]
[5] その他の制限:for文とwhile文を使用すること
0533デフォルトの名無しさん
2006/10/30(月) 23:25:16#include<stdio.h>
int main(void)
{
const double eps = 10e-7;
double cube = 10.0;
double ans = 0.0;
double level = 1.0;
int i;
while(level>=eps){
for(i=1; i<=10; i++){
double temp = ans+i*level;
if(temp*temp*temp>cube){
ans += (i-1)*level;
level *= 0.1;
break;
}
}
}
printf("x = %f\n",ans);
return 0;
}
0534デフォルトの名無しさん
2006/10/30(月) 23:58:23[2] 問題文(含コード&リンク):
�@→http://proxy.f3.ymdb.yahoofs.jp/bc/7ac5f273/bc/Lesson3-1.doc?bc6hhRFB7BACroo3
�A→http://proxy.f3.ymdb.yahoofs.jp/bc/7ac5f273/bc/Lesson3-2.doc?bc6hhRFBRi2HG_cD
[3] 環境
[3.1] OS:Windows(XP)Home SP2
[3.2] コンパイラ名とバージョン:Visual Stdio.NET2005(C++)
[3.3] 言語:C言語
[4] 期限: [2006年11月1日のAM8:30まで]
[5] その他の制限:無し。�A>�@で優先。
0535デフォルトの名無しさん
2006/10/31(火) 00:05:16[2] 問題文(含コード&リンク):
「座席予約システム」を二種類のADTを用いて作成する。「座席予約システム」は(ある車両)の10人分の座席の予約を行うプログラムである。
次の七種類の命令を受け付ける。
a:予約を追加する
l:現在の予約状況を表示する
d:指定した座席番号の予約を取り消す
s:指定した予約社名の座席番号を表示する
e:指定した予約者名の予約を取り消す
h:ヘルプを表示する
q:終了する
一つ目のADTはseat_tで、個々の座席をあらわす。
typedef struct{
int occup;
char name[100];
}seat_t
seat_tに対して次の四つの操作を準備する。
1:void makeSeatEmpty(seat_t *sp)
spがさす座席を空席にする。座席がもともと空席の場合は何もしない
2:void makeSeatOccup(seat_t *sp, const char *nm)
spがさす座席をnmの名前で予約する。座席にすでに予約が入っている場合は、それまでの予約者名は消され、新しい予約者名nmを登録する
3:int isSeatEmpty(seat_t st)
座席stが空席かどうかを問い合わせる。空席なら1、予約済みなら0を返す。
4:const char *getSeatName(const seat_t *sp)
spが刺す座席の予約者名を返す
0536535の続き
2006/10/31(火) 00:07:08typedef struct{
int numres;
seat_t seat[10];
}
car_tに対する操作は次の四つ
1:void makeCarEmpty(car_t *cp)
cpでさす車両全体を空席にする
2:void dispCarStatus(car_t cr)
車両crの予約状況を表示する
3:int appendRsv(car_t *cp, const char *nm)
cpでさす車両に名前nmで予約を追加し、予約した座席番号を返す
4:void cancelRsv(car_t *cp, int sn)
cpでさす車両のsn番の座席の予約を取り消す
5:int searchRsv(car_t cr, const char *nm)
車両cr、予約者名nmの座席番号を返す。ただし見つからない場合は-1を返す。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: kterm
[3.3] 言語:C
[4] 期限: 2006年11月1日正午
0537デフォルトの名無しさん
2006/10/31(火) 00:20:39ADTって何だよ?
0538デフォルトの名無しさん
2006/10/31(火) 00:32:53階層的ADTってやつみたいです
0539デフォルトの名無しさん
2006/10/31(火) 00:37:49か?
0540デフォルトの名無しさん
2006/10/31(火) 00:39:34たぶん、ADTは構造体のことだと思います。
0541デフォルトの名無しさん
2006/10/31(火) 01:18:36理科大だな
0542デフォルトの名無しさん
2006/10/31(火) 10:58:21[2] 問題文:
問題 マウスの左ボタン右ボタンを押したときの左右それぞれの反応時間を
保存するプログラム
[3] 環境
[3.1] OS: WindowsXP
[3.2] C++ 6.0
[4] 期限: 11月4日
よろしくお願いします
0543デフォルトの名無しさん
2006/10/31(火) 12:19:41C++ 6.0?
0544デフォルトの名無しさん
2006/10/31(火) 12:31:54http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2855.c
0545544
2006/10/31(火) 13:11:39http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2856.c
0546デフォルトの名無しさん
2006/10/31(火) 13:31:52[2] 問題文: >>1のロダが使えなかったのでこちらに書きます
#include <stdio.h>
#include <stdio.h>
#include <math.h>
#define PI 3.14159
#define HABA 40
int main(void)
{
int a,b,c;
double i,s,t;
printf(" ?p?x ");
for(a=0; a<HABA; a++){
if(a==HABA/2){
printf("+");
}
else{
printf("-");
}
}
printf("\n");
for (t=0.0; t<=360.0; t+=18.0){
0547542
2006/10/31(火) 13:52:080548デフォルトの名無しさん
2006/10/31(火) 15:02:37クラスAからfriend指定したクラスBがあるとします(BからAのprivateメンバアクセスを許す)
この時、Bの派生クラスからもクラスAのprivateメンバにアクセス可能でしょうか?
0549デフォルトの名無しさん
2006/10/31(火) 15:12:000550デフォルトの名無しさん
2006/10/31(火) 15:55:00反応時間って何の反応時間?
もぐら叩きみたいな感じにするのか?
それとも、「マウス右クリック」→「メニュー」 がでるまでの時間とか?
マウスボタンを押した時刻を記録していくのか?
さっぱり分からん
0551デフォルトの名無しさん
2006/10/31(火) 16:04:4810分法について解説plz
解説してあるサイトの URL でもおk
0552デフォルトの名無しさん
2006/10/31(火) 16:08:03「サーバが見つかりませんでした」と出て問題文が見えないよ
0553デフォルトの名無しさん
2006/10/31(火) 16:11:46>>533 で答え出てる
0554デフォルトの名無しさん
2006/10/31(火) 17:33:27http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2857.c
0555デフォルトの名無しさん
2006/10/31(火) 17:41:52[2]
the shortest remaining time next (SRTN) job scheduling algorithm.
入力: 0 6
1 1
2 5
2 6
3 2
から以下の実行結果を出力するプログラムのrun_srtn関数を作成しプログラムを完成させよ。
*出力結果
Job 0 Arrival Time 0 Service Time 6
Job 1 Arrival Time 1 Service Time 1
Job 2 Arrival Time 3 Service Time 5
Job 3 Arrival Time 5 Service Time 6
Job 4 Arrival Time 8 Service Time 2
--- Scheduling Statistics ---
JOB # Arr Fin Svc TA
0 0 7 6 7
1 1 2 1 1
2 3 14 5 11
3 5 20 6 15
4 8 10 2 2
*{arr= arrival time, Fin = finish time,Svc =service time,TA= turn around time(finish-arrival_time)}
0556デフォルトの名無しさん
2006/10/31(火) 17:45:05typedef struct job {
int job_id; /* job id */
int arr_time; /* arrival time */
int srv_time; /* service time */
int rem_time; /* remaining time */
int finish; /* finish time */
int turn_around; /* turn around time */
struct job *prev, *next; /* pointer to the previous and next jobs in
the list */
} job;
job *front, *tail; /* front and tail pointers to the job queue */
void append_job();
void remove_job();
void run_srtn();
0557デフォルトの名無しさん
2006/10/31(火) 17:46:59char line[80];
int job_id =0;
int cur_time = 0;
int dat, svt;
job *tmp_job;
/* read delta arrival time and service time from stdin.
Allocate a memory chunk for a 'job' struct, which is pointed to by
tmp_job. Set arr_time and srv_time using the data read from stdin */
while(scanf("%d %d",&dat, &svt) != EOF){
tmp_job = malloc(sizeof(job));
tmp_job->job_id = job_id++;
tmp_job->arr_time = (cur_time + dat);
tmp_job->srv_time = svt;
/* initialized other fields of the job here */
cur_time += dat; /* advance the clock */
printf("Job %d Arrival Time %d Service Time %d\n", tmp_job->job_id,
tmp_job->arr_time, tmp_job->srv_time);
/* append the created job at the end of the list
append_job(tmp_job);*/
}
/* set finish, turn_around for each job in the queue,
and then print the job statistics*/
run_srtn();
/*use the following printf statements to write out the job scheduling
result.*/
printf("--- Scheduling Statistics ---\nJOB #\tArr\tFin\tSvc\t TA\tNTA \n");
printf("%3d\t %3d\t %3d\t %3d\t %3d\n",tmp_job->job_id,tmp_job->arr_time,tmp_job->finish,tmp_job->srv_time,tmp_job->turn_around);
}
0558デフォルトの名無しさん
2006/10/31(火) 17:48:40if( front == NULL ){
front = tmp_job;
tail = tmp_job;
}
else{
tail->next = tmp_job;
tmp_job->prev = tail;
tail = tmp_job;
}
}
void remove_job( job *tmp_job ){
job *l = tmp_job->prev, *n = tmp_job->next;
if( tmp_job == front ){
front = tmp_job->next;
front->prev = NULL;
}
else if( tmp_job == tail ){
tail = tmp_job->prev;
tail->next = NULL;
}
else{
l->next = n;
n->prev = l;
}
free( tmp_job );
}
void run_srtn(void){
}
0559デフォルトの名無しさん
2006/10/31(火) 17:49:57[3.1] OS:Unix
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語: C
[4] 期限:今週中
連続カキコ失礼しました。よろしくお願いします。
0560デフォルトの名無しさん
2006/10/31(火) 18:04:59マウスボタンを押したときの時刻じゃないかなと勝手な想像妊娠
0561デフォルトの名無しさん
2006/10/31(火) 18:05:03void append_job( job *tmp_job )
void remove_job( job *tmp_job )
のバグは放っておいておk?仕様?っていうかバグ取りしろってか!
0562デフォルトの名無しさん
2006/10/31(火) 20:13:39バグもあるんですか・・・。
run_srtn関数だけじゃなくプログラム全体を修正する問題みたいです
0563デフォルトの名無しさん
2006/10/31(火) 20:39:010564542
2006/10/31(火) 20:52:41課題は 部屋に3台のスピーカーが左、中、右と配置されています
音は3回出ますが、
真中のスピーカーから2回音が鳴り、3回目で左右どちらか
から音が鳴ります もし左から音がすれば、マウス左ボタンを
右の音なら右ボタンを押します この時、3番目の音と
マウスを押したときの反応時間を出す課題です
どなたか分かりますか? おそらく、プロシージャーを
変えると出来る?と思うのですが。。。よろしくお願いします
0565デフォルトの名無しさん
2006/10/31(火) 21:05:54stringのコンストラクタにcharだけを受け取るものがある。
explicitは付いていないのでキャスト演算子も可。
0566デフォルトの名無しさん
2006/10/31(火) 21:11:14音を出す制御は必要無い?もし必要なら適当なダミーの関数いれたほうがいい?
それともマウスボタンをクリックした時刻を記録するだけでおk?どっち?
例.
enum{SPEAKER_CENTER, SPEAKER_RIGHT, SPEAKER_LEFT};
sound(SPEAKER_CENTER);
みたいなのをいれるか?ってこと
クリックのイベントを取るのは適当なウインドウを作って、ウインドウでのイベント取得でいいの?
それともAPIフックして、PCで他の作業中(ワープロ打ちながらとか)であっても反応しないとダメ?
専用のウインドウを作るとしたら全画面?サイズ指定あり?
>>564 の書き方からすると、元になるソースコードがありそうだけどアップロードできない?
0567デフォルトの名無しさん
2006/10/31(火) 21:13:14クラスじゃなくて、stringか何かのメソッドでありますでしょうか?
0568デフォルトの名無しさん
2006/10/31(火) 21:14:210569デフォルトの名無しさん
2006/10/31(火) 21:22:15>>565 氏が書いてあるけど、コンストラクタじゃだめなの?
0570デフォルトの名無しさん
2006/10/31(火) 21:36:36要求定義を聞き出すのって難しい・・・
0571デフォルトの名無しさん
2006/10/31(火) 21:49:27よろしくお願いします。
0572デフォルトの名無しさん
2006/10/31(火) 21:50:58>>1
0573デフォルトの名無しさん
2006/10/31(火) 22:00:15意味がわからんので適当に超解釈を入れて書いた。
もし、超解釈が希望と違ってもめんどいからなおさん。
#include<vector>
#include<iostream>
#include<algorithm>
#include<iterator>
using namespace std;
struct Data{
string name,addr,tel;
int age;
};
istream&operator>>(istream&cin,Data&d){return cin>>d.name>>d.addr>>d.tel>>d.age;}
ostream&operator<<(ostream&cout,const Data&d){return cout<<d.name<<" "<<d.addr<<" "<<d.tel<<" "<<d.age;}
int main(){
vector<Data>a;
copy(istream_iterator<Data>(cin),istream_iterator<Data>(),back_inserter(a));
copy(a.begin(),a.end(),ostream_iterator<Data>(cout,"\n"));
}
0574デフォルトの名無しさん
2006/10/31(火) 22:01:24[2] 問題文(含コード&リンク):STLを用いて、名前、年齢、住所、電話番号を入力、格納、出力ができるプログラムを作れ。(STLは何をしようしてもよい)
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン: VC++EE
[3.3] 言語: C++
[4] 期限: 来週の月曜日
[5] その他の制限: STLはvector, list の基本的なことをならいました。クラスは使ってお願いします。
0575デフォルトの名無しさん
2006/10/31(火) 22:29:55入力、格納、出力だけでいいのかな。
iostream 使ったの久しぶりだ…
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2858.txt
0576デフォルトの名無しさん
2006/10/31(火) 23:09:10ありがとうございます!!
これで宿題は完成しました。
感謝☆
0577542
2006/10/31(火) 23:14:13音を出す制御は完成しています。 適当なダミー関数は入れても大丈夫です
三番目の音を基準に0とし、マウスのボタンが押されるまでのわずかな時間です.
>enum{SPEAKER_CENTER, SPEAKER_RIGHT, SPEAKER_LEFT};
>sound(SPEAKER_CENTER);
>クリックのイベントを取るのは適当なウインドウを作って、ウインドウでのイベント取得でいいの?
はい、それで良いです。
>専用のウインドウを作るとしたら全画面?サイズ指定あり?
特に指定はありません。全画面で無くても良いです。マウスでの反応時間
を取っている間はPCは使われない事とします。
実はほぼプログラムは出来ていますが、アップロードのやり方が分かりません
全文載せようとしても文字数オーバーになってしまいます。どうしたらよろしいでしょうか?
説明不足ですがよろしくお願いします Eメールアドレス 載せときます
■ このスレッドは過去ログ倉庫に格納されています