C/C++の宿題を片付けます 116代目at TECH
C/C++の宿題を片付けます 116代目 - 暇つぶし2ch792:デフォルトの名無しさん
08/10/27 01:09:34
IT業界だけじゃないけど、これから日本のエンジニアは大変なことになる
大量に採用するなら今年までにしとけ
再来年からはヤバイ奴らが入社してくるぞww

793:デフォルトの名無しさん
08/10/27 01:10:28
>>790
名簿ファイル下さい

794:デフォルトの名無しさん
08/10/27 01:13:49
>>791
んじゃ中学で何習うのorz

795:デフォルトの名無しさん
08/10/27 01:24:26
>>793
名簿ファイルはリアルに教授の名前載ってるから、あげるの無理なんです
すみません

796:デフォルトの名無しさん
08/10/27 01:25:49
>>795
せめて構造体の中身教えてな
themaには何が入ってるんだ?
研究テーマか何かか?

797:775
08/10/27 01:26:48
>>780をお願いします。

798:デフォルトの名無しさん
08/10/27 01:37:20
>>796
名簿はこんな感じ
19670712 namae a aaaaaa@xxx.aaaaaa.ac.jp Uchu
19790102 namae b bbbbbb@xxx.bbbbbb.ac.jp Kotaidenshi
19300303 namae c cccccc@xxx.cccccc.ac.jp Uchu
----------------------------------------------------
themaには研究テーマが入ってます

宜しくお願いします


799:デフォルトの名無しさん
08/10/27 02:27:33
[1] 授業単元:プログラミング
[2] 問題文:
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:10/27
[5] その他の制限:何度もすいません・・・
         式がやはりネックです

800:デフォルトの名無しさん
08/10/27 02:38:23
>>701
>別に1024個区切りで平均なり飛び出してる値なりが分かればいいんでしょ?
そういうことです。

>「(平均値+5*ρ)以上の値を最大値(極大値)とするように変更」という課題があるけれど、 じゃあ最初の課題では極大値の判定はどうやってやればいい?
平均値以上の値を最大値(極大値)としなきゃいけないんですOTL


801:デフォルトの名無しさん
08/10/27 03:00:37
>>790
URLリンク(kansai2channeler.hp.infoseek.co.jp)

とりあえず、1番だけ。
2番は問題の意味がよくわからない。
もっと詳しく書いてくれ。
必要なデータとかあればそれもよろしく。

今日はもう寝る。

802:デフォルトの名無しさん
08/10/27 03:17:59
>>663 問題修正
[1] 授業単元: 信号処理
[2] 問題文(含コード&リンク):
① 5行209921列の2次元配列のファイルを読み込みなさい。ファイルの値を1024個で区切り1024個中の値の平均値と(平均値+5*ρ)以上の値を最大値(極大値)を求めなさい。ρを標準偏差とする。
最大値をmax1、max2、max3、・・・・として最大値は1個とは限らないこととする。
また1024個の最大値を求め終わったら、次の1024個の最大値を求めなさい。この作業をファイルの最後の値までやりなさい。
ただし、ファイルのサイズは17.2MBととし十分なメモリ領域を確保すること。
ヒント:malloc関数
※ファイル↓(17MBもあるのでDLするのに時間がかかるかもしれません。お手数かけます。)
 URLリンク(kissho6.xii.jp)
 DLKey:data

② 求めた最大値をpeak.txtに出力しなさい。1行目を最初の1024個中で求めた最大値を表示させ、2行目からは次の1024個中から求めた最大値を表示させなさい。

③ ①で読み込んだファイルの数値は周波数1,2,3,…,1024の時の値である。1024個で区切ったのはそのためである。
  ①で求めた各々の最大値の周波数を [周波数]最大値 となるように②で出力したpeak.txtに出力できるように変更させなさい。
    例:peak.txt→ [67]3.214283 [84]2.4930390 [148]5.3485704 ・・・・
            [38]3.4255342 [72]3.214283 [98]2.434924390・・・・
             ・
             ・
             ・
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2008年10月27日午後5時
[5] その他の制限: 特になし

よろしくお願いします。

803:デフォルトの名無しさん
08/10/27 03:20:10
>>802 補足説明
 
まず①番目の問題は、二次元配列で出力されている値のファイルを読み込むこと。
その値を1024個を一つのくくりとする。つまり1個目[0][0],2個目[0][1],・・・,5個目[0][4],6個目[1][0],・・・,1024個目[205][3]とする。このとき個数=周波数の値でもある。
この1024個の値の平均値と最大値(極大値)を求める。
最初の1024個の最大値(極大値)を求めたら、次の1024個の最大値(極大値)を求める。
次の1024個とは1個目[206][0],2個目[206],[1],・・・,1024個目[411][3]とする。これをファイルの最後の値まで繰り返し行う。

よろしくお願いします。

804:デフォルトの名無しさん
08/10/27 03:57:31
[1] 授業単元:配列
[2] 問題文:10人分の2科目の試験得点(100点満点)を2次元配列に初期化しておく。2次元配列vの宣言と初期化は以下のとおり

int v[2][10]={{55,67,45,78,89,91,73,50,80,69}
{44,59,87,92,60,51,77,89,64,53}};

この10人分の科目別得点の平均を求めなさい。ただし、2科目の科目別平均は次の1次元配列に格納する。
 double mean[2]

doubleという型名で配列の名前がmean

《実行結果》
科目1の平均=69.700000
科目2の平均=67.600000


[3] 環境
 [3.1] OS:XP
 [3.2] コンパイラ名とバージョン:bcc
 [3.3] 言語:C
[4] 期限:10/27 午後1時
[5] その他の制限:出来るだけ短く

どうかよろしくお願いします



805:デフォルトの名無しさん
08/10/27 03:57:47
>>785
そう、だから >>768 で sys/stat.h を貼ってもらって、それをみたんですが、
くだんの#define は
#if defined __USE_BSD || defined __USE_MISC || defined __USE_XOPEN
の下で定義されていました。
mac osx = darwin ≒ FreeBSD+mach? であっても、
-std=c99 とすると、この上のどれも #define されず、
それでいて-std= を指定しなければ、この上のどれかが #define される
ということ、かつ >>774 より-std で#define の内容がかわる、ということですから、そんなことがあっても不思議でない、ということです。
単にそれだけですが。

806:デフォルトの名無しさん
08/10/27 04:19:58
>>805
失礼。認識間違いしていました。
>>768の環境では__USE_BSD も __USE_MISC も __USE_XOPEN もどれも #define されないようですね。
でも手元のVine Linux 4.2 では __USE_BSD と __USE_MISC が #define されています。(#error で確認)
したがって >>768 の環境に問題があるのでしょうか。debian な人にお願いするしかないですね。




807:デフォルトの名無しさん
08/10/27 04:24:18
>>806
手元の Vine Linux 4.2 で -std=c99 をコンパイルすると、>>768 と同じ現象が再現しました。
じゃ、いったいなにが #define されているのでしょうか‥‥‥。

808:デフォルトの名無しさん
08/10/27 08:13:30
【質問テンプレ】
[1] 構造体:
[2] 英文なので翻訳します。
この宿題の中で、僕はFieldとScreenという2つのクラスを持っています。
Screen というクラスはField というクラスを80個持ちます。
で、問題はここからなのですが
教授は「Screenが無制限にFieldを持つようにプログラムを作れば、ボーナス点をやる」
とか言いだしたのでどうやるか教えてください。

[3] 環境
 [3.1] うぃんどーず
 [3.2] ぼーらんど 
[3.3] C++
[4] 一週間後
[5] 制限:new とか使う感じです。

809:デフォルトの名無しさん
08/10/27 08:13:42
>>801

ありがとうございます
問題2は
郵便番号 区(漢字で) 町(カタカナで) 町(漢字で)
の順に並んだ名簿のファイルを読み込んで並び変えます

810:デフォルトの名無しさん
08/10/27 08:21:13
>>808
[3] 環境
 [3.1] うぃんどーず
 [3.2] ぼーらんど 

Windowsもborlandも読めないだろうと馬鹿にしてるんだな


811:デフォルトの名無しさん
08/10/27 08:28:46
>>810
いやwwwwwそういうわけじゃないです。。。
教えてくださいお願いします!

812:デフォルトの名無しさん
08/10/27 08:56:43
>>808
URLリンク(kansai2channeler.hp.infoseek.co.jp)

std::vectorを使ったがnew/deleteでも同じようにいけるはず
誰かに任せた

813:デフォルトの名無しさん
08/10/27 08:57:50
#include <iterator>
#include <functional>

は不要なので削除して下さい

814:デフォルトの名無しさん
08/10/27 08:59:31
>>789
int i, j, k, flag, vm[100];

for(i=1,k=0,flag=1; flag; i++) {
for(j=1; j<2*i-1 && flag; j++) {
vm[k++] = j;
if(k==100) flag = 0;
}
for(; j>0 && flag; j--) {
vm[k++] = j;
if(k==100) flag = 0;
}
}

下の場合は
for(j=1; j<2*i&& flag ; j++) {

815:デフォルトの名無しさん
08/10/27 09:07:36
>>812
ありがとうございます。
でもnew/delete使う感じでお願いしたいんです。
vectorが何のこっちゃ分かりません。すみません・・・

816:デフォルトの名無しさん
08/10/27 09:09:19
[1] 授業単元: 配列
[2] 問題文(含コード&リンク)
身長について処理をするプログラムの作成

最大20とする整数nをキーボードから入力する。
次に、n人分の実数(身長)をキーボードから入力しその平均身長をもとめ、
さらにそのそれぞれの人の身長と、平均身長との差を一人一行ずつ出力しなさい。
小数点以下は無視していい。
例)
n=3の場合
170.0 0.0
165.0 -5.0
175.0 5.0

[3] Windows
VC 6.0
言語:C++
[4] 期限:今日中
[5] その他の制限:特になし

c言語を侮っていてさぼり気味だったつけがまわり、気がついたら全くわからなくなってました。
ヒントだけでもいいのでどうかお願いします。

817:デフォルトの名無しさん
08/10/27 09:20:11
>>815
URLリンク(kansai2channeler.hp.infoseek.co.jp)

わかるかな?これ以上簡単に書けんよ

818:デフォルトの名無しさん
08/10/27 09:24:37
>>817
ありがとうございます!

819:デフォルトの名無しさん
08/10/27 09:49:54
[1] 授業単元: プログラミング基礎
[2] 問題文: URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: Visual Studio 2005
 [3.3] 言語: C
[4] 期限: 10月27日 21:00まで

よろしくお願いします

820:デフォルトの名無しさん
08/10/27 10:20:56
スレリンク(gamedev板)
Syntax Error. しかしらないキチガイが現れました

821:デフォルトの名無しさん
08/10/27 10:26:09
>>816
#include <stdio.h>

int main(void)
{
int i, n;
int sincho[20];
int sum, heikin;
printf("n? ");
scanf("%d", &n);
if (n >= 20) {
printf("nが大きすぎます。\n");
return 1;
}
for(i = 0; i < n; i++)
{
printf("%d人目の身長: ", i+1);
scanf("%d", &sincho[i]);
}
sum = sincho[0];
for(i = 1; i < n; i++)
{
sum += sincho[i];
}
heikin = sum / n;
for(i = 0; i < n; i++)
{
printf("%d %d\n", sincho[i], sincho[i] - heikin);
}
return 0;
}


822:デフォルトの名無しさん
08/10/27 10:31:06
>>816

#include <stdio.h>
int main(int argc, char *argv[])
{
double height[20], sum, avg;
int n, i;

printf("n の値を入力してください: ");
scanf("%d%*[^\n]", &n);
if (n > 20) {
puts("大きすぎます");
return 1;
}
sum = 0.0;
for (i = 0; i < n; i++) {
printf("身長を入力してください: ");
scanf("%lf%*[^\n]", &height[i]);
sum += height[i];
}
avg = sum / n;
for (i = 0; i < n; i++) {
printf("%.1f %.1f\n", height[i], height[i] - avg);
}
return 0;
}

823:デフォルトの名無しさん
08/10/27 10:32:36
>>819
#include<stdio.h>
int main(void){
char str[100],big[100];
int i,k;
printf("文字列を入力して下さい:");
scanf("%s",str);
k=0;
for(i=0; str[i]!='\0'; i++){
switch(str[i]){
case 'a':
case 'i':
case 'u':
case 'e':
case 'o':continue;
default:{big[k]=str[i]-32;
k++;
}
}
}
big[k]='\0';
printf("入力:%s\n",str);
printf("出力:%s\n",big);
}

824:デフォルトの名無しさん
08/10/27 10:34:06
忘れた
return 0;

825:デフォルトの名無しさん
08/10/27 10:35:03
#include <stdio.h>
int main(void){
char str[100],big[100];
int i, j;
printf("文字列を入力して下さい:");
scanf("%s",str);
for(i=0, j=0; str[i]!='\0'; i++){
if (str[i]>='a' && str[i]<='z'){
big[j]=str[i]-('a'-'A');
if (big[j] == 'A' || big[j] == 'I' ||
big[j] == 'U' || big[j] == 'E' ||
big[j] == 'O')
{
;
}else j++;
}else if (str[i] == 'A' || str[i] == 'I' ||
str[i] == 'U' || str[i] == 'E' ||
str[i] == 'O')
{
;
}else {
big[j] = str[i];
j++;
}
}
big[j]='\0';
printf("入力:%s\n",str);
printf("出力:%s\n",big);
return 0;
}

826:デフォルトの名無しさん
08/10/27 11:38:02
>>788さん
ありがとうございます!
大変助かりました!

827:デフォルトの名無しさん
08/10/27 12:27:23
>>820 = ID:FJ+86jwr ?
数字も読めないのか

828:デフォルトの名無しさん
08/10/27 12:30:57
[1] 授業単元:プログラミング
[2] 問題文:な簡単な単語検索を行うプログラムを作成
せよ.
1. 3 つの単語を入力し,これを検索対象のデータと
する.
2. 検索したい単語を入力すると,それが覚えた単語
の中に含まれていれば“YES!”,含まれていなけ
れば“NO!”と出力する.
3. -1 が入力されるまで,繰り返し検索できるように
する.
条件
3 つの単語は,2 次元配列str1[3][100] に格納する.
(str1 には99 文字までの単語を3 つ格納できる)
実行例
$ ./q2-4
Input 3 words:
<-- "aaa"
<-- "bbbb"
<-- "ccccc"
Search word: <-- "aaa"
YES!
Search word: <-- "dd"
NO!
Search word: <-- "-1"
$ (終了)
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限:10月30日 木曜日
[5] その他の制限: 標準関数strcmp(str *, str *) を使うということです
よろしくお願いします

829:デフォルトの名無しさん
08/10/27 12:50:45
>>828
URLリンク(kansai2channeler.hp.infoseek.co.jp)

830:デフォルトの名無しさん
08/10/27 13:20:59
>>820
どう見てもキチガイはID:FJ+86jwrだな

831:デフォルトの名無しさん
08/10/27 13:54:18
>>790
URLリンク(kansai2channeler.hp.infoseek.co.jp)

2番も1番と同じ要領でやってみた。

832:デフォルトの名無しさん
08/10/27 14:15:40
>>802 問題文修正しました。
>>663 問題修正
[1] 授業単元: 信号処理
[2] 問題文(含コード&リンク):
① 209921行5列の2次元配列のファイルを読み込みなさい。ファイルの値を1024個で区切り1024個中の値の平均値と(平均値+5*ρ)以上の値を最大値(極大値)を求めなさい。ρを標準偏差とする。
最大値をmax1、max2、max3、・・・・として最大値は1個とは限らないこととする。
また1024個の最大値を求め終わったら、次の1024個の最大値を求めなさい。この作業をファイルの最後の値までやりなさい。
ただし、ファイルのサイズは17.2MBととし十分なメモリ領域を確保すること。
ヒント:malloc関数
※ファイル↓(17MBもあるのでDLするのに時間がかかるかもしれません。お手数かけます。)
 URLリンク(kissho6.xii.jp)
 DLKey:data

② 求めた最大値をpeak.txtに出力しなさい。1行目を最初の1024個中で求めた最大値を表示させ、2行目からは次の1024個中から求めた最大値を表示させなさい。

③ ①で読み込んだファイルの数値は周波数1,2,3,…,1024の時の値である。1024個で区切ったのはそのためである。
  ①で求めた各々の最大値の周波数を [周波数]最大値 となるように②で出力したpeak.txtに出力できるように変更させなさい。
    例:peak.txt→ [67]3.214283 [84]2.4930390 [148]5.3485704 ・・・・
            [38]3.4255342 [72]3.214283 [98]2.434924390・・・・
             ・
             ・
             ・
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2008年10月28日午後1時
[5] その他の制限: 特になし

よろしくお願いします。


833:デフォルトの名無しさん
08/10/27 15:17:14
>>744

ありがとうございました!

834:デフォルトの名無しさん
08/10/27 15:17:14
>>832
①と②までは↓もうプログラムはあります。
URLリンク(kissho1.xii.jp)
DLkey : foo
あとは③番目の問題をやるだけです。

プログラムよろしくお願いします。

835:デフォルトの名無しさん
08/10/27 15:54:45
>>832
URLリンク(kansai2channeler.hp.infoseek.co.jp)
peak.txtが例の通りにならないんだが、これでいいのだろうか。

>>834を読んでなかった…。

836:デフォルトの名無しさん
08/10/27 16:08:27
3と4はもう答え書いたのに(´・ω・`)

837:デフォルトの名無しさん
08/10/27 16:09:06
[1] 授業単元:プログラミング
[2] 問題文:
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:10/27
[5] その他の制限:

838:デフォルトの名無しさん
08/10/27 16:12:59
>>835
ありがとうございます。
しかし、peak.txtが出力されませんでした。どうしてなんだろう?
コンパイルはgccですよね? 

839:デフォルトの名無しさん
08/10/27 16:17:46
>>836
コンパイルはとおったのですが、peak.txtが出力できませんでした。
かなり格闘したのですが、手に負えなくて・・・OTL


840:デフォルトの名無しさん
08/10/27 16:20:25
>>835
fprintf(fpout, "[%d]%lf ", j + 1, a[j]);
は正しくは
fprintf(fpout, "[%d]%f ", j + 1, a[j]);



841:デフォルトの名無しさん
08/10/27 16:22:01
>>840
そうだった^^;

842:デフォルトの名無しさん
08/10/27 16:28:46
>>836
というか、旧③が現①なんだよねたぶん。

843:デフォルトの名無しさん
08/10/27 16:41:51
>>842
はい、そうです。なんか旧①と旧③の問題が重複(分かりにくい)ということだったので
旧③の問題文を現①の問題文に含みました。

よろしくお願いします。

844:デフォルトの名無しさん
08/10/27 16:52:32
>>838
peak.txtのファイルすらできないってこと??

845:デフォルトの名無しさん
08/10/27 17:05:02
>>844
はい、そうです。ファイルができませんOTL
gccのオプションは -o だけでいいのですか?

846:デフォルトの名無しさん
08/10/27 17:09:16
まさかコンパイルしただけでファイルが出来るとか思ってないよな

847:デフォルトの名無しさん
08/10/27 17:10:11
>>845
gcc hoge.c -o hoge.exe
ってな感じにコンパイルして実行すれば良いと思うけど。。。
コンパイルは通るんだよね?

848:デフォルトの名無しさん
08/10/27 17:20:14
>>846
あ・・・できると思ってました><
どうすればファイルを作成することが出来るのでしょうか?

>>847
コンパイルは通ります。フォルダの中にpeak.txtが出来てないだけです。

849:デフォルトの名無しさん
08/10/27 17:23:00
>>848
実行しろよ
Linuxなら
./a.out


850:デフォルトの名無しさん
08/10/27 17:23:06
>>848
コンパイルしてできた実行ファイルを実行する。
同じフォルダにdata.txtを置いておくこと。

851:デフォルトの名無しさん
08/10/27 17:24:26
ひどいな・・・
赤ちゃんかよ・・

852:デフォルトの名無しさん
08/10/27 17:40:17
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク): f(x)=1/(2+sinx+cosx) の積分を[π,-π]の範囲でSimpsonの1/3公式で求め、分割数と誤差を表示させよ。
               
[3] 環境
 [3.1] OS:Windows
 [3.2] 言語:C言語
 
[4] 期限: 2008.10.29

お願いします。

853:デフォルトの名無しさん
08/10/27 17:40:26
目が点になるっていうのはこういう事か

854:デフォルトの名無しさん
08/10/27 17:48:32
>>852
誤差って、真値は?

855:デフォルトの名無しさん
08/10/27 18:02:09
>>549>>551
すみませんでした。ちと、ボケてましたwww
うまく出力できました。
ありがとうございました。

856:デフォルトの名無しさん
08/10/27 18:06:50
>>854
あっ、すいません
√2×πです。

857:デフォルトの名無しさん
08/10/27 18:12:03
[1] 授業単元:C
[2] 問題文(含コード&リンク):課題1:2次元平面上の点を表す構造体 Point 型を定義して,その点に関する計算を行うプログラムを作成したい.
構造体 Point型は,double型の X座標と Y座標のメンバをもつ.
構造体 Point型を使用して,原点からの距離を求める関数 length_vectorを作成する.
構造体 Point型を使用して,平面の点を表示する関数 print_vを作成する.

2:2次元平面上の点を表す構造体 Point 型と構造体配列を定義して,座標平面上の2点に関する計算を行うプログラムを作成したい.
構造体 Point型は,double型の X座標と Y座標のメンバをもつ.
構造体 Point型を使用して,要素2つの構造体配列 arrayを定義する.
構造体配列 arrayに,平面の点を代入する関数 input_pointを作成する.
構造体配列 arrayに格納されている2点の長さを求める関数 length_vector2を作成する.
二乗の計算には pow ,ルートの計算には sqrtを使用
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: 任意
 [3.3] 言語: C
[4] 期限: ([2008年10月28日17:00まで]
??????の部分を問題文に従ってうめていただけると助かります

858:デフォルトの名無しさん
08/10/27 18:19:44
>>856
#include <stdio.h>
#include <math.h>

double f(double x)
{
return 1. / (2. + sin(x) + cos(x));
}

int main(void)
{
int k, n;
double h, a = -M_PI, b = M_PI, fo, fe, sum;

while (1) {
printf("分割数 N (0 = END) = ");
scanf("%d", &n);
if (n == 0)
break;

h = (b - a) / (2. * n);
fo = fe = 0.;
for (k = 1; k <= 2 * n - 3; k += 2) {
fo += f(a + h * k);
fe += f(a + h * (k + 1));
}
sum = (f(a) + f(b) + 4. * (fo + f(b - h)) + 2 * fe) * h / 3.;

printf("分割数 = %d, 誤差 = %.10g\n", n, sum - sqrt(2.) * M_PI);
}
return 0;
}

859:デフォルトの名無しさん
08/10/27 18:20:47
うーん積み残し誤差も考慮しないといけんかな・・・・

860:775
08/10/27 19:16:14
お願いします。

[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:inux
 [3.2] コンパイラ名とバージョン:gc
 [3.3] 言語:C
[4] 期限: ([2008年11月6日まで]

861:デフォルトの名無しさん
08/10/27 21:35:39
>>549
二つ目のですが整数を入力すると入力した逆の単項式が出てしまうので入力した順に出力されるようにして欲しいのですがそれだと変化しないのですが・・・

862:デフォルトの名無しさん
08/10/27 21:49:46
>>861
双方向リストにするか、再帰を使うか。

863:デフォルトの名無しさん
08/10/27 22:00:12
>>821>>822
お二人とも丁寧に有り難う御座います。ホントに助かりました。


864:デフォルトの名無しさん
08/10/27 22:09:35
[1] プログラミング入門言語
[2] 五人分の点数(0~100点まで)を入力し、点数の高い順に並べ替えさせるプログラム
[3] 環境
 [3.1] OS: Windows
 [3.2] gcc
 [3.3] C
[4] 期限:制限なし

初心者なので困ってます><お願いします!!

865:デフォルトの名無しさん
08/10/27 22:19:29
#include<stdio.h>
int main(void){
int score[5], temp, i, j;

for(i=0;i<5;i++){ //点数入力
printf("%d人目の点数: ", i+1);
scanf("%d", &score[i]);
}
for(i=0;i<5;i++){ //並べ替え
for(j=4;j>i;j--)
if(score[i] < score[j]){
temp = score[j];
score[j] = score[i];
score[i] = temp;
}
}
for(i=0;i<5;i++)
printf("%d ", score[i]);
putchar('\n');

return 0;
}

866:865
08/10/27 22:22:22
馬鹿みたいにタブ使ったから空白作れてないな。しくじった。
 #include<stdio.h>
int main(void){
int score[5], temp, i, j;

for(i=0;i<5;i++){ //点数入力
printf("%d人目の点数: ", i+1);
scanf("%d", &score[i]);
}
for(i=0;i<5;i++){ //並べ替え
for(j=4;j>i;j--)
if(score[i] < score[j]){
temp = score[j];
score[j] = score[i];
score[i] = temp;
}
}
for(i=0;i<5;i++)
printf("%d ", score[i]);
putchar('\n');

return 0;
}


867:デフォルトの名無しさん
08/10/27 22:47:26
>>831
有難う御座います


868:デフォルトの名無しさん
08/10/27 22:53:22
>>866
早速の回答ありがとうございます!!

もう一問わからないのが><
どなたかお願いします><

[1] プログラミング入門言語
[2] 3人分の3教科の素点を表示する。素点は100点満点でランダムに作る。
  またその時、
  ・3教科の合計・平均点を計算し、それぞれ素点の右の列に表示する。
  ・合計点の高い学生から順に表示する。
  ・平均点は小数第一までの表示とする。 
[3] 環境
 [3.1] OS: Windows
 [3.2] gcc
 [3.3] C
[4] 期限:なし。


869:デフォルトの名無しさん
08/10/27 23:36:38
OSはlinux
期限はとくになし

素数を数えて落ち着くプログラム
おながいします。

870:デフォルトの名無しさん
08/10/28 00:49:26
>>858
ありがとうございます。
すいませんが、積分範囲は自分で入力するようにしたいんですよ・・・言葉足らずで申し訳ありません。
一応自分で考えたんですけどうまく出力されません・・・間違っている場所の指摘お願いします。



871:デフォルトの名無しさん
08/10/28 00:50:16
>>858
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
void main(void)
{
FILE *fo;
double a, b;
int n, i;
double h, s, x;
double fa, fb, fx;
double sinx, cosx, sina, cosa, sinb, cosb;
if((fo = fopen("ans7.txt", "w")) == NULL){
printf("Do not open file\n");
exit(1);
}


872:デフォルトの名無しさん
08/10/28 00:50:53
つづき・・・
printf("積分区間a,bを入力してください.\n");
scanf("%lf%lf",&a, &b);
printf("分割数nを入力してください.\n");
scanf("%d",&n);
fx = 1/(2+sinx+cosx);
fa = 1/(2+sina+cosa);
fb = 1/(2+sinb+cosb);
h = (b-a)/n;
s = fa+fb;
x=a;
i=1;
x=x+h;
if(i%2 == 0){
s = s+2*fx;}
else{
s = s+4*fx;}
i = i+1;
while(i>n){
s = h/3*s;}
printf("分割数nは%d回です。\n", n);
printf("誤差は%lfです。\n", s);
fprintf(fo, "分割数nは%d回です。\n", n);
fprintf(fo, "誤差は%lfです。\n",s);
fclose(fo);

}

お願いします。

873:デフォルトの名無しさん
08/10/28 01:14:31
>>870
修正点が多すぎるので>>858を修正しました。
あとは適当にいじって下さい。

URLリンク(kansai2channeler.hp.infoseek.co.jp)

874:デフォルトの名無しさん
08/10/28 01:26:51
>>868
構造体使わないようにと思って。。
URLリンク(kansai2channeler.hp.infoseek.co.jp)

875:デフォルトの名無しさん
08/10/28 02:27:04
フィボナッチ数列を・・・43024項まで求めるプログラムが出来た。
この調子で、8月に発見されたメルセンヌ素数をはじき出す
プログラムを作るぜ。戯言すまそ。

876:しろうと
08/10/28 10:04:34
初心者です。シグナルハンドリングについて勉強しているとこです。
kill -9 [pid]
ってkillがpidを殺すコマンドで-9は深く考えた事無かったけどこれって
実はkill自体はシグナルを単に送るだけで、-9にkillみたいな意味があるって
認識を改めた。ここまで正しいですか?

877:デフォルトの名無しさん
08/10/28 10:12:36
[1] 授業単元:C言語入門
[2] 問題文(含コード&リンク):URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 10月29日まで

よろしくお願いします。

878:デフォルトの名無しさん
08/10/28 10:15:54
どなたか857の解答期限迫ってきてるんでお願いします
問題が見づらいようなら言ってください 

879:デフォルトの名無しさん
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
偽者だというのは分かるが、お前がキモイ・・・


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch