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

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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2006/12/24(日) 23:17:00
あなたが解けない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] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)

【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
【C 関数検索 man on WWW】
http://www.linux.or.jp/JM/index.html
【過去ログ検索】
http://chomework.sakura.ne.jp/
【wiki】
http://www23.atwiki.jp/homework/
【前スレ】
C/C++の宿題を片付けます 79代目
http://pc8.2ch.net/test/read.cgi/tech/1165943509/
0002デフォルトの名無しさん2006/12/24(日) 23:22:04
2げとずさー
0003デフォルトの名無しさん2006/12/24(日) 23:25:18
3げと
0004デフォルトの名無しさん2006/12/25(月) 21:47:27
ttp://www.bohyoh.com/CandCPP/C/Library/srand.html
http://pc8.2ch.net/test/read.cgi/tech/1165943509/987
誰だよ、srandにstdlib.hはCなら無くてもコンパイルできるはずだが。とか言っている
無知講師は?w
0005デフォルトの名無しさん2006/12/25(月) 21:48:09
[1] 数値解析応用
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3281.zip
※スキャナで取ってjpgにしたため、zipに圧縮したうえでろだにあげました。

[3] 環境
 [3.1] OS:Linux RedHat9.0
 [3.2] コンパイラ名とバージョン: gcc(バージョン不明...)
 [3.3] 言語: C言語
[4] 期限:2006年12月31日23:00まで(2006年12月31日23:59までにメール提出となっています)
[5] その他の制限: ライブラリは#include<math.h>のみでお願いします。


よろしくお願いします。
000652006/12/25(月) 21:49:04
スマソ
乱数が必要なので、標準関数も必要です。
よろしくお願いします
0007デフォルトの名無しさん2006/12/25(月) 22:18:55
>>4
その無知講師とやらが誰だか知らんけど、コンパイルできるはずだよ。
Cではプロトタイプ宣言必須じゃないからね。C++では必須だけど。
0008デフォルトの名無しさん2006/12/25(月) 22:33:53
>>7
>はずだよ
はっきりしないね、出来るなら出来るってなぜ実演して確信をもって答えないんですか?
0009デフォルトの名無しさん2006/12/25(月) 22:34:21
>>4
そこに書かれているのは srand のプロトタイプが
stdlib.h に書かれている、ということだけ。

定義されていない関数であっても ISO 9899:1989 3.3.2.2、
implicit function declaration で定義されていない関数の
呼び出しは適当に解釈されることが保証されている。

# ISO 9899:1999 ではこの機能は撤廃されたので
# >>7 も必ずしも正しいとはいえない。
0010デフォルトの名無しさん2006/12/25(月) 22:37:56
昔はできたってだけの話だろ
0011デフォルトの名無しさん2006/12/25(月) 22:39:06
>>10
現実問題としてC89を受け付けないCコンパイラは存在しないし
C99を受け付けないコンパイラも多い

未だに一番よく使われてるCはC89だよ
0012デフォルトの名無しさん2006/12/25(月) 22:41:43
http://search.yahoo.co.jp/search?p=srand+stdlib.h&ei=UTF-8&fr=moz2&rls=org.mozilla:ja-JP:official
srand使っているものはstdlib.hを入れているものばかりだ罠
0013デフォルトの名無しさん2006/12/25(月) 22:43:00
そりゃ、C89でプロトタイプ宣言取り込まないのは決して「良いスタイル」
ではないからな。
んでも、コンパイルできるできないって話とは次元が違うよ。
0014デフォルトの名無しさん2006/12/25(月) 22:45:51
UNIXでgcc使ってたときはstdlib.hを入れたけどなぁ。
0015デフォルトの名無しさん2006/12/25(月) 22:46:36
普通は入れる。それが良いスタイル。
入れなくともコンパイルはできるけど。
そんだけの話。
0016デフォルトの名無しさん2006/12/25(月) 23:07:04
>>5
とりあえず一つ目の課題だけ
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3282.txt
0017デフォルトの名無しさん2006/12/26(火) 00:15:06
>>5
課題Bです。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3283.txt

但し、このプログラムの内容はホームページ
http://www.asahi-net.or.jp/~UC3K-YMD/Lesson/Section03/section03_09.html
の内容を参考にしました。
(参考にしました、と言うよりほとんど同じ(^^;))
00189222006/12/26(火) 03:53:17
>>前スレ972さん
そのとおりだと思います。
問題事体が文章でなくて聞き取りみたいな感じなので難しい。

time[i] のときの値を data[i] とする。なんですが、このデータは昇順されてるとは言ってないので
初めにソートだけしています。その後がよくわかりません。
いろんなケースあると思うんですが、すべてに対応し切れてないのが現状です。
0019デフォルトの名無しさん2006/12/26(火) 04:11:25
>>18
・前スレ923の境界条件
・前スレ922の例の範囲時間110〜130で区切り10の場合で結果が3つとなる矛盾
を解決しないと話が進まないよ
0020デフォルトの名無しさん2006/12/26(火) 04:23:02
> 問題事体が文章でなくて聞き取りみたいな感じなので難しい。
というのは問題の難しさではなく、あんたが問題を理解してないだけ。
そんな問題を又聞きでしか理解できない俺たちに解けるわけがない。

出題者に問題を正確に聞き、仕様をきっちり立ててからもう一度書き込みな。
0021デフォルトの名無しさん2006/12/26(火) 10:17:22
[1] 授業単元:c言語
[2] 問題文(含コード&リンク):
yasuo 170.5 70.5
hideaki 176.5 65.8
nobu 166.5 58.2
yuichi 168.0 65.4
 この上記の5人の平均の身長と体重、平均の標準体重と肥満率
 を求めてください。標準体重は標準体重 = (身長 - 100) * 0.9
 で求める。肥満率は(体重 - 標準体重) * 100.0 / 標準体重
 で求める。なお、求めた平均身長、平均体重、平均標準体重、
 平均肥満率を最後に printf で出力してください

nori 152.7 68.6

[3] 環境
 [3.1] OS: (Windows)
 [3.2] コンパイラ名とバージョン: (gcc )
 [3.3] 言語: (C/)
[4] 期限: 今日中
[5] その他の制限:
0022デフォルトの名無しさん2006/12/26(火) 10:54:43
1] 授業単元:c言語
[2] 問題文(含コード&リンク):
yasuo 170.5 70.5
hideaki 176.5 65.8
nobu 166.5 58.2
yuichi 168.0 65.4
nori 152.7 68.6
 この上記の5人の平均の身長と体重、平均の標準体重と肥満率
 を求めてください。標準体重は標準体重 = (身長 - 100) * 0.9
 で求める。肥満率は(体重 - 標準体重) * 100.0 / 標準体重
 で求める。なお、求めた平均身長、平均体重、平均標準体重、
 平均肥満率を最後に printf で出力してください



[3] 環境
 [3.1] OS: (Windows)
 [3.2] コンパイラ名とバージョン: (gcc )
 [3.3] 言語: (C)
[4] 期限: 今日中
[5] その他の制限:
0023デフォルトの名無しさん2006/12/26(火) 11:12:26
[1] 授業単元: Cプログラミング
[2] 問題文(含コード&リンク): ttp://www.geocities.jp/c_prog2011/file_4.txt
[3] 環境
 [3.1] OS: Windows XP Home Edition
 [3.2] コンパイラ名とバージョン: Visual Studio 2005
 [3.3] 言語: Cのみ
[4] 期限: 2006年12月31日23:59
[5] その他の制限:

よろしくおねがいします。
0024デフォルトの名無しさん2006/12/26(火) 11:12:34
void main( void )
{
struct status {
char name[ 20 ];
double height;
double weight;
double standard;
double obese;
};
struct status average = { "", 0.0, 0.0, 0.0, 0.0 }, data[ 5 ] = {
{ "yasuo", 170.5, 70.5 },
{ "hideaki", 176.5, 65.8 },
{ "nobu", 166.5, 58.2 },
{ "yuichi", 168.0, 65.4 },
{ "nori", 152.7, 68.6 }
};
int i;
for ( i = 0; i < 5; i++ ) {
average.height += data[ i ].height;
average.weight += data[ i ].weight;
average.standard += data[ i ].standard = ( data[ i ].height - 100.0 ) * 0.9;
average.obese += data[ i ].obese = ( data[ i ].weight - data[ i ].standard ) * 100.0 / data[ i ].standard;
}
average.height /= 5.0;
average.weight /= 5.0;
average.standard /= 5.0;
average.obese /= 5.0;
printf( "average height = %f\n", average.height );
printf( "average weight = %f\n", average.weight );
printf( "average standard = %f\n", average.standard );
printf( "average obese = %f\n", average.obese );
}
0025デフォルトの名無しさん2006/12/26(火) 11:57:04
>>23
つまんねぇ事聞くけど、なんで片方txtなん?
0026デフォルトの名無しさん2006/12/26(火) 12:18:26
[1] 授業単元: C言語
[2] 問題文:
(1)文字列のリストをファイルから文字列の2次元配列に読み込み、
キーボードから読み込んだ文字列を逐次探索するプログラムを作成する。

(2)2次元の配列とポインタの配列を使って文字列のソートを行う
プログラムを作成する。ただしデータはファイルから入力し結果は
ファイルに出力するものとする。またアルゴリズムは単純選択法を
使うこと。2次元配列に読み込んだ文字列は移動せず、ポインタを
付け替えることによりソートを行うこと。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2007年1月5日15:00まで
[5] その他の制限: ポインタの章での問題です
0027232006/12/26(火) 13:45:50
>>25
問題文を載せただけなんです
0028デフォルトの名無しさん2006/12/26(火) 14:01:51
>>26
超適当に書いた。
#include<stdio.h>
#include<string.h>
int main(void){
    char word[80][80],*table[80],*tmp;
    int i,j,size;
    for(i=0;i<80 && scanf("%79s",word[i])==1;++i)table[i]=word[i];
    for(size=i,i=0;i<size;++i)
    for(j=i+1;j<size;++j)
        if(strcmp(table[i],table[j]) > 0)tmp = table[i],table[i]=table[j],table[j]=tmp;
    for(i=0;i<size;++i)printf("%s ",table[i]);
    return 0;
}
0029デフォルトの名無しさん2006/12/26(火) 14:42:37
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):下記
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:VS2005 C++
 [3.3] 言語: C++
[4] 期限: 明日まで

サブ関数で周りの画素を配列d[8]に入れたいんですが、どうやればいいでしょうか?returnを使うのではなくポインタを使って直にデータを入れたいんです。
配列ddは画像のピクセルデータがすべて入っている配列です。

void Get8(int i, int j, int dd[], int *d[]) //ポインタで8近傍を返す
{
*(d)=*dd[i+1][j];
*(d+1)=dd[i+1][j-1];
*(d+2)=dd[i][j-1];
*(d+3)=dd[i-1][j-1];
*(d+4)=dd[i-1][j];
*(d+5)=dd[i-1][j+1];
*(d+6)=dd[i][j+1];
*(d+7)=dd[i+1][j+1];
}

void main()
{
int d[8];
Get8(i,j,dd,d)
}

イメージとしてはこんな感じなんですが書き方がわかりません>< お願いします。
0030デフォルトの名無しさん2006/12/26(火) 14:55:32
>>29
こう?
void getNear8(int x, int y, int image[][], int dst[][]){
    int dx, dy;
    for(dx=-1;dx<=1;dx++)
        for(dy=-1;dy<=1;dy++)
            dst[dx+1][dy+1]=image[x+dx][y+dy]; //[x][y]なのか[y][x]なのかわかんねーけどいいや
}

最近のコンパイラならコレくらいのforループは展開してくれる・・・はず
0031デフォルトの名無しさん2006/12/26(火) 15:09:23
展開するってどういう事?
0032デフォルトの名無しさん2006/12/26(火) 15:12:08
#include <iostream.h>
#define SIZE 3
void Get8(int i, int j, int dd[][SIZE], int d[]) //ポインタで8近傍を返す
{
*(d)=dd[i+1][j];
*(d+1)=dd[i+1][j-1];
*(d+2)=dd[i][j-1];
*(d+3)=dd[i-1][j-1];
*(d+4)=dd[i-1][j];
*(d+5)=dd[i-1][j+1];
*(d+6)=dd[i][j+1];
*(d+7)=dd[i+1][j+1];
}
void main()
{
int d[8];
int dd[SIZE][SIZE]={{1,2,3},{4,5,6},{7,8,9}};
Get8(1,1,dd,d);
for(int i=0;i<8;i++){
cout<<d[i]<<endl;
}
}
0033デフォルトの名無しさん2006/12/26(火) 15:43:22
>>30 >>32
ありがとうございました!説明がへたくそですいませんでした。
先生方のを参考にしてやったところうまくできました><
0034デフォルトの名無しさん2006/12/26(火) 18:36:17
[1] 授業単元:プログラミング
[2] 【問題文】
文字列を2つ入力し、それを結合して表示するプログラムを作成せよ。
入力文字列(2つ)および結合文字列を格納する変数(配列)はmain()関数内で
各々別個に用意する。
結合文字列を作成する関数str_cat()を自作すること。
→strcat()など文字列操作のライブラリ関数を使わないこと。

2つの文字列は20バイト以内を前提とするが、拡張できるようにすること。

str_cat()の仕様は以下の通り。
----- str_cat() ----------------------------------------------------
void str_cat(char *文字列1へのポインタ,
char *文字列2へのポインタ
char *格納先へのポインタ);
引数 :文字列1へのポインタ:結合対象文字列1(先頭)の先頭アドレス
文字列2へのポインタ:結合対象文字列2(後方)の先頭アドレス
格納先へのポインタ :結合文字列格納先の先頭アドレス
返却値:なし
-------------------------------------------------------------------
※「void str_cat(const char*, const char*, char*);」でもよい

【実行例】
Enter String(1) : abcdef
Enter String(2) : XYZ
Result : abcdefXYZ
[3] 環境
 [3.1] OS: Windowsxp
 [3.2] コンパイラ名とバージョン:gcc 3.4
 [3.3] 言語:C
[4] 期限:2006年12月27日
[5] その他の制限:文字列操作のライブラリ関数は使ってはいけないそうです。
0035デフォルトの名無しさん2006/12/26(火) 18:49:49
見たことある問題だと思ったが見つからない
0036デフォルトの名無しさん2006/12/26(火) 18:54:16
void str_cat(const char*a, const char*b, char*c){while(*a)*c=*a,c++,a++;while(*b)*c=*b,c++,b++;}
0037デフォルトの名無しさん2006/12/26(火) 20:49:14
>>34
#include <stdio.h>

void str_cat(char *str1, char *str2, char* dest)
{
int i=0,j=0;
while(str1[i]){
dest[j] = str1[i];
i++;j++;
}
i=0;
while(str2[i]){
dest[j] = str2[i];
i++;j++;
}
dest[j] = '\0';
}

int main(int c,char **v){
char *str1="やらないか",*str2="アッー!",dest[16]="";
str_cat(str1,str2,dest);
printf(dest);
return 0;
}
0038デフォルトの名無しさん2006/12/26(火) 21:57:00
>>28
ありがとうございます。

[1] 授業単元: C言語
[2] 問題文: 2問あります
(1)文字列のリストをファイルから文字列の2次元配列に読み込み、
キーボードから読み込んだ文字列を逐次探索するプログラムを作成する。

(2)2次元の配列とポインタの配列を使って文字列のソートを行う
プログラムを作成する。ただしデータはファイルから入力し結果は
ファイルに出力するものとする。またアルゴリズムは単純選択法を
使うこと。2次元配列に読み込んだ文字列は移動せず、ポインタを
付け替えることによりソートを行うこと。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2007年1月5日15:00まで
[5] その他の制限: ポインタの章での問題です
0039デフォルトの名無しさん2006/12/26(火) 21:57:07
内容:
[1] 授業単元:Cプログラミング演習
[2] 問題文:学籍番号(5桁の英数文字列)、英、数、国の得点(各100点満点)を
      次々に読み込んで、各人の総得点を計算の上、�@読み込んだ順に
      各人のデータを、�A各人の平均と標準偏差を次の形に出力する
      cプログラムを作成せよ。

      但し、プログラム作成においては
      ・学生の人数は100人以下で不定とする。(100人以下なら何人でも、
       プログラムを修正せずにうまく対処しなければならない)
      ・学生一人のデータは構造体としてまとめて、それにStudentという
       データ型名をつけること。
      ・Student型を要素とする配列を用意してプログラムを組むこと。 
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: Cのみ
[4] 期限: 2007年1月10日12:00まで
その他:得点データはファイルから読み込みます。./a.out<ファイル名 といった風に
 
前もありましたが複数の回答を比較したいのです 
よろしくお願いします


0040デフォルトの名無しさん2006/12/26(火) 21:58:09
>>39
以下のような形で出力してください
Id-No Eng Math Jap Total
----- --- ---- --- -----
G0342 44 65 51 160
G0343 83 100 84 267
G0344 58 30 57 145
.
.
.
G3621 85 80 90 255
G3622 74 100 65 239
------------------------------
Ave 72.5 75.8 68.1 216.4
Dev 15.3 19.6 12.4 33.3

ずれてますが解釈を良心的にお願いします
0041デフォルトの名無しさん2006/12/26(火) 21:59:41
標準偏差については前スレでも物議をかました(そこまでいってない?)ようですので
解答者の判断に任せます 
0042デフォルトの名無しさん2006/12/26(火) 22:00:14
前に作った人を侮辱したいのか
0043デフォルトの名無しさん2006/12/26(火) 22:17:58
[1] 授業単元:情報技術�U
[2] 問題文(含コード&リンク):
10個の整数をキーボードから入力し,入力されたデータの平均値を求めなさい.
さらに,平均値から最も離れているデータと最も近いデータが,それぞれ何番目に入力したか
とデータの値を求めて(複数の場合はすべて)表示するプログラムを作成し,提出しなさい.
なお,10個のデータをすべて入力し終わってから,平均値などを求めること.
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:2006年12月28日まで
[5] その他の制限:配列まで習いました。

自分でがんばってみましたが、どうしてもできませんでした。
誰かこんな自分を助けてください。
0044デフォルトの名無しさん2006/12/26(火) 22:18:53
物議ってかますものなのか
0045デフォルトの名無しさん2006/12/26(火) 22:20:11
>>43
がんばったところまで見せてもらおうか
0046432006/12/26(火) 22:28:30
#include<stdio.h>

int main(void)
{
int i,sum,ave,min,max,samax,samin;
int a[10];

for(i=0;i<10;i++){
printf("%d番:",i+1);
scanf("%d",a[i]);
sum+=a[i];
}

ave=sum/10;
min=max=a[i];
for(i=0;i<10;i++){
if(a[i]>max) max=a[i];
if(a[i]<max) min=a[i];
}

if(max-ave>ave-min)
max=samax;

こんな感じでやってみたのですが、
途中でわけがわからなくなって断念しました。
0047デフォルトの名無しさん2006/12/26(火) 22:35:46
scanf &
min=max=a[0];
aveは浮動少数じゃなくていいのかな
問題文からするとsumは入力ループよりも下で
maxやminの判定の時に位置も決定
もうすこし頑張ってみては?
0048デフォルトの名無しさん2006/12/26(火) 23:45:45
>>42
侮辱なんてとんでもない
まだコンパイルすらしていません 学校開いてないので
0049デフォルトの名無しさん2006/12/27(水) 01:18:33
>>43
こんな感じで。侮ってかかったら3時間かかってしもーた。まだバグがあるかも。
俺も混乱してるから、デバッグはご自分で!

#include <stdio.h>
#define N 10
#define Abs(x) (x>0) ? x:-x
#define Max(a,b) (a>b) ? a:b
#define Min(a,b) (a<b) ? a:b
int Length(int ave,int x){int A,B,Ans;A= Max(ave,x);B= Min(ave,x);Ans = A-B;return Abs(Ans);}
int main(){
    int val[N],Len[N],LenMax=0,LenMin=0,Ave,all=0,i;
    for(i=0;i<N;i++){printf("Input data[%d/%d]:",i,N);scanf("%d",&val[i]);}
    for(i=0;i<N;i++) all += val[i];
    Ave = all/N;
    for(i=0;i<N;i++) Len[i] = Length(Ave,val[i]);
    LenMax=LenMin=Len[0];
    for(i=0;i<N;i++){LenMax = Max(Len[i],LenMax);LenMin = Min(Len[i],LenMin);}  
    printf("Ave=%d",Ave);
    printf("\nMin=%d\n",LenMin);
    for(i=0;i<N;i++) if(Len[i] == LenMin){printf("[%d:%d:%d]",i,Len[i],val[i]);}
    printf("\nMax=%d\n",LenMax);
    for(i=0;i<N;i++) if(Len[i] == LenMax){printf("[%d:%d:%d]",i,Len[i],val[i]);}    
    return 0;
}
0050デフォルトの名無しさん2006/12/27(水) 01:47:42
>>43
#include <stdio.h>
#include <math.h>
int main()
{
int num[10]={0};
char buff[256] = {'\0'};
int average;
int max =0,min=0;
int temp=0;
int i=9,j=0,k=0;
while(i >= 0){
fgets(buff,sizeof(buff),stdin);
sscanf(buff,"%d",&num[i]);
i--;
}
i=9;while(i >= 0){temp +=num[i];i--;}
i= 9;average = temp/10;temp = max = min = abs(average - num[i]);
while(i>=0){temp = abs(average - num[i]);if(temp >= max){max = temp;
j=i;}if(temp <= min){min = temp;k = i;}i--;}for(i=0; i< 10; i++)
printf("num[%d] = %d ",i,num[i]);putchar('\n');
printf("Max num[%d]= %d Min num[%d]= %d Average = %d \n",j,num[j],k,num[k], average);
return 0;
}
0051デフォルトの名無しさん2006/12/27(水) 10:34:54
オッス!オラ悟空!オラにも簡単に答えられる宿題を出してくれ!
0052デフォルトの名無しさん2006/12/27(水) 10:50:01
>>51
次の問題を解きなさい。
1+1=
0053デフォルトの名無しさん2006/12/27(水) 10:50:17
>>52 田
0054デフォルトの名無しさん2006/12/27(水) 11:11:41
>>51
[1] 授業単元:年忘れプログラミング
[2] 問題文(含コード&リンク):
C言語のソースファイルを読み込み、ifとelseを使わないソースファイルに変換するプログラムを作成せよ。
(但し変換されたソースは元のプログラムと同等の処理を行えるものとする)
[3] 環境
 [3.1] OS: なんでもOK
 [3.2] コンパイラ名とバージョン: なんでもOK
 [3.3] 言語: C/C++
[4] 期限: 12月31日23時59分
[5] その他の制限: 特になし
0055デフォルトの名無しさん2006/12/27(水) 11:32:16
>>54
ソースが肥大化するのでパス
0056デフォルトの名無しさん2006/12/27(水) 11:49:44
if (CONDITION){
EXPRESSION_A
} else {
EXPRESSION_B
}

↑これを、↓こうする感じ?

for (BOOL b = TRUE; b && CONDITION; b = FALSE)
{
EXPRESSION_A
}
for (BOOL b = TRUE; b && !CONDITION; b = FALSE)
{
EXPRESSION_B
}

よく考えたら三項演算子のほうが早いか……orz
0057デフォルトの名無しさん2006/12/27(水) 12:11:56
CONDITION が複数回評価されると等価にならなくなる可能性がでてくるので、
下のような、コンパイラがやってるっぽいことをすればいいと思う

(CONDITION)?goto LABEL_IF_TRUE001:goto LABEL_IF_FALSE001;
LABEL_IF_TRUE001:
...
goto LABEL_IF_END001
LABEL_IF_FALSE001:
...
LABEL_IF_END001:
0058デフォルトの名無しさん2006/12/27(水) 12:23:36
>>57
gotoは文であって式ではないから三項演算子の被演算子にならない。
0059デフォルトの名無しさん2006/12/27(水) 13:21:07
三項演算子を使うには関数にしないといけない?
0060デフォルトの名無しさん2006/12/27(水) 14:21:39
↓みたいな時に困らないか?
for(i=0;i<sizeof(buff)/sizeof(buff[0]);++i)
 if(!buff[i] || buff[i]=='\n') break;


>>57のやり方がいいのかも
{
 switch((!buff[i] || buff[i]=='\n') != 0){
  case 0: goto LABEL_IF_FALSE001;
 }
  break;
  goto LABEL_IF_END001;
 LABEL_IF_FALSE001:
 LABEL_IF_END001:;
}
006152006/12/27(水) 22:06:04
>>16様、>>17様
ありがとうございます。参考にさせていただきます!!
実は、冬季課題Cというのが冬季課題Bの下にありまして、
それは「冬季課題Aを複合台形公式を用いた自動積分法のプログラムを作成せよ」に
なっております。
もしよろしければ、引き続きお願いできないでしょうか?
テンプレは以下の通りになります。

[1] 数値解析応用
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3286.zip
※>>5のAの問題をCに書き換えました。実際のスキャナ画像ではありませんが、内容は全く同じです。

[3] 環境
 [3.1] OS:Linux RedHat9.0
 [3.2] コンパイラ名とバージョン: gcc(バージョン不明...)
 [3.3] 言語: C言語
[4] 期限:2006年12月31日23:00まで(2006年12月31日23:59までにメール提出となっています)
[5] その他の制限:特にありません。


よろしくお願いします。
0062デフォルトの名無しさん2006/12/27(水) 23:14:37
>>61
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3289.txt

なお、前回うpした複合シンプソン則のプログラムは後から確かめて
みたら1e-8の精度が出ていなかったので、収束条件を変更した。

複合台形則は、関数の形によっては複合シンプソン則に比べて収束が
極めて悪くなり、今回も1e-8の精度を得るためには収束条件をかなり
厳しくする必要があった。

もしかしたら収束条件を前回の値との差で求める方法は正しくないの
かもしれないが、真値が判明していない以上、このような方法を摂らざる
を得ないのでご承知下さい。
0063デフォルトの名無しさん2006/12/27(水) 23:18:37
>>61
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3290.txt

スマソ。複合台形則のプログラムは間違った方をうpしてしまった。
こちらを使用して下さい。

収束にはこちらの環境では4791回のループを必要としたので、問題が
ある場合は33行目のprintf()をコメントアウトしてセミコロンだけにして下さい。
0064デフォルトの名無しさん2006/12/27(水) 23:29:35
[1] 授業単元: 基礎プログラミング
[2] 問題文(含コード&リンク): こちらの画像をご覧ください。。。http://up.kabubu.net/cgi/img2/19186.jpg
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン:VC2005
 [3.3] 言語: C/C++
[4] 期限: 2006.12.28
[5] その他の制限: for文を使用してください。

よろしくおねがいします。。。。
0065432006/12/28(木) 00:15:51
>>49>>50
遅ればせながら、本当にありがとうございます。
0066デフォルトの名無しさん2006/12/28(木) 00:49:00
>>64
#include <stdio.h>
#include <math.h>
#define N 50
int main() {
int i;
double x[N], ave=0.0, ss=0.0, var, std, err;
FILE *fp = fopen("kadai4.dat", "r");
if (fp == NULL) return 1;
for (i=0; i<N; i++) {
fscanf(fp, "%lf", &x[i]);
printf("%6.3f", x[i]); if ((i+1)%10 == 0) printf("\n");
}
fclose(fp);
for (i=0; i<N; i++) ave += x[i]; ave /= N;
for (i=0; i<N; i++) ss += pow(x[i]-ave,2);
var = ss/N; std = sqrt(var); err = 3.0 * std;
printf("平均値 : Xm = %f\n", ave);
printf("分散値 : Var = %f\n", var);
printf("標準偏差 : std = %f\n", std);
printf("誤差範囲 : Err = ±%f\n", err);
return 0;
}
0067232006/12/28(木) 19:04:25
すいません、問題文間違えていました。
0068642006/12/28(木) 23:40:29
>>66
ありがとうございます!
おかげさまで助かりました。。。
0069デフォルトの名無しさん2006/12/28(木) 23:41:48
>>68
* 実際の板厚が知りたいのなら標準偏差ではなく標準誤差では?
* 母集団は無限なんだから不偏分散を使うべきでは?

と先生に聞いといて下さい。
0070デフォルトの名無しさん2006/12/29(金) 22:02:06
先日も同じ質問をしたのですが
もう一度お答え頂けるとありがたいです。

[1] 授業単元: C言語
[2] 問題文: 2問あります
(1)文字列のリストをファイルから文字列の2次元配列に読み込み、
キーボードから読み込んだ文字列を逐次探索するプログラムを作成する。

(2)2次元の配列とポインタの配列を使って文字列のソートを行う
プログラムを作成する。ただしデータはファイルから入力し結果は
ファイルに出力するものとする。またアルゴリズムは単純選択法を
使うこと。2次元配列に読み込んだ文字列は移動せず、ポインタを
付け替えることによりソートを行うこと。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2007年1月5日15:00まで
[5] その他の制限: ポインタの章での問題です
0071デフォルトの名無しさん2006/12/29(金) 22:26:41
なぜ?
0072デフォルトの名無しさん2006/12/29(金) 22:29:19
>>70
>>28に書いてあるじゃん
0073デフォルトの名無しさん2006/12/30(土) 08:46:31
[1]授業単元:
[2]問題文:

数列 a = [a_1, ..., a_n] が与えられる。
これをバブルソートするときの要素の交換回数を効率よく求めよ。
[3]環境
[3.1]OS、コンパイラ問わず。
[3.2]言語:どちらでも可。

[4]期限:一月三日。
[5]その他の制限:特になし。
0074デフォルトの名無しさん2006/12/30(土) 09:05:06
>>73
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3294.c
効率が良いかは分からんが、交換すると分かったときカウントするかと・・・
0075デフォルトの名無しさん2006/12/30(土) 09:45:13
うまく機能しなかったんじゃない?
0076デフォルトの名無しさん2006/12/30(土) 22:49:14
[1] 授業単元: 基礎プログラミング
[2] 問題文(含コード&リンク): こちらの画像をご覧ください・・・・・ttp://up.kabubu.net/cgi/img2/19360.jpg
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン:VS2005
 [3.3] 言語: C/C++
[4] 期限: 06.12.31
[5] その他の制限:for文でお願いします

お世話になってます。よろしくお願いします。

0077デフォルトの名無しさん2006/12/31(日) 00:31:34
>>76 http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3296.txt
エクセルでグラフ化は自分でやってね
0078デフォルトの名無しさん2006/12/31(日) 00:32:06
たまには自分でやろうな
0079デフォルトの名無しさん2006/12/31(日) 00:38:39
なんだと?誰に向かって言ってるんだお前
0080772006/12/31(日) 00:55:12
>>76 http://up.kabubu.net/cgi/img2/19366.jpg
まあ暇だからグラフ化したよ
0081デフォルトの名無しさん2006/12/31(日) 02:12:13
>>28 はバブルソートだから?
0082デフォルトの名無しさん2006/12/31(日) 07:39:01
オッス!オラ悟空!今年も、もう今日で終わり、なんだかわくわくしてきたぞ!
オラでも年明けまでに余裕で解ける宿題を出してくれ!
0083デフォルトの名無しさん2006/12/31(日) 15:14:36
つ四則演算
0084デフォルトの名無しさん2006/12/31(日) 15:35:00
っ計算機・・・GUIで
0085デフォルトの名無しさん2006/12/31(日) 19:17:20
[1] 授業単元: 基礎プログラミング
[2] 問題文(含コード&リンク):
1. 入力の行数を数えるプログラムを作れ。
2. 入力中に現れる「NG」という単語を全て「OK」に置き換えて出力するプログラムを作れ。
3. 関数pop とpush を定義し、スタックを実装せよ。
4. スタックを用いて、逆ポーランド記法で四則演算を行うことのできるプログラムを作れ。
5. クイックソートを実装せよ。
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン:borland
 [3.3] 言語: C/C++
[4] 期限:
[5] その他の制限:

よろしくお願いします。
0086デフォルトの名無しさん2006/12/31(日) 21:33:24
>>70
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3299.c
0087デフォルトの名無しさん2006/12/31(日) 21:39:40
[1] 情報論
[2] 1)
N×Nマス目のフロアを前後左右に移動することができるロボットがある。
  スタート地点は常に左上(x,y)=(0,0)であり、全マス目を一度だけ通り、通った順序を表示するプログラムを作りなさい。
  フロアには障害物を置けるようにする。
  条件を満たすものがない場合、できませんでした。と表示したい。
  
[3] 環境
 [3.1] Linux
 [3.2] gcc 4.0
 [3.3] 言語:C
[4] 期限:
[5] その他の制限: 特になし。

0088@part12007/01/01(月) 00:47:41
3日くらいやっていましたが、出来なくて困っています。
どうしていいのかわかりません。
申し訳ありませんが、お助けください!

[1] コンピュータプログラミング
[2] 問題文
------------------------------------------------------------------------

サッカーのリーグ戦の順位表を記述した(添付されたファイル)CSVファイルをD&Dで入力することで、
 �@誤りがある場合、質問形式で修正でき、・・・・・※
 �A1試合分の結果を反映でき、
 �B結果を新しいファイル(形式はCSV & html)として出力できる、
コンソールアプリケーションを作成しなさい。
(チーム数は、入力したCSVによって決定されるものとする)
0089デフォルトの名無しさん2007/01/01(月) 00:48:21
順位は、
・勝ち点によって決定する。
・勝ち点が同じ場合は、得失点差によって決定する。
・得失点差が同じ場合は、得点のよって決定する。
・得点も同じ場合は、同じ順位とする。
勝ち点は、次のようになる。
・“勝ち”→ 勝ち点が 3増える。
・“引分”→ 勝ち点が 1増える。
・“負け”→ 勝ち点は増えない。

※ 順位の付け方、勝ち点の計算等、矛盾がある場合は、
   順位,勝ちの数,引分の数,負けの数,得点,失点,得失点,勝点
  のいずれに問題があるかを質問形式で修正できるようにする。
  試合は、○回戦総当りときまってはいない。
------------------------------------------------------------------------
0090@part32007/01/01(月) 00:49:31
↑part2
[3] 環境
 [3.1] OS: Windows XP
 [3.2] Visual C++ 2005 Express Edition
 [3.3] C言語
[4] (早いと嬉しいですが)今週中です。
[5] 標準ライブラリは使用不可

↓に、完成例(昔の生徒が作ったEXE)と、入力ファイル(JLeagueテスト.csv)
 出力結果(JLeagueテスト_Result.csv、JLeagueテスト_Result.html)
 をアップします。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.cgi?mode=thr&no=3300

3300.zip (ファイルサイズが大きいので、圧縮しました。)

よろしくお願いします。
0091デフォルトの名無しさん2007/01/01(月) 02:19:12
>>85
4.のみ。ここで解凍 http://www.geocities.jp/c_cpp_cs/code/code.html
dZLBTsMwDIbPRdo7mHJYOqAwJi7d2A2uPEOWZGu0LqkSl62gvTtu2sJGmVS1jv35t+v4RhtRVFLBQgi
sS7UcXd38uLT16BTfnTn9fz7kYksebRB2XBuWwNfoKkJXh2/kUWZZgBbSVqtCLcHPTwJOm00rC96zeJ
o+w1M6g1uYpY8wiZNfVtgKYbEgLKUEqtPYTUAZWQRM5NyBCGZbC2Q47HNNNmMCXprsjUKWJHD9Aq/vb
227UaTXwIKa9lJvNDKR9KGIcsoKV/QP5J33PlguO306EeBzJrvoEVThVZ/e9XK4g7rD66aRFG3JkjkZ
ZTDa0OFyyO81ihyoh15ZcKoyvh1n7bFv40Djqyl9RWPdzk/R+yF6fwGdDNHJBfRhiD4MUKnWvCqwJzF
3dg+xNh+80BJsqRxH667jDj+2gwzv/s5CKLjCbaVefyoWLnKawB9BdSid8l5b00me7VDMjd8rl8Vhib
pxN5RTWDkDj82hqSR4O3JrPEKzXxNQziUnu91LknuwkaRAzzc=
0092デフォルトの名無しさん2007/01/01(月) 02:24:03
>>85
1.
#include <iostream>
#include <string>
int main() {
    std::string str;
    int n = 0;
    while (std::getline(std::cin, str)) ++n;
    std::cout << n << " lines" << std::endl;
    return 0;
}
0093デフォルトの名無しさん2007/01/01(月) 02:27:36
>>85
3. ここで解凍 http://www.geocities.jp/c_cpp_cs/code/code.html
jVRNb+IwED0Hif8w2wNyIFSlR772ttLew2lVRSEYEW0aR44DYiv623c8dhInQOmhJZ5582bmzdiKvxd
ZrDgs1bngefzOIZwF0B5e18PBUaQ7SEReKlklioWzMRSBMSBgBMc4q7gPH8OBl/MTsMJHEmasi+HgMh
yo6zSbmnjHkVec2QZZDUkxXX9u2P3QX0KeYrn7rbiMlZB9op4b9qksVdCPgiwulcl3OqQZB0Y4+LFyP
F7NORqTV9fkeZMJHfT35WF75Sku2GYEcQD4f2t4N6BDWOwvIIYVbBewxR9tu9t0iIQJVlZCqeLkb5Qi
QnMV1TZLkzmStnZWpv94pED/IO+Lr6uewzFiiFFpEiXY4TIcr5lBIAR+4t8cRGHVwUGSU+xZ6MOYqHz
fDzQTwJESEKAxVSXfRYxyfWAL3qdTT0/NYxRgMRMbY0RtMu94xhVHjG8F9lodW8oRCHXg0gd1kOJUJ5
jPCab5yf1sWRoH1d046dQFUEUNoK1P1xGOsWp9sPKaeNdAeDQUMj3i+HpTMTfG6YGYOz1ZEVa3sZfFd
1bjxlbcWQhNbKdYT83Aney10G6EUYe+a410vIbYu+T6YAk3AszAvPZZsd4IJuACg25w9Md1vpnh4Y10
rWS72KHVTdxStlkiqsWIRxfTmInHENNyaJepw7gkV5XMYawOaVnviBU6EVWucCtNsg8H3S+0WfCiKg+
2uHAE9QOU7nti4mW1Z7O9VkeneNeNN/cVBZ1Znex0qJG6xCV050JOKqaR3MXXkrcw+yp+pdQFeFby74
9cPZ6r1kgU7AuZXuzjAE9cSiHnoOdkrwh+YInq/Py0uJ5Nd8dgCrO37qQe5TUCdXJTNps8ifNcKE1j0
zviTKdXHTfP5h25fFeXmy/PMlybCHpD/gM=
0094デフォルトの名無しさん2007/01/01(月) 02:39:54
>>85
2.
#include <iostream>
#include <string>
std::string replace_all(const std::string& source, const std::string& pattern, const std::string& placement) {
    std::string result;
    std::string::size_type pos_before = 0, pos = 0, len = pattern.size();
    while((pos = source.find(pattern, pos)) != std::string::npos) {
        result.append(source, pos_before, pos - pos_before);
        result.append(placement);
        pos += len ;
        pos_before = pos ;
    }
    result.append(source, pos_before, source.size() - pos_before) ;
    return result;
}
int main() {
    std::string str;
    while (std::getline(std::cin, str)) std::cout << replace_all(str, std::string("NG"), std::string("OK")) << std::endl;
    return 0;
}
0095デフォルトの名無しさん2007/01/01(月) 11:21:25
>>73 バブルソートの交換回数は a[i] > a[j] (i < j) なる要素対の数だから
それをマージソートしながら数えてやる.計算量 O(n log n).
#include <iostream>
#include <vector>
using namespace std;
int bubble_count(const vector<int> &a) {
  int count = 0;
  int n = a.size() / 2;
  if (n > 1) {
    vector<int> b(a.begin(), a.begin() + n/2);
    vector<int> c(a.begin() + n/2, a.end);
    count += bubble_count(b);
    count += bubble_count(c);
    for (int i = 0, j = 0, k = 0; i < n; ++i) {
      if (k == c.size())      a[i] = b[j++];
      else if (j == b.size()) a[i] = c[k++];
      else if (b[j] <= c[k])  a[i] = b[j++];
      else                  { a[i] = c[k++]; count += n/2 - j; }
    }
  }
  return count;
}
0096デフォルトの名無しさん2007/01/01(月) 11:40:15
交換回数と比較回数を勘違いしないように(・∀・)
0097デフォルトの名無しさん2007/01/01(月) 12:20:02
すまん、なんかプログラムが大きく間違ってた.
方針は間違ってないはずなのでしばし待たれ.
0098952007/01/01(月) 12:32:45
>>95
そんなに大きくは間違ってなかった.
const, int n = a.size()/2, a.end をそれぞれ適当に修正すれば
正しく動くはず.やっぱりコンパイルくらい通さないと駄目だな.

>>96
で,俺何か勘違いしてる?

このアルゴリズムの正当性は容易に証明できるし,
for (int i = 0; i < n; ++i)
for (int j = 0; j+1 < n; ++j)
if (a[j] > a[j+1]) { swap(a[j], a[j+1]); ++count; }
の結果と比較しても厳密に一致するけど.
0099デフォルトの名無しさん2007/01/01(月) 13:46:13
http://ja.wikipedia.org/wiki/%E3%83%90%E3%83%96%E3%83%AB%E3%82%BD%E3%83%BC%E3%83%88
0100デフォルトの名無しさん2007/01/01(月) 13:48:42
>>98
> 俺何か勘違いしてる?
ヒント:main関数がない
0101デフォルトの名無しさん2007/01/01(月) 14:35:24
>>99
申し訳ない、よくわからないので、もっとはっきりと言って貰えないかな?

>>100
入力がどう与えられるか書かれていないので省略したのだけど、駄目?
■ このスレッドは過去ログ倉庫に格納されています