C/C++の宿題を片付けます 77代目
■ このスレッドは過去ログ倉庫に格納されています
【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して
投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。
【質問テンプレ】
[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++の宿題を片付けます 76代目
http://pc8.2ch.net/test/read.cgi/tech/1162771475/
【過去スレ一覧】
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
0697デフォルトの名無しさん
2006/11/30(木) 12:46:070698デフォルトの名無しさん
2006/11/30(木) 13:17:37一次元配列はわかってるんだな
それなら簡単だ
k行m列の配列は
int a[k][m];
と宣言して、i行j列へ5を代入したければ
a[i][j] = 5;
一次元配列と扱い方に大きな違いはない
k, m, nは
#define k 2
などと書いておくといい
0699デフォルトの名無しさん
2006/11/30(木) 14:34:32#define k 2 と書いておくとどんなメリットがあるんですか?
0700デフォルトの名無しさん
2006/11/30(木) 14:47:47あのカタワレは何処行ったのかね?
0701デフォルトの名無しさん
2006/11/30(木) 14:48:08[2] 問題文:多項式f(x)=Cn×�Iのn乗+Cn-1×�Iの(n-1)乗+...+C1×�I
+C0×�Iの0乗 の次数nと多項式の係数Cn,Cn-1,..,C1,C0を順に読み込み、
変数�I=0.0、0.1、0.2,・・、0.9、1.0に対する多項式f(x)の値を計算して見やすい形に
出力するCプログラム
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:Cです
[4] 期限:12月3日まで
[5] その他の制限:配列の問題です。 for構文を必ず使い、
f(x)=((...((Cn�I+Cn-1)�I+Cn-2)...)�I+C1)�I+C0
と単純な効率の良いプログラム計算するようなもの。つまり
fx←Cn
fx←fx*�I+Cn-1 というような代入を参考にして考えてみる。
0702701
2006/11/30(木) 14:49:230703デフォルトの名無しさん
2006/11/30(木) 14:56:50#define k 2
とすると、コンパイル前に自動的にkを2に置き換えてくれる。
int k = 2;
int m = 3;
int a[k][m];
上のように配列の要素数に変数の値を使用すると、コンパイルが通らない可能性があるから、
#defineを使う。
0704デフォルトの名無しさん
2006/11/30(木) 14:58:330705デフォルトの名無しさん
2006/11/30(木) 14:59:410706デフォルトの名無しさん
2006/11/30(木) 15:01:500707デフォルトの名無しさん
2006/11/30(木) 16:08:53#include <stdio.h>
#include <math.h>
#include <stdlib.h>
double func( int iN, double* pCn, double dX )
{
double dRet = 0.0;
int i;
for( i = iN; i >= 0; i-- ) {
if( i )
dRet += ( (*pCn) * pow( dX, (double)i ) );
else
dRet += *pCn;
pCn++;
}
return dRet;
}
// Tobe continue
0708デフォルトの名無しさん
2006/11/30(木) 16:10:17{
int iN, i;
double *pCn;
double *pTmp;
double dX;
printf( "N: " );
scanf( "%d", &iN );
if( iN < 1 ) return 0;
pCn = (double*)malloc( sizeof( double) * iN );
if( ! pCn ) return 1;
pTmp = pCn;
for( i = iN; i >= 0; i-- ) {
printf( "C%d: ", i ); scanf( "%lf", pTmp ); pTmp++;
}
printf( "x: f(x)\n" );
for( i = 0; i <= 10; i++ ) {
dX = (double)i * 0.1;
printf( "%lf: %lf\n", dX, func( iN, pCn, dX ) );
}
free( (void*)pCn );
return 0;
}
0709sage
2006/11/30(木) 16:21:27[2] 問題文(含コード&リンク):自身の氏名の漢字の内部コードを16進数、及び2進数で出力せよ
[3] 環境
[3.1] OS:WINDOWS
[3.2] コンパイラ名とバージョン:Vsual C++ 2005
[3.3] 言語:C++
[4] 期限:2006/12/1(明日),A.M.8:00頃←細かくてすみません
[5] その他の制限:整数を2進数に出力すること、文字コードを16進数に出力することはできます。
「氏名の漢字」は漢字であれば何でも構いません。
制限でも触れたように整数を2進数に出力すること、文字コードを16進数に出力することは出来るのですが、同時に行うことが出来ません。
明日のお昼に提出の課題で、家にはギリギリ8時ごろまでいられます。
よろしくお願いいたします。
0710デフォルトの名無しさん
2006/11/30(木) 16:27:15続けて処理すれば、「同時」にしなくてもいいんジャマイカ?
0711デフォルトの名無しさん
2006/11/30(木) 16:27:31分けてやればいいだろ
常識的に考えて・・・
0712デフォルトの名無しさん
2006/11/30(木) 16:39:34出力結果に
「○」の16進表現は〜、2進表現は〜。
「×」の16進表現は〜、2進表現は〜。
という風に表示出来たらなって思ってたのですが、諦めて16進と2進、それぞれ別々に表示したほうが作るのも簡単ですよね。
本当に初心者でごめんなさい><
0713デフォルトの名無しさん
2006/11/30(木) 16:40:21もういいや
0714デフォルトの名無しさん
2006/11/30(木) 17:15:40[2] 問題文:使用される文字列が英大文字26文字のみの場合の文字列探索法(BM法)
のプログラム。ただし、英大文字以外の文字がテキストまたはパターンに入力された
ときは、再入力を求めること。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
よろしくおねがいします。
0715デフォルトの名無しさん
2006/11/30(木) 17:42:22[2] 問題文:キーボードから読み込んだ整数n以下の素数をすべて求め、1行に12個数値を表示せよ。
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語: C
[4] 期限: 2006年12月3日まで
[5] その他の制限: 制限は特に無いです。
すみません、よろしくお願いします。
0716デフォルトの名無しさん
2006/11/30(木) 17:43:29>1行に12個数値を表示せよ。
1行に12個ずつ って意味だよな?
0717デフォルトの名無しさん
2006/11/30(木) 17:45:19はい、そういうことです。よろしくお願いします。
0718デフォルトの名無しさん
2006/11/30(木) 18:12:03#include <stdio.h>
int isprime(int value){
int i;
if(value%2==0) return (value==2);
for(i=3;value/i>=i;i+=2)
if(value%i==0)
return 0;
return 1;
}
int main(void){
int i, n;
int prime_count=0;
printf("Input positive number :");
scanf("%d", &n);
for(i=2;i<n;i++){
if(isprime(i)){
printf(" %d", i);
prime_count++;
if(prime_count%12==0)
printf("\n");
}
}
return 0;
}
0719デフォルトの名無しさん
2006/11/30(木) 19:33:42[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3051.txt
この整数値の昇順リストを作成するプログラムを、指定データ(下記deletedata)と同じデータを持つセルをすべて
消去し、消去するデータがあったときはdata foundと1回表示し、ないときにはno such data
と1回表示するvoid DeleteAlist(struct LIST **ptr, int deletedata)を再帰を用いることによって作成せよ。
指定データを持つセルの先頭のものを消去する関数を参考にせよ。
void Deletelist(struct LIST **ptr, int deletedata){
if((*ptr)==NULL){
printf("no such data \n");
}else if((*ptr)->data == deletedata){
struct LIST *tmp;
printf("data found\n");
tmp=(*ptr)->nextptr;
free(*ptr);
*ptr=tmp;
}else DeleteList(&((*ptr)->nextptr),deletedata);
}
[3] 環境
[3.1] OS: Windows XP
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語: C
[4] 期限: 明日
[5] その他の制限:
昨日も聞いたんですが、
条件が追加され、出題されました。お願いします。。
0720デフォルトの名無しさん
2006/11/30(木) 20:16:25以下と差し替えて DeleteAlist() の戻り値が0なら no such data, 1以上なら data found と表示すればよろし
int DeleteAlist( struct LIST** ppList, int iDelKey )
{
LIST* pTmp;
int iDelNum = 0;
while( *ppList ) {
if( (*ppList)->data == iDelKey ) {
pTmp = (*ppList)->nextptr;
free( (void*)*ppList );
*ppList = pTmp;
iDelNum++;
}
else {
ppList = &((*ppList)->nextptr);
}
}
return iDelNum;
}
0721デフォルトの名無しさん
2006/11/30(木) 21:28:03再帰で書くことはできないんですか?
0722デフォルトの名無しさん
2006/11/30(木) 21:35:55[2] 問題文(含コード&リンク):
整数 ID の二分木を表示する関数(簡単なものがスライドにあるのでそのまま打ち込んでも良いが、もっと見やすく拡張したほうが良い)と
二分探査木を作る関数(スライドにもあるが改変しても良い)を作り、二分探査木に以下のようなデータを入力した結果を表示せよ。
データは並んでいる順に入力すること。
(ア)1,2,3,4,5,6,7
(イ)1,7,2,6,3,5,4
(ウ)4,2,1,6,3,5,7
ソース ttp://www.geocities.jp/c_prog2011/tree_1.txt
[3] 環境
[3.1] OS: Windows XP Home Edition SP2
[3.2] コンパイラ名とバージョン: Microsoft Visual Studio 2005 Academic Edition
[3.3] 言語: C
[4] 期限: 2006年12月6日23:59まで
[5] その他の制限: 線形リストの基本は学んだが二分木は初めてです。
よろしくお願いします。
0723デフォルトの名無しさん
2006/11/30(木) 21:36:25int DeleteAlist( struct LIST** ppList, int iDelKey )
{
LIST* pTmp;
int iDelNum = 0;
if( ppList == NULL )
return 0;
while( *ppList ) {
if( (*ppList)->data == iDelKey ) {
pTmp = (*ppList)->nextptr;
free( (void*)*ppList );
*ppList = pTmp;
iDelNum++;
}
else {
ppList = &((*ppList)->nextptr);
}
}
DeleteAlist(NULL, int iDelKey);
return iDelNum;
}
0724デフォルトの名無しさん
2006/11/30(木) 21:44:53どうもありがとうございました!
0725デフォルトの名無しさん
2006/11/30(木) 21:57:36コンパイル通らなかったです・・・・
0726デフォルトの名無しさん
2006/11/30(木) 22:02:45あ、ごめん
下から三行目のintいらない
コンパイルできないならエラーメッセージくらい書いた方がいいよ
0727デフォルトの名無しさん
2006/11/30(木) 22:13:18int 消しました。まだエラーでます
エラー E2451 F:\borland\bcc55\list\list.c 11: 未定義のシンボル LIST(関数 DeleteAlist )
エラー E2451 F:\borland\bcc55\list\list.c 11: 未定義のシンボル pTmp(関数 DeleteAlist )
エラー E2140 F:\borland\bcc55\list\list.c 12: ここでは宣言はできない(関数 DeleteAlist )
だそうです
11行目と12行目はこうなってます
LIST* pTmp;
int iDelNum = 0;
0728デフォルトの名無しさん
2006/11/30(木) 22:18:350729デフォルトの名無しさん
2006/11/30(木) 22:19:46struct LIST* pTmp;
自分でコンパイルしてないから何とも言えんけど
0730デフォルトの名無しさん
2006/11/30(木) 22:23:00>>729
通りました〜どうも
0731720
2006/11/30(木) 22:40:45まぁ、回答してくれた人がいるみたいなので良かったな。
だけど、これを再帰で書いた奴が居たら書き直させるわ。
再帰にして解り易くなる訳でもねぇしデメリットしかねぇじゃん。
ちゅことで俺なら、『こんなん再帰で書かせるなボケ』と講師に言うかな。
0732デフォルトの名無しさん
2006/11/30(木) 22:44:59結局は慣れの問題じゃないだろうか。
0733デフォルトの名無しさん
2006/11/30(木) 23:01:11[2] 問題文(含コード&リンク): ビットベクトルによる集合表現を用いて、2つ
の集合に対する要素の追加・削除・和集合、積集合、差集合を求めるプログラム
を作れ。
[3] 環境
[3.1] OS: Windows Xp
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語: C
[4] 期限: 明日
[5] その他の制限: なし
よろしくお願いします。
0734701
2006/11/30(木) 23:46:07すいません
func、#include <stdlib.h>、pow
は習っていないので、これを使わないC言語
をお願いします。
0735デフォルトの名無しさん
2006/11/30(木) 23:48:37習ってないなら調べれば。
0736デフォルトの名無しさん
2006/11/30(木) 23:57:48空気嫁
習ってないのを使ったら怪しまれるじゃねーか
と>>701の心境をエスパー
0737デフォルトの名無しさん
2006/12/01(金) 00:02:08なんら問題ないじゃないか
0738デフォルトの名無しさん
2006/12/01(金) 00:10:260739デフォルトの名無しさん
2006/12/01(金) 00:23:54「てめぇーなにおれのおしえてねーもんつかってんだよぉぅああん?」
と>>701の心境をエスパー
0740デフォルトの名無しさん
2006/12/01(金) 00:42:34と見たがどうか?
0741デフォルトの名無しさん
2006/12/01(金) 00:55:54阪大の授業より抜粋
コンピュータ基礎&基礎演習
ttp://www3.sys.es.osaka-u.ac.jp/iwai/cs/
/* 和集合 */
int Union(int A, int B) {
return A | B;
}
/* 積集合 */
int Intersection(int A, int B) {
return A & B;
}
/* 差集合 */
int Difference(int A, int B) {
return A & ~B;
}
/* 追加 */
int insert(int set, int atom) {
set |= (1L << (atom - 1));
return set;
}
/* 削除 */
int erase(int set, int atom) {
set &= ~(1L << (atom - 1));
return set;
}
0742707
2006/12/01(金) 01:11:52func は単なる関数の名前だ。この先も習う事は無いだろう。
ちゅかお前は文法も習ってないのかと小一時間....
pow が使えないなら
double poorPow( double x, int y )
{
double dRet = 1.0;
int i;
for( i = 0; i < y; i++ )
dRet *= x;
return dRet;
}
を func() の前に入れて
pow( dX, (double)i ) を poorPow( dX, i ) に直せ。
#include <math.h> は不要になる。
続く
0743707
2006/12/01(金) 01:15:42<stdlib.h> を使いたくないなら >>708 を以下の様に修正。
double *pCn; を
double aCn[256];
double *pCn = aCn;
に直す。
pCn = (double*)malloc(... と次の行を削除。
free(... の行を削除。
これで #include <stdlib.h> も不要となる。
0744デフォルトの名無しさん
2006/12/01(金) 01:18:28>>701
#include <stdio.h>
int main(void)
{
int i,j,n;
double x,fx;
double c[11];
printf("次数 : "); scanf("%d",&n);
if(n<0 || n>10){
printf("入力できる次数は0から10まで\n");
return 0;
}
for(i=n; i>=0; i--){
printf("C%d : ",i); scanf("%lf",&c[i]);
}
for(j=1; j<=10; j++){
x = j/10.0;
fx = c[n];
for(i=n-1; i>=0; i--){
fx = fx*x+c[i];
}
printf("f(%.1f) = %f\n",x,fx);
}
return 0;
}
0745デフォルトの名無しさん
2006/12/01(金) 01:25:40そのスライドは?
0746デフォルトの名無しさん
2006/12/01(金) 01:43:03それだけじゃダメだろ。
0747デフォルトの名無しさん
2006/12/01(金) 02:22:41再帰恐怖症
0749デフォルトの名無しさん
2006/12/01(金) 03:24:46幼稚ですね
0750デフォルトの名無しさん
2006/12/01(金) 03:40:47フッ
懸命になってようやく解いた解答を一言の元に否定されて
傷ついてやがんの
0751デフォルトの名無しさん
2006/12/01(金) 03:47:39同じ答えが出ればいいだろと言って技術を向上させる意思が皆無なのは救いようがないな
0752デフォルトの名無しさん
2006/12/01(金) 03:53:21ホーナー法なんて常識だろと思ってたんだがこのスレでは知らない人が二人ほどいたようだった。
ただコードの実行速度を速くしたいって、もう数値解析とかCGとか暗号の分野だけの気がするんだよな
普通にanx^n+a(n-i)x^(n-1)+…+a0 で計算した方が読みやすくていいコードなんじゃないかって
気がしてきた
0753デフォルトの名無しさん
2006/12/01(金) 04:44:000754デフォルトの名無しさん
2006/12/01(金) 04:56:400755デフォルトの名無しさん
2006/12/01(金) 04:56:48受け取る側はどんなもの受け取っても自分で作ったものより良ければそれでいいだろうけど
解答する側はそれなりにテーマ決めて臨んでるんじゃないかねえ
0756707
2006/12/01(金) 06:55:13>>750
懸命になってとか決め付けるなよ。
3分も掛かってないしコンパイルもしてないんだから。
>>751
下手と言われる筋合いは無いよ。
何らかの式を提示された場合、式の演算内容を f() としてまぁバカ正直に書くのは職業上の習慣だから。
まぁ問題をちゃんと読んで無いのは認めるけどね。
>>753
暇潰しだからなぁ...テーマとか言われても...
0757デフォルトの名無しさん
2006/12/01(金) 07:03:34たいした事言われてないのに一々レスするから必死に見える
ほっとけばいいのに
0758707
2006/12/01(金) 07:07:37>>752
ホーナー法って言うんだ。常識なの?知らんかったよ。
けど、これってただの漸化式処理の事だよね。
応用範囲が狭そうだから名前付ける様なもんかなぁ..
コード速度の話はホーナー法?の方が早いでしょ。
上で書いたけど3分で書いたコードだからあんまり責めないでね。
速度を早くする作業は結構あるよ。画像解析とかだとちょっとした工夫で数10倍早くなるから。.
0759デフォルトの名無しさん
2006/12/01(金) 07:26:290760デフォルトの名無しさん
2006/12/01(金) 07:32:14[2] 問題文(含コード&リンク): 整数配列dataにnum個のデータが「小さい順に整列
済みで」格納されている。(data[0]〜data[num-1])。目的とする整数(target)を入力したときに、
整数配列内の何番目にあるか出力せよ。(二分探索)
[3] 環境
[3.1] OS: (Windows xp)
[3.2] コンパイラ名とバージョン: (gcc 3.4)
[3.3] 言語: (C)
[4] 期限: (12/4/2006 までです。)
[5] その他の制限: (二分探索で求め、変数としてlow,high,midをつかっていただけると幸いです)
0761デフォルトの名無しさん
2006/12/01(金) 07:41:400762デフォルトの名無しさん
2006/12/01(金) 07:48:16だからこういう奴は救いようがないんだよ。
0763デフォルトの名無しさん
2006/12/01(金) 07:55:31ホーナー法はアルゴリズム論では常識。これを知らないと、
ちゃんとした勉強してきてないんだなあと一発で分かる。
応用範囲が狭そうというのは視野が狭い。
ホーナー法は、+ と * を一般の二項演算としたとき、これらが分配的
すなわち a * (b + c) = (a * b) + (a * c) を満たすなら適用可能。
たとえば + と min、max と min、などでも使える。
これを意識して、プログラムの自動変換の分野では、ホーナー法が
適用できるように、演算子を分配的にする手法などが研究されている。
0764デフォルトの名無しさん
2006/12/01(金) 07:56:00絶対見つかるものとする(unkunk
a[num]に数列は格納済み
nに探す数字を入れる
int low=0,high=num-1,mid=(low+high)/2;
while(a[mid]!=n){
if(a[mid]<n) low=mid;
else high=mid;
mid=(low+high)/2;
}
printf("%d",mid);
0765デフォルトの名無しさん
2006/12/01(金) 07:59:210766デフォルトの名無しさん
2006/12/01(金) 08:02:470767デフォルトの名無しさん
2006/12/01(金) 08:05:59ああそうか
printf("%d",mid+1);
0768デフォルトの名無しさん
2006/12/01(金) 08:32:01isgraph
それぞれを使ったらどうなりますか?
0769デフォルトの名無しさん
2006/12/01(金) 08:33:540770デフォルトの名無しさん
2006/12/01(金) 09:02:11>>760
mainは検証用だから適当に書き直す
#include <stdio.h>
int nibuntansaku(int n,int data[],int low, int high){
int mid=(low+high)/2;
if(data[mid]==n) return mid;
else if(high-low==1){
if(data[high]==n) return high;
else return -1;
}
else if(data[mid]<n) return nibuntansaku(n,data,mid+1,high);
else return nibuntansaku(n,data,low,high-1);
}
void main(){
int data[]={1,2,3,5,6,7,8,9};
int low=0,high=8,n;
scanf("%d",&n);
int tmp=nibuntansaku(n,data,low,high);
if(tmp!=-1) printf("%d番目\",tmp+1);
else printf("notfound\n");
}
0771デフォルトの名無しさん
2006/12/01(金) 09:04:09すいません。これです。
ttp://www.geocities.jp/c_prog2011/struct3.ppt
0772デフォルトの名無しさん
2006/12/01(金) 09:15:10×else if(high-low==1){
○else if(high-low<=1){
0773デフォルトの名無しさん
2006/12/01(金) 09:26:18失礼した
×else return nibuntansaku(n,data,low,high-1);
○else return nibuntansaku(n,data,low,mid-1);
0774デフォルトの名無しさん
2006/12/01(金) 09:30:52#include<stdio.h>
int bs(int *data,int target,int low,int high){
int mid=(high+low)/2;
if(high<low)return -1;
if(data[mid]==target)return mid;
else if(target<data[mid])return bs(data,target,low,mid-1);
else return bs(data,target,mid+1,high);}
int main(){
int data[] = {1,2,3,4,6,7,8,9,10,11};
int num = 10,target,ans;
scanf("%d",&target);
ans = bs(data,target,0,num-1);
if(ans!=-1)printf("%d番目\n",ans+1);
else printf("見つかりませんでした\n");return 0;}
0775デフォルトの名無しさん
2006/12/01(金) 10:34:28[2] 問題文: 別に用意したファイルdata.txt
(5人分の名前、身長、年齢が入力されたファイル。こちらを参照http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3061.txt)から
データを読み取り、年齢順に並べ替えて表示する。また表示した内容をファイルに書き直す。
[3] 環境
[3.1] OS: Windows xp
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語: C
[4] 期限: 12/2/2006 7:00 までです。
[5] その他の制限: 特になし
自分でここまでできました。http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3062.txt
しかし、実行するとエラーメッセージが出て強制終了っぽくなります。
どうしてでしょうか?
また、29行目のs[0]=a;を実行するとx[4]=12となってしまうみたいなのですが、
これも理由がわかりません。
お願いします。
0776デフォルトの名無しさん
2006/12/01(金) 10:37:27struct person s[4];
int x[4];
↓
struct person s[5];
int x[5];
0777デフォルトの名無しさん
2006/12/01(金) 10:40:14このソースは冗談だろ?
冗談だと言ってくれ!
0778デフォルトの名無しさん
2006/12/01(金) 10:58:39鼻からコーヒーふきだしちゃったじゃないか!!!1111111
どうしてくれるんだ!!!!!!!11
0779デフォルトの名無しさん
2006/12/01(金) 11:03:50でも何も分からなかったらこんなもんなのかもね…
0780デフォルトの名無しさん
2006/12/01(金) 11:05:410781デフォルトの名無しさん
2006/12/01(金) 11:09:20-― ̄ ̄ ` ―-- _ だめぽ・・・・・
, ´ ......... . . , ~  ̄" ー _
_/...........::::::::::::::::: : : :/ ,r:::::::::::.:::::::::.:: :::.........` 、
, ´ : ::::::::::::::::::::::::::::::::::::/ /:::::::::::::: : ,ヘ ::::::::::::::::::::::: : ヽ
,/:::;;;;;;;| : ::::::::::::::::::::::::::::::/ /::::::::::::::::::: ● ::::::::::::::::: : : :,/
と,-‐ ´ ̄: ::::::::::::::::::::::::::::::/ /:::::::::::r(:::::::::`'::::::::::::::::::::::く
(´__ : : :;;:::::::::::::::::::::::::::/ /:::::::::::`(::::::::: ,ヘ:::::::::::::::::::::: ヽ
 ̄ ̄`ヾ_::::::::::::::::::::::し ::::::::::::::::::::::: : ●::::::::::::::::::::::: : : :_>
,_ \:::::::::::::::::::::::::::::::::::::::::::::: `' __:::::::::-‐ ´
(__  ̄~" __ , --‐一~ ̄ ̄ ̄
 ̄ ̄ ̄
0782デフォルトの名無しさん
2006/12/01(金) 11:19:240783デフォルトの名無しさん
2006/12/01(金) 11:50:52駄作ではあるがこれでも持って帰って今まで悪い夢でも見ていたんだろうとみんなで思おうじゃないか。
そう、全て悪い夢だったのさ。
#include <stdio.h>
#include <stdlib.h>
#define FILENAME_READ "data.txt"
#define FILENAME_WRITE "data_new.txt"
#define NAMESIZE 40
#define REALLOC_UNIT 10
struct person{int age;float height;char name[NAMESIZE];};
int main(){int i,j,k,n;FILE *fp;struct person *s,tmp;
if((fp=fopen(FILENAME_READ,"r"))==NULL){fprintf(stderr,"Fileopen failed (read:"FILENAME_READ").\n");return 1;}
n=0;s=(struct person*)malloc(sizeof(struct person)*REALLOC_UNIT);
while(fscanf(fp,"%d %f %s",&(s[n].age),&(s[n].height),s[n].name)!=EOF)
{n++;if(n%REALLOC_UNIT==0)s=(struct person*)realloc(s,sizeof(struct person)*(n+REALLOC_UNIT));}fclose(fp);
for(i=0;i<n-1;i++){k=i;for(j=i+1;j<n;j++)if(s[k].age>s[j].age)k=j;if(k!=i){tmp=s[i];s[i]=s[k];s[k]=tmp;}}
for(i=0;i<n;i++)printf("%d %f %s\n",s[i].age,s[i].height,s[i].name);
if((fp=fopen(FILENAME_WRITE,"w"))==NULL){fprintf(stderr,"Fileopen failed (write:"FILENAME_WRITE").\n");return 1;}
for(i=0;i<n;i++)fprintf(fp,"%d %f %s\n",s[i].age,s[i].height,s[i].name);fclose(fp);return 0;}
0784デフォルトの名無しさん
2006/12/01(金) 11:54:12[2] 問題文(含コード&リンク):10個の倍精度実数型データをキーボードから入力し、
それらのデータを小さい順に並べ替えて画面表示するプログラムを作成しなさい。ただし、
次に示すステップを満たす事とし、入力するデータの中に必ず1種類以上の同じ数値を含むこと
(1)入力されたデータを1次配列double data[10]に格納する
(2)すべての入力が終了した後で、配列を操作してデータの並べ替えを行う
(3)データの並べ替えが終了した後で、画面表示を行う
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:12月3日まで
[5] その他の制限: なし
よろしくお願いします
0785デフォルトの名無しさん
2006/12/01(金) 12:56:17#include <stdio.h>
#include <stdlib.h>
#define N 10
int div(double *pa, int l, int r){
int pv = r--;
double tmp;
while(1){
while(pa[l] < pa[pv]){ l++; }
while(pa[r] > pa[pv] && l < r){ r--; }
if(l >= r){ break; }
tmp = pa[l]; pa[l] = pa[r]; pa[r] = tmp;
}
tmp = pa[l]; pa[l] = pa[pv]; pa[pv] = tmp;
return l;
}
int sort(double *pa, int min, int max){
int pv;
if(min >= max){ return 0; }
pv = div(pa, min, max);
sort(pa, min, pv - 1); sort(pa, pv + 1, max);
return 1;
}
int main(void){
double data[N];
int i;
for(i = 0; i < N; ++i){ printf("num%d... ", i + 1); scanf("%lf", &data[i]); }
sort(data, 0, N - 1);
for(i = 0; i < N; ++i){ printf("%lf ", data[i]); }
return 0;
}
0788714
2006/12/01(金) 14:00:52完全にスルーされているのですが・・・・・・
よろしくおねがいします。
0789デフォルトの名無しさん
2006/12/01(金) 14:09:44それは無いだろ。
実際には屑揃いの中に割とマシな奴が居ると見て貰える。
0790デフォルトの名無しさん
2006/12/01(金) 14:16:54だから、教わるほうが屑なら教えるほうも屑という設定を勝手に作って
>>701の心境をエスパーするという冗談なのさ。
0791デフォルトの名無しさん
2006/12/01(金) 14:58:47そりゃ締め切り書かなきゃスルーされる確率も上がるだろ
常識的に考えて…
また解答側は全ての問題に答える義務があるわけではない
つまらなそうと思えば当然スルーされる
BM法 cでググれば答えがいくらでも出てくるものをわざわざ
やるのはめんどくさいんだよ
0792デフォルトの名無しさん
2006/12/01(金) 15:36:21割とマシだと思われてたのに、次の授業では宿題でやったことと同じ事が出来なかったら
悲惨じゃん
0793デフォルトの名無しさん
2006/12/01(金) 15:47:430794752
2006/12/01(金) 16:14:35別にホーナー法使ってないプログラムにケチをつけたわけじゃないよ
俺自身も752に書いてるようにホーナー法とか最適化手法なんて
もうバッドノウハウなのかなあと思いかけてるくらいだし
ホーナー法使ったプログラムを書いたらホーナー法知らない人にケチをつけられたってだけ
>>763
なるほど 勉強になったわ
トンクス
0795デフォルトの名無しさん
2006/12/01(金) 18:17:36片方が必死なのかと思ったらもう一方も必死なんだな
0796デフォルトの名無しさん
2006/12/01(金) 18:53:51[2] 問題文:
以下の要求(1)〜(6)を満たすクイックソートのプログラムを実現しなさい.
(1)軸要素の選び方については,以下の3方法が利用できるようにすること.
(a) ランダムに一つを選ぶ. (b) データの先頭,最後,真中の位置の3要素の中央値を選ぶ.
(c) データの先頭から見て最初に得られた2つの異なる値の大きいほうをとる.
(2)軸要素で分割した部分配列のサイズ(要素数)が小さくなった場合には, 基本的なソート方法を用いて並び替えること.
(3)プログラム終了時にデータ総数と比較回数を表示すること. また,分割の回数および基本的ソート方法が用いられた回数も表示すること.
いずれも「分かりやすく」表示するように工夫すること.
(5)プログラム実行は,次のような引数付きで行えること.
(ここでは,プログラムファイル名をquick81.cとし,
これをコンパイルしてquick81という実行形式ファイルを作成したとする.)
% quick81 inputfile outputfile pivot_selection basic_sort small_number debug_mode
inputfile : ソートするデータが入ったファイルの名前. outputfile : ソート後のデータを出力するファイルの名前
pivot_selection : a,b,c のいずれかの文字で上の軸要素の選び方に対応する.
basic_sort : b,s,i のいずれかの文字.それぞれ,バブル,選択,挿入ソートに
相当する.分割した部分配列のサイズが小さくなった場合に用いるソート方法を設定する.
small_number : 正の整数.この数字より部分配列のサイズが小さくなったら,上で指定した基本的なソート方法を用いる.
debug_mode : vあるいはnの文字。vの場合は,データの分割の仕方が分かりやすいように、軸要素とそれにより分割された部分配列のサイズを
逐次出力させるようにすること. n の場合は上の出力はしない.
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:12月3日
■ このスレッドは過去ログ倉庫に格納されています