08/10/28 11:04:05
>>857
課題1
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
/* (x,y)-平面の点を座標で表す構造体 */
struct Point{
double x, y;
};
/* 原点からの長さを求める関数 */
double length_vector(struct Point *p){
return sqrt(pow(p->x, 2) + pow(p->y, 2));
}
/* 平面の点を表示する関数 */
void print_v(struct Point *p){
printf("(%f, %f)\n", p->x, p->y);
}
880:デフォルトの名無しさん
08/10/28 11:04:38
>>857 続き
int main(void)
{
struct Point p;
printf("Input Point X: ");
scanf("%lf", &p.x);
printf("Input Point Y: ");
scanf("%lf", &p.y);
print_v(&p); /* print_vを使用して,座標の表示 */
printf("The length of vector: %f\n", length_vector(&p) );
return 0;
}
881:デフォルトの名無しさん
08/10/28 11:16:47
[1] 授業単元:データの可視化
[2] 問題文:
1: 三角関数 sin x、cos xは、テイラー展開により、
xの多項式に展開できる。2m+1次までの展開を計算する関数、
を作れ、関数の宣言は、
float MySin(float x, int m)とせよ。
2:上記MySinを使って、次数を増やすにつれて、三角関数に近づくこと示せ。
xの範囲を-πからπまでとし、π/100毎にm=0, 1, 2, 3に対して計算せよ。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:2008年11月3日16:00まで
お願いします
882:デフォルトの名無しさん
08/10/28 11:17:04
>>857
課題2
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
/* (x,y)-平面の点を座標で表す構造体 */
struct Point{
double x, y;
};
/* 要素を代入する関数 */
void input_point(struct Point data[], int i)
{
printf("Input Point p[%d].x: ", i);
scanf("%lf", &data[i].x);
printf("Input Point p[%d].y: ", i);
scanf("%lf", &data[i].y);
}
/* 長さを求める関数 */
double length_vector2(struct Point data[]){
return sqrt(pow(data[0].x - data[1].x, 2.0) + pow(data[0].y - data[1].y, 2.0));
}
883:デフォルトの名無しさん
08/10/28 11:17:47
>>857 続き
int main(void)
{
struct Point p[2]; /* 構造体配列の定義 */
int i;
for (i = 0; i < 2; i++)
{
input_point(p, i); /* 座標点の入力 */
}
printf("The length of vector: %lf \n", length_vector2(p) );
return 0;
}
884:デフォルトの名無しさん
08/10/28 12:00:28
>>881
URLリンク(kansai2channeler.hp.infoseek.co.jp)
こゆこと?
885:デフォルトの名無しさん
08/10/28 13:12:20
>>873
ありがとうございました♪
もっと勉強します。。。
886:しろうと
08/10/28 13:20:49
signal(SIGINT, func1);
でコンパイルするとpassing argument 2 of 'signal' from incompatible pointer type
という警告が出ます。どう書けばいいですか?(gcc)
887:デフォルトの名無しさん
08/10/28 14:02:49
>>886
void func1(int sig)
{
//処理
}
888:しろうと
08/10/28 14:13:08
>>887
有り難うございました。void func1(void)で定義してました。sigという整数
型の引数が渡って来てるんですね。
889:しろうと
08/10/28 14:14:58
訂正
sigという整数型の引数が渡って来てるんですね。
→整数型の引数が渡って来てるんですね。
890:デフォルトの名無しさん
08/10/28 15:07:15
C言語をやっている人はアルゴリズムも学習しているイメージがあるので
ここで聞かせて頂きます。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
上記は疑似コードで書かれていますが、アルゴリズム1もアルゴリズム2も
配列の中から最小値を探し出す処理をしているそうですが、アルゴリズム1の
02行目では配列をどうやってtempにぶちこめるのでしょうか?
891:デフォルトの名無しさん
08/10/28 15:58:48
アルゴリズムスレか擬似コードスレへ行ってください
892:デフォルトの名無しさん
08/10/28 16:00:44
>>889
signal( )に渡した第1引数がそのまま渡される。
893:デフォルトの名無しさん
08/10/28 16:01:55
>>890
関数を再帰呼び出ししている
1 #include <stdio.h>
2
3 int algo1(int ary[], int x)
4 {
5 if ( x == 0 ) return ary[0];
6 else {
7 int temp = algo1(ary, x-1);
8 if ( temp <= ary[x] ) return temp;
9 else return ary[x];
10 }
11 }
12
13
14 int main(void)
15 {
16 int a[] = {4, 3, 2, 1, 5, 7, 8, 9, 6, };
17
18 printf("min == %d\n", algo1(a, sizeof(a)/sizeof(a[0])-1));
ここの要素数引く1するのが糞だけど
19
20 return 0;
21 }
アルゴリズム2は、たぶん2分検索とかじゃないか
894:892
08/10/28 16:03:11
いや言い方が変だな
まあシグナルが引数に渡されるということで
895:デフォルトの名無しさん
08/10/28 16:31:56
[1] 授業単元:C
[2] 問題文(含コード&リンク): URLリンク(kansai2channeler.hp.infoseek.co.jp)
これを実行して整数を入力すると入力した逆の単項式が出力されるので入力した順番に出力させよ
ちなみに係数も乗も0にするとプログラムは終了されます
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: お任せ
[3.3] 言語: C
896:デフォルトの名無しさん
08/10/28 17:05:12
問題:
・普通の日付をユリウス日に変換して
ユリウスに○日後を足し算して
・ユリウス日から日付を求める
言語:C/C++
期限:今日中
制限:無し
おねがいしまう
897:775
08/10/28 17:08:19
お願いします。本当にさっぱりわからないので…
誤字修正しました
[1] 授業単元:Cプログラミング
[2] 問題文(含コード&リンク):
LU分解法を用いて、
URLリンク(kansai2channeler.hp.infoseek.co.jp)
のmatrix2.datファイルを参照して、
その係数行列Aの逆行行列X=A^-1を求めるプログラムを作成してください。
AX=I(Iは単位行列)となることをしめしてください、
URLリンク(kansai2channeler.hp.infoseek.co.jp)
に含まれるmat_auxに含まれる補助関数を使ってください。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gc
[3.3] 言語:C
[4] 期限: ([2008年11月6日まで]
898:デフォルトの名無しさん
08/10/28 17:37:04
[1] 授業単元: C言語
[2] 問題文: 1変数関数 f(x)=0.5*(x-2)*(x-2) の値が最小となる点を求めるプログラムを作成せよ。
[3] 環境
[3.1] OS: mac
[3.2] コンパイラ:gcc
[3.3] 言語: C
[4] 期限: 10月30日まで
[5] その他の制限:基本的な関数のみでお願いします
899:デフォルトの名無しさん
08/10/28 17:49:21
どれもレベル高いなぁ('`A)
もう一回勉強しなおそう
900:デフォルトの名無しさん
08/10/28 20:16:48
>>896
自己解決しました
901:デフォルトの名無しさん
08/10/28 21:05:38
>>893
くそみそ?
902:デフォルトの名無しさん
08/10/28 23:46:59
>>898
それx=2のときのf(2)=0が最小値なんだけど
903:デフォルトの名無しさん
08/10/28 23:48:50
>>898
すごい馬鹿みたいな総当りでいいか?
904:デフォルトの名無しさん
08/10/28 23:51:09
>>898
f(x)を微分したf'(x)の変曲点を求めるとかな
905:デフォルトの名無しさん
08/10/28 23:52:23
いやf'(x)=0をニュートン法か二分法で解いた方がいいな
906:デフォルトの名無しさん
08/10/29 00:39:08
[1] 授業単元: C言語
[2] 問題文(含コード&リンク): ある文字列を入力、その後また文字列を入力し、最初に入力した文字列に後で入力した文字列が含まれていれば1、含まれていなければ0と表示するプログラムを作成。
[3] 環境
[3.1] OS: Linux
[3.2] gcc
[3.3] C
[4] 期限: 2008/10/29 12:00まで
[5] その他の制限: 自作の関数を使うかstrcmp関数を使う。ポインタ変数を使う。#include<stdio.h>・#include<string.h>のみ使用。
907:デフォルトの名無しさん
08/10/29 00:42:26
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク): 大文字の文字列を小文字に変換するプログラム。文字列を入力する際に1文字でも大文字以外の文字が入っていれば、エラーを表示しもう1度入力を促すようにする(continue文で)
[3.1] OS: Linux
[3.2] gcc
[3.3] C
[4] 期限: 2008/10/29 12:00まで
[5] その他の制限: 自作の関数を使う。ポインタ変数を使う。#include<stdio.h>のみ使用。
905・906ともどもよろしくおねがいします。
908:デフォルトの名無しさん
08/10/29 00:53:58
[1] 授業単元:プログラミング基礎
[2] 問題文(含コード&リンク):正または負の八桁以内の整数を入力し、次の変換法則にしたがって
文字列に変換して、結果を出力するプログラム
*変換規則
各桁の数を半角の数字に変換し、文字型配列に右詰め(最下位桁の数字を配列要素[11])
で格納し、3桁ごとに","を挿入して、最上位桁の文字の前に'+'または'-'の符号を付加する。
符号を格納した配列要素より左の要素には空白が格納されている。また、配列要素[11]には
ヌル文字が格納されている。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: bcc55
[3.3] 言語: C
[5]ポインタはまだ習っていないです
どうやるかさっぱり分かりません・・・
特に3桁ごとに、を挿入したり最後に+や-を付ける所で思考が止まりました
長くて読みにくいと思いますがどうかよろしくお願いします。
909:775
08/10/29 01:01:47
お願いします。本当にさっぱりわからないので…
誤字修正しました
[1] 授業単元:Cプログラミング
[2] 問題文(含コード&リンク):
LU分解法を用いて、
URLリンク(kansai2channeler.hp.infoseek.co.jp)
のmatrix2.datファイルを参照して、
その係数行列Aの逆行行列X=A^-1を求めるプログラムを作成してください。
AX=I(Iは単位行列)となることをしめしてください、
URLリンク(kansai2channeler.hp.infoseek.co.jp)
に含まれるmat_auxに含まれる補助関数を使ってください。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限: ([2008年11月6日まで]
910:デフォルトの名無しさん
08/10/29 01:29:16
>>898は、多少一般化して、任意の一変数多項式関数の最小値にしたらいいだろう
911:デフォルトの名無しさん
08/10/29 01:42:04
[1] 授業単元: プログラミング基礎
[2] 問題文: URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS: Windows XP
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 10月30日 23:59まで
よろしくおねがいします
912:デフォルトの名無しさん
08/10/29 02:10:44
>>911
割れるだけ割る。 素因数分解。 ユークリッドの互除法。 などがある。
ソースはユークリッドの互除法。
3つの数の最大公約数は、2つずつの最大公約数を求めて、2つの最大公約数を求めればいいだろう
913:デフォルトの名無しさん
08/10/29 02:14:38
3つのはこれでいいのでは?
int gcd3(x, y, z){
return gcd( gcd(x,y), gcd(y,z));
}
914:デフォルトの名無しさん
08/10/29 02:50:51
int gcd3(x, y, z){
return gcd( gcd(x,y), z);
}
で十分じゃない?
915:デフォルトの名無しさん
08/10/29 13:35:50
>>906,907
URLリンク(kansai2channeler.hp.infoseek.co.jp)
と思ったらタイムオーバー
916:デフォルトの名無しさん
08/10/29 14:34:52
「入力された任意桁数(30桁以下)の整数に対し、各位の値を、配列を用意してそれに1つづつ格納する」のはどのようにするとスマートでしょうか・・・??
917:デフォルトの名無しさん
08/10/29 14:48:03
>>916
スマートとか考えると後で意味不明のコーディングになる
forループでいいだろ
918:デフォルトの名無しさん
08/10/29 14:56:40
自分でやってみましたが、powを使うとよく分からないことに・・・(泣)
言い方を変えて、<math.h>を極力使わないようにしたいです・・・
919:デフォルトの名無しさん
08/10/29 15:05:09
for(i=0; i<30; i++){
arr[i] = n%10;
n /= 10;
}
920:デフォルトの名無しさん
08/10/29 15:17:13
こんなに小さいプログラムでいいんですね(^^;
3時間かけて諦めた自分は何なんだろうorz
921:デフォルトの名無しさん
08/10/29 15:21:05
30桁だから文字列だろ
#include <stdio.h>
int main(void)
{
char num[] = "123456789012345678901234567890";
int arr[30];
int i;
int c = strlen(num);
for (i = 0; i < c; i++)
{
arr[c - i - 1] = num[i] - '0';
}
for (i = 0; i < c; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
922:デフォルトの名無しさん
08/10/29 15:23:21
>>921
はいエラー
923:デフォルトの名無しさん
08/10/29 15:26:07
いちいちstring.h使わんでも
forで0になるまで回せばいいじゃん。
>>919だと任意桁数ってのに合わないからね
924:916
08/10/29 16:01:52
>>921
やはり>>916 の書き方が悪かったです…。
任意桁数の整数は、入力されたものを使うことになります。
925:デフォルトの名無しさん
08/10/29 18:08:16
>>908
URLリンク(www.jitec.jp)
これの問6とほぼ一緒な感じか?
a,b,cに入るのは
a: /= 10
b: i % 3
c: i < j; i++, j--
正の整数に+をつけるなら、
if(minus != 0){
str[j++] = '-';
}
この付近に少しコードを付け足せばできると思う。
926:デフォルトの名無しさん
08/10/29 18:21:20
>>925
すまん、勘違いした。
右詰めにするのか…。
927:デフォルトの名無しさん
08/10/29 18:41:54
[1] 授業単元: プログラミング演習
[2] 問題文:1から50までの整数のうち,素数であるものを全て書き出すプログラムを,for文を用いて作成.
出力結果は次のように横に並ぶようにする.
1 3 5 7 11 13 17 19 23 29 ・・・・
[3] 環境
[3.1] OS: Windows Vista
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 11月4日 16:00まで
[5] その他の制限:2重ループを用いる。nの素数判断は,2~n-1までの数で順にわり算して,全ての数で割り切れなければnは素数。
for文までしか習ってないのでそのあたりを考慮して頂けたらありがたいです。よろしくお願いします。
928:デフォルトの名無しさん
08/10/29 18:47:04
>>927
#include <stdio.h>
int main()
{
int i, j;
for (i = 1; i <= 50; ++i) {
for (j = 2; j <= i; ++j) {
if (j == i) {
printf("%d ", i);
} else if (i % j == 0) {
break;
}
}
}
putchar('\n');
return 0;
}
929:928
08/10/29 18:49:28
int main()
{
int i, j;
for (i = 1; i <= 50; ++i) {
for (j = 2; j <= i - 1; ++j) {
if (i % j == 0) {
break;
}
}
if (j == i) {
printf("%d ", i);
}
}
putchar('\n');
return 0;
}
すいませんこっちのほうがま真っ当です
930:デフォルトの名無しさん
08/10/29 19:09:55
[1] 授業単元: プログラミング基礎
[2] 問題文:
(以下の問題は、 算数にチャレンジ!! の中の 第559回問題 からの引用。)
1~10の数が書かれたカードが1枚ずつ、全部で10枚あります。
今、これらのカードを並べ、隣り合った数の差を左から次々に加えていくことにします。例えば、
2,5,6,8,1,4,3,9,7,10
と並べたならば、
3+1+2+7+3+1+6+2+3=28
ということになります。
では、この計算結果が最も大きくなるようにカードを並べると、結果はいくらになるでしょうか。(問題終)
元の問題は算数の問題なので論理で答えを出すものだが、ここではプログラムを書いてその最大値を求めて欲しい。
[3] 環境
[3.1] OS: Windows XP
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 10月14日まで
よろしくおねがいします
931:デフォルトの名無しさん
08/10/29 19:15:13
大きい数字が中心で1や2は端がいいな
932:デフォルトの名無しさん
08/10/29 19:53:24
一般化して100個でも出来るのがいいな
933:デフォルトの名無しさん
08/10/29 20:12:11
プログラムって総当たりってこと?
結構時間かかりそうとおもったけど、10桁くらいなら余裕か…。
934:デフォルトの名無しさん
08/10/29 20:19:50
>>933
おそらく総当りだと思います
935:デフォルトの名無しさん
08/10/29 21:09:12
>>930
100個は無理。
#include<stdio.h>
#include<string.h>
#define M 10
unsigned int kaijyo(int k){unsigned int s=1; for(;k>0;k--)s*=k; return s;}
void retuprt(unsigned int *x){for(int n=0;n<M;n++)printf("%d ",x[n]);}
unsigned int sanowa(unsigned int *x){unsigned int s=0,n; for(n=0;n<M-1;n++)s+=x[n+1]>x[n]?x[n+1]-x[n]:x[n]>x[n+1];return s;}
main(){
unsigned int i,j,k;
unsigned int orgnum[M],num[M],jretu[M];
for(i=0; i<M; i++) orgnum[i]=i+1;
int max=0; unsigned int maxretu[M];
for(k=0;k<kaijyo(M);k++){
memcpy(num,orgnum,4*M);
int N=k;
for(i=M;i>=1;i--) {
int n=N % i; jretu[i-1]=num[n];
for(j=n;j<i-1;j++) num[j]=num[j+1];
N/=i;}
i=sanowa(jretu);
if(max<i){max=i;memcpy(maxretu,jretu,4*M);}
}
retuprt(maxretu); printf(" max=%d\n",max);
}
936:デフォルトの名無しさん
08/10/29 21:14:43
最大値を与える列を求める
#include<stdio.h>
#include<string.h>
#define M 10
void retuprt(unsigned int *x){for(int n=0;n<M;n++)printf("%d ",x[n]);}
unsigned int sanowa(unsigned int *x){unsigned int s=0,n; for(n=0;n<M-1;n++)s+=x[n+1]>x[n]?x[n+1]-x[n]:x[n]>x[n+1];return s;}
main(){
unsigned int i,j,k;
unsigned int orgnum[M],num[M],jretu[M];
for(i=0; i<M; i++) orgnum[i]=i+1;
for(k=0;k<3628800;k++){
memcpy(num,orgnum,4*M);
int N=k;
for(i=M;i>=1;i--) {
int n=N % i; jretu[i-1]=num[n];
for(j=n;j<i-1;j++) num[j]=num[j+1];
N/=i;}
if(sanowa(jretu)==29){retuprt(jretu);printf("\n");}
}}
937:デフォルトの名無しさん
08/10/29 21:18:07
プ
[4] 期限: 10月14日まで
938:935
08/10/29 21:21:55
間違えた
939:デフォルトの名無しさん
08/10/29 21:23:28
改めて>>877の問2)からどなたかお願いします。
問2)連結リストの先頭の次に、セルを一つ追加する関数を作成する。セルのelement
メンバの値は0 でよい。
つまり、cell1 → cell2 → cell3 → NULL
であるときに、この関数を1 回呼ぶと、
cell1 → (新しいセル) → cell2 → cell3 → NULL となるようにすればいい。
問3)連結リストの先頭の前に、セルを一つ追加する関数を作成せよ。セルのelement
メンバの値は0 でよい。
つまり、cell1 → cell2 → cell3 → NULL
であるときに、この関数を1 回呼ぶと、
(新しいセル) → cell1 → cell2 → cell3 → NULL となるようにすればいい。
自分なりに問2を進めてみたのですがvoid add_cell_secondをどう書いたらいいのでしょうか?
URLリンク(kansai2channeler.hp.infoseek.co.jp)
940:デフォルトの名無しさん
08/10/29 21:24:28
これって解が214176個もあるぞ。 問題として解答するなら30にならないことも示す必要あるな。
941:940
08/10/29 21:37:08
まちがえた
942:940
08/10/29 21:40:22
11まではなんとかもとまるが
#include<stdio.h>
#include<string.h>
#include<vector>
using namespace std;
unsigned int kaijyo(int k){unsigned int s=1; for(;k>0;k--)s*=k; return s;}
void retuprt(vector<unsigned char> &x){for(int n=0;n<x.size();n++)printf("%d ",x[n]);}
unsigned int sanowa(vector<unsigned char> &x){unsigned int s=0,n; for(n=0;n<x.size()-1;n++)s+=x[n+1]>x[n]?x[n+1]-x[n]:x[n]-x[n+1];return s;}
main(){
unsigned int M,K;
unsigned int i,j,k;
vector<unsigned char> orgnum,num,jretu;
for(M=2; M<20; M++) {
orgnum.resize(M),num.resize(M),jretu.resize(M);
for(i=0; i<M; i++) orgnum[i]=i+1;
int max=0;K=kaijyo(M);
for(k=0;k<K;k++){
memcpy(&num[0],&orgnum[0],M);
int N=k;
for(i=M;i>=1;i--) {
int n=N % i; jretu[i-1]=num[n];
for(j=n;j<i-1;j++) num[j]=num[j+1];
N/=i;}
i=sanowa(jretu);
if(max<i)max=i;
}
printf("M=%d max=%d\n",M,max);
}}
943:930
08/10/29 21:42:17
>>935-936
ありがとうございました
944:デフォルトの名無しさん
08/10/29 21:42:45
>>939
func(cell1)で次と前に新しいのを挿入する。
それぞれ先頭が帰ってくるが、こういうのでいいんだろうか。
struct cell *insert_next(struct cell *target)
{
struct cell *c1;
c1=(struct cell *) calloc(1, sizeof(struct cell));
c1->next=target->next;
target->next=c1;
return target;
}
struct cell *insert_prev(struct cell *target)
{
struct cell *c1;
c1=(struct cell *) calloc(1, sizeof(struct cell));
c1->next=target;
return c1;
}
945:デフォルトの名無しさん
08/10/29 21:46:33
>>775です。
さっぱりわからないので少しだけでもお願いします。
[1] 授業単元:Cプログラミング
[2] 問題文(含コード&リンク):
LU分解法を用いて、
URLリンク(kansai2channeler.hp.infoseek.co.jp)
のmatrix2.datファイルを参照して、
その係数行列Aの逆行行列X=A^-1を求めるプログラムを作成してください。
AX=I(Iは単位行列)となることをしめしてください、
URLリンク(kansai2channeler.hp.infoseek.co.jp)
に含まれるmat_auxに含まれる補助関数を使ってください。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限: ([2008年11月6日まで]
946:デフォルトの名無しさん
08/10/29 21:47:57
#include<stdio.h>
#include<string.h>
#include<vector>
using namespace std;
unsigned int kaijyo(int k){unsigned int s=1; for(;k>0;k--)s*=k; return s;}
void retuprt(vector<unsigned char> &x){printf("( ");for(int n=0;n<x.size();n++)printf("%d ",x[n]);printf(")");}
unsigned int sanowa(vector<unsigned char> &x){unsigned int s=0,n; for(n=0;n<x.size()-1;n++)s+=x[n+1]>x[n]?x[n+1]-x[n]:x[n]-x[n+1];return s;}
main(){
unsigned int M,K;
unsigned int i,j,k;
vector<unsigned char> orgnum,num,jretu,maxretu;
for(M=2; M<20; M++) {
orgnum.resize(M);num.resize(M);jretu.resize(M);maxretu.resize(M);
for(i=0; i<M; i++) orgnum[i]=i+1;
int max=0;K=kaijyo(M);
for(k=0;k<K;k++){
memcpy(&num[0],&orgnum[0],M);
int N=k;
for(i=M;i>=1;i--) {
int n=N % i; jretu[i-1]=num[n];
for(j=n;j<i-1;j++) num[j]=num[j+1];
N/=i;}
i=sanowa(jretu);
if(max<i){max=i;memcpy(&maxretu[0],&jretu[0],M);}
}
printf("\nM=%d max=%d ",M,max); retuprt(maxretu);
}}
947:デフォルトの名無しさん
08/10/29 21:49:43
>>943
>>935は間違えているので、このように変更するように
x[n+1]>x[n]?x[n+1]-x[n]:x[n]-x[n+1];
948:775 ◆00BY157eo6
08/10/29 22:06:50
>>775です。
さっぱりわからないので少しだけでもお願いします。
[1] 授業単元:Cプログラミング
[2] 問題文(含コード&リンク):
LU分解法を用いて、
URLリンク(kansai2channeler.hp.infoseek.co.jp)
のmatrix2.datファイルを参照して、
その係数行列Aの逆行行列X=A^-1を求めるプログラムを作成してください。
AX=I(Iは単位行列)となることをしめしてください、
URLリンク(kansai2channeler.hp.infoseek.co.jp)
に含まれるmat_auxに含まれる補助関数を使ってください。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限: ([2008年11月6日まで]
トリップつけました。
949:デフォルトの名無しさん
08/10/29 22:08:19
>>929
ありがとうございました
950:デフォルトの名無しさん
08/10/29 22:09:28
>>948
まずはテキストでうp
951:デフォルトの名無しさん
08/10/29 22:10:10
>>944
ありがとう。そのinsert_nextとprevとfunc(cell1)を>>939のどこに入れたらいいんでしょうか?
952:775 ◆00BY157eo6
08/10/29 22:17:02
>>950
テキストでファイル内容をうpしました。
ただ、できれば直接ファイルを参照して欲しいのですが…
[1] 授業単元:Cプログラミング
[2] 問題文(含コード&リンク):
LU分解法を用いて、
URLリンク(kansai2channeler.hp.infoseek.co.jp)
のmatrix2.datファイル(内容は)
URLリンク(kansai2channeler.hp.infoseek.co.jp)
を参照して、
その係数行列Aの逆行行列X=A^-1を求めるプログラムを作成してください。
AX=I(Iは単位行列)となることをしめしてください、
URLリンク(kansai2channeler.hp.infoseek.co.jp)
に含まれるmat_aux(内容は)
URLリンク(kansai2channeler.hp.infoseek.co.jp)
に含まれる補助関数を使ってください。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限: ([2008年11月6日まで]
953:デフォルトの名無しさん
08/10/29 22:34:57
>>952
もう一度行列を復習してから書き込んでくれ
URLリンク(kansai2channeler.hp.infoseek.co.jp)
の行列って正方行列じゃないだろ
954:775 ◆00BY157eo6
08/10/29 22:42:52
>>953
あ、そうですね…
すいませんでした
一度ひっこみます
955:775 ◆00BY157eo6
08/10/29 22:50:53
修正しました。
[1] 授業単元:Cプログラミング
[2] 問題文(含コード&リンク):
LU分解法を用いて、
URLリンク(kansai2channeler.hp.infoseek.co.jp)
のmatrix2.datファイル(内容は下のtxtにまとめました)
URLリンク(kansai2channeler.hp.infoseek.co.jp)
を参照して、
その係数行列Aの逆行行列X=A^-1を求めるプログラムを作成してください。
AX=I(Iは単位行列)となることをしめしてください、
URLリンク(kansai2channeler.hp.infoseek.co.jp)
に含まれるmat_aux(内容は)
URLリンク(kansai2channeler.hp.infoseek.co.jp)
に含まれる補助関数を使ってください。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限: ([2008年11月6日まで]
956:デフォルトの名無しさん
08/10/30 00:08:44
>>930
面白い問題なので俺もやってみた。コマンドライン引数で要素数指定。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
N=10 Max=49( 1152件) time 0:00.62
N=11 Max=59(11520件) time 0:06.03
N=12 Max=71(28800件) time 1:13.19
N=13 おわらねぇ……てか落ちた!
CPU Q6600 2.4GHz
OS Win Vista Ulti 32bit
957:デフォルトの名無しさん
08/10/30 00:11:19
なんか atexit する場所がへんだった。
958:デフォルトの名無しさん
08/10/30 00:40:43
N=2n+1のときの解はたぶん、
n+2, n, 2n+1, n-1, 2n, n-2, 2n-1, n-3,…,n+3, 1, n+1
だな。
N=2nのときも似たようなもん。証明は知らない。
959:デフォルトの名無しさん
08/10/30 00:44:30
N=2n+3とすると
n+3, n+1, N, n, N-1, n-1, N-2, n-2,…,n+4, 1, n+2
となり簡明か
960:デフォルトの名無しさん
08/10/30 01:01:09
N=2nのときmaxは、2*n*n-1
N=2n+1のときmaxは、2*n*n+2n-1
だな。証明は知らない。
961:デフォルトの名無しさん
08/10/30 01:36:04
>>930
面白い問題なのでオレも考えてみた。
で、解くためのアルゴリズムを見つけた。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
是非とも等角フォントで。
差の表を用いて考えれば
全部の数列の差を試さなくてすむし、一発で出来る
962:930
08/10/30 01:44:42
>>961
絵はどうでもいいからCで書けよカス
963:デフォルトの名無しさん
08/10/30 01:56:47
>>962
偽者だというのは分かるが、お前がキモイ・・・