08/10/30 07:49:39 BE:113605834-PLT(24065)
あなたが解けない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] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
URLリンク(kansai2channeler.hp.infoseek.co.jp)
【C 関数検索 man on WWW】 URLリンク(www.linux.or.jp)
【過去ログ検索】 URLリンク(chomework.sakura.ne.jp)
【wiki】 URLリンク(www23.atwiki.jp)
前スレ
C/C++の宿題を片付けます 116代目
スレリンク(tech板)
2:デフォルトの名無しさん
08/10/30 09:38:19
2
3:775 ◆00BY157eo6
08/10/30 19:42:33
さっぱりわからないので少しだけでもお願いします
[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日まで]
4:911
08/10/30 20:52:37
すいません
回答してくれたプログラムを立ち上げてみたんですが、エラーがかえってきて困ってます。
#include<stdio.h>
int gcd3(x, y, z){
return gcd( gcd(x,y), z);
}
でいいんですか?
5:デフォルトの名無しさん
08/10/30 21:19:41
[1] 授業単元:配列
[2] 問題文(含コード&リンク):
複数の整数値を入力して、それらを配列data に格納し、一番小さい値と一番大きい値がそ
れぞれ格納されている配列の添え字と、その値を出力するプロググラムを作成しなさい。
<プログラム実行例>
何個の整数値を入力しますか: 5
1
4
3
5
2
一番大きい値は配列data[3]に格納されている5 です。
一番小さい値は配列data[0]に格納されている1 です。
[3] 環境
[3.1] OS: (WindowsXP)
[3.2] VC 6.0等
[3.3] C
[4] 期限:明日
[5] 関数とかはまだ習ってないです
6:デフォルトの名無しさん
08/10/30 21:20:02
>>4
立ち上げるって、コンパイル通らんだろ?
7:デフォルトの名無しさん
08/10/30 21:20:12
[1] 授業単元:配列
[2] 問題文(含コード&リンク):
複数の整数値を入力して、それらを配列に格納し、小さい順に並びかえるプログラムを作成しなさ
い。
<プログラム実行例> ※赤字の部分をキーボードから入力します
何個の整数値を入力しますか: 5
1
4
3
5
2
これらを小さい順に並びかえると
1 2 3 4 5 です。
[3] 環境
[3.1] OS: (WindowsXP)
[3.2] VC 6.0等
[3.3] C
[4] 期限:明日
[5] 関数とかはまだ習ってないです
8:911
08/10/30 21:51:02
通りませんね・・・
9:デフォルトの名無しさん
08/10/30 22:05:59
>>5
#include <stdio.h>
int main() {
int data[100];
int i, n;
int max, min;
printf("何個の整数値を入力しますか:");
scanf("%d", &n);
max = 0;
min = 0;
for (i = 0; i < n; i++) {
scanf("%d", &data[i]);
if (data[i] > data[max]) {
max = i;
}
if (data[i] < data[min]) {
min = i;
}
}
printf("一番大きい値は配列data[%d]に格納されている%dです。\n", max, data[max]);
printf("一番小さい値は配列data[%d]に格納されている%dです。\n", min, data[min]);
return 0;
}
10:デフォルトの名無しさん
08/10/30 22:14:25
>>9
ありがとうございます!助かりました
11:デフォルトの名無しさん
08/10/30 22:25:21
>>7
#include <stdio.h>
int main() {
int data[100];
int i, j, n;
int temp;
printf("何個の整数値を入力しますか:");
scanf("%d", &n);
for (i = 0; i < n; i++) {
scanf("%d", &data[i]);
for (j = i; (data[j] < data[j - 1]) && (j > 0); j--) {
temp = data[j];
data[j] = data[j - 1];
data[j - 1] = temp;
}
}
printf("これらを小さい順に並びかえると\n");
for (i = 0; i < n; i++) {
printf("%d ", data[i]);
}
printf("です。\n");
return 0;
}
12:5
08/10/30 22:30:23
>>11
ありがとうございます
13:911
08/10/30 22:41:06
結局、あの問題の答えってなんなんですか?
14:デフォルトの名無しさん
08/10/30 23:06:29
URLリンク(kansai2channeler.hp.infoseek.co.jp)
連結リストのセルの先頭をdelete_firstで削除して
5 1
1 4
4 → 2
2 3
3
と表示されるのですがメモリの35と23行目の解放がされていないと表示されます。
どこにfree()を入れればいいんでしょうか?
15:911
08/10/30 23:26:48
やっぱり、C言語の知識がある程度ないと無理みたいですね。。。
出直してきます
16:デフォルトの名無しさん
08/10/31 00:06:10
>>14
/*連結リストの先頭のセルを削除*/
struct cell *delete_first(struct cell *head)
{
struct cell * next;
if(head == NULL){
return NULL;
}
next = head->next;
free(head);
return next;
}
こんなことがしたかったんだろうと妄想
17:デフォルトの名無しさん
08/10/31 00:39:22
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
参考プログラム URLリンク(kansai2channeler.hp.infoseek.co.jp)
問題文 URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS:XP
[3.2] コンパイラ名とバージョン: Visual stdio2005
[3.3] 言語:C言語
[4] 期限:10月31日 13:00まで
[5] その他の制限:特になし
よろしくお願いします
18:17
08/10/31 00:41:33
問題はA1のみです
19:デフォルトの名無しさん
08/10/31 00:53:39
[1] 授業単元: 信号処理
[2] 問題文(含コード&リンク):
スレリンク(tech板:832番) の問題の続き
① 前回完成させたのプログラムを変更させなさい。
プログラム→URLリンク(kissho6.xii.jp)
DLKey:foo
data[cnt] < ave以下のとき
関数powを使って、分散の計算をして標準偏差を求めるように変更させなさい。
※補足
出力したファイルはこのような感じになっていること
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月31日午後1時
[5] その他の制限: 特になし
よろしくお願いします。
20:デフォルトの名無しさん
08/10/31 02:46:46
[1] 授業単元: プログラミング実習2
[2] 問題文(含コード&リンク):
2008年のある月のカレンダー
2008年の任意の月のカレンダー1ヶ月分を表示するプログラムを作成する。
入力:月、出力:該当月のカレンダー
ステップ0・月を入力する、次のプログラムを元にします:
#include <stdio.h>
int main (void) {
int year = 2008;
int month;
printf("表示させる月を入力してください:\n");
scanf ("%d", &month);
return 0;
}
ステップ1・入力された月を元にして、表示する年月を表示する処理を追加してください。
ステップ2・2008年がうるう年であるかどうかの判定を追加し、表示する月の日数を求め、その日数を表示してください。
ステップ3・"Sun~Sat"を表示した後、ステップ2で求めた日数を表示させてください。
注意:曜日はずれていても構いません。
[3] 環境 Visual C++
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン: C++コンパイラ,リンカ
[3.3] 言語: C言語
[4] 期限: 2008年11月3日(月)までお願いします。
[5] その他の制限: main関数,文末記号,エスケープシーケンス,printf関数
逐次処理(順次処理)、条件分岐(選択処理)if,if-else,switch、
繰り返し(反復処理)while,do-while,for、演算子の複合演算子(+=,-=,*=,/=,%=)
インクリメント(++)デクリメント(--)は習いました。
お願いします。
21:デフォルトの名無しさん
08/10/31 03:34:49
>>20
URLリンク(kansai2channeler.hp.infoseek.co.jp)
22:デフォルトの名無しさん
08/10/31 10:16:06
課題4-1 無限級数
以下の無限級数は0 < |x| < 1 の時に収束することが知られている.
f(x) =
∞Σ
i=0
xi (1)
=
1
1 - x
(2)
式(1) において,第N 項までの部分和で打ち切ることによって,級数の近似式が得られる.第
N 部分和により級数f(x) を近似するプログラムを作成し,適当なx (0 < |x| < 1) に対して,項
数N の増加につれて,部分和が真値1
1-x に収束していく過程を観察せよ.
誰か助けてください。
23:デフォルトの名無しさん
08/10/31 11:06:36
printf(" Sun Mon Tue Wed Thu Fri Sat\n"); (笑)
24:22
08/10/31 11:11:43
#include <stdio.h>
int main (void)
{
double x, i, n, sum ,prod;
sum=0;
prod=1;
printf("代入するxの値を入力してください。");
scanf("%lf",&x);
printf("第何項までの和を求めますか?");
scanf("%lf",&n);
for (i=1;i<=n;i++)
{prod = prod * x ;
sum=sum + prod;
printf( "n= %d %d\n ",i ,sum);
}
return 0;
}
これでできない理由を誰か教えてください。
25:デフォルトの名無しさん
08/10/31 14:59:36
>>21
本当に有難う御座いました。
大変助かりました。
26:デフォルトの名無しさん
08/10/31 15:16:33
[1] 授業単元: プログラミング実習2
[2] 問題文(含コード&リンク):
以下の実行結果になるプログラムの作成
条件1:"*"で三角形を描く。
条件2:底辺が10個の"*"となるようにする。
[3] 環境 Visual C++
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン: C++コンパイラ,リンカ
[3.3] 言語: C言語
[4] 期限: 2008年11月3日(月)までお願いします。
[5] その他の制限: main関数,文末記号,エスケープシーケンス,printf関数
逐次処理(順次処理)、条件分岐(選択処理)if,if-else,switch、
繰り返し(反復処理)while,do-while,for、演算子の複合演算子(+=,-=,*=,/=,%=)
インクリメント(++)デクリメント(--)は習いました。
お願いします。
27:775 ◆00BY157eo6
08/10/31 15:27:04
さっぱりわからないので少しだけでもお願いします
[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日まで]
28:デフォルトの名無しさん
08/10/31 15:39:32
授業で言っていることはおぼろげにわかる気がするんですが、どんなプログラムを書けばいいのかまったくわかりません。。。
おねがいします!
[1] 授業単元:JPEGの読み込み等
[2] 問題文(含コード&リンク):
JPEGファイルを読んで
ブロック(マーカ単位)で表示するプログラム(16進)
(JPEGでないときエラーが出るとなおよい)
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限: 11月3日まで
29:デフォルトの名無しさん
08/10/31 15:48:09
#include <stdio.h>
int main(void)
{
int i, j;
for(i=1; i<=10; i++){
for(j=0; j<i; j++){
printf("*");
}
printf("\n");
}
return 0;
}
30:29
08/10/31 15:49:26
>>26
31:デフォルトの名無しさん
08/10/31 15:56:56
>>27
URLリンク(kansai2channeler.hp.infoseek.co.jp)
32:775 ◆00BY157eo6
08/10/31 16:03:39
>>31
ありがとうございました。
33:デフォルトの名無しさん
08/10/31 19:26:22
ここCASLの宿題はやってもらえませんかね?
34:デフォルトの名無しさん
08/10/31 19:52:09
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
★下記の仕様を満たすプログラムをC言語で作成しなさい
【仕様】 表計算ソフト簡易プログラム
▽ Excelのように2次元配列で10人分の3教科の素点表示する。なお、素点は100点満点でランダムに作るものとする。
▽ その右の列に個人別の3教科の合計・平均・順位(合計点の高い学生から順に)を表示する。なお平均は少数第1位までの表示とする。
▽ 10人分の得点データの下の行に、合計・平均・最高点・最低点の行を作り、各行についてそれぞれ求めて表示する。
(表示例:空欄にはそれぞれ計算結果が入ることになる)
番号| 国語 数学 英語 |合計 |平均 |順位
1 | 75 35 40 | | |
2 | 69 75 82 | | |
(中 略)
10 | 57 48 36 | | |
---------------------------------------------------
合計 |
平均 |
最高 |
最低 |
[3] 環境
[3.1] OS: Windows xp
[3.2] コンパイラ名とバージョン: 分かりません
[3.3] 言語: C言語
[4] 期限: 来週中ぐらい
[5] その他の制限: 繰り返し、条件処理、配列を勉強しました。これらを使って、一次元配列でお願いします。
初心者なので初心者でも分かるようなプログラムをお願いします。
35:デフォルトの名無しさん
08/10/31 20:37:26
>>34
URLリンク(kansai2channeler.hp.infoseek.co.jp)
36:デフォルトの名無しさん
08/10/31 20:44:59
>>34
URLリンク(kansai2channeler.hp.infoseek.co.jp)
37:デフォルトの名無しさん
08/10/31 21:28:33
>>35>>36
ありがとうございます。
38:デフォルトの名無しさん
08/11/01 00:20:57
>>24
#include <stdio.h>
int main (void)
{
double x, sum, prod;
int i, n;
sum = 0;
prod = 1;
printf("代入するxの値を入力してください。");
scanf("%lf",&x);
printf("第何項までの和を求めますか?");
scanf("%d",&n);
for (i = 1; i <= n; i++) {
prod *= x;
sum += prod;
printf( "n = %d %lf\n ",i ,sum);
}
return 0;
}
39:デフォルトの名無しさん
08/11/01 03:54:17
このスレで回答してる人って何者なの? 学生?
何気にこのスレで出た宿題をこなしてけばそれなりに実力がつきそうだな
40:デフォルトの名無しさん
08/11/01 10:20:49
こんなんじゃ実力つかないよ。
もっと難しい問題プリーズ。
41:デフォルトの名無しさん
08/11/01 11:51:17
>>29-30
本当に有難う御座いました。
大変助かりました。
42:デフォルトの名無しさん
08/11/01 11:56:48
>>39
・演習のための明らかに簡単なプログラム
こんなんじゃ実力は付かない
・プログラムのためのプログラミング
・実用的な計算
とかじゃないとダメだろ
43:デフォルトの名無しさん
08/11/01 12:15:54
実力がつくかどうかはわからないが、こなしていけば学生の勉強くらいにはなると思う
44:デフォルトの名無しさん
08/11/01 13:05:56
そもそも学生の宿題なんだからな。
できる奴は自力でできるわけだし。
45:デフォルトの名無しさん
08/11/01 13:46:19
これくらいのことができなきゃ、プログラムのためのプログラミング、実用的な計算?
なんて無理。というか、プログラミングと数値計算は多少分野が異なる。
46:デフォルトの名無しさん
08/11/01 13:52:06
つってもある程度難しかったり、面倒だとだれもやらないくせにwwwwww
47:デフォルトの名無しさん
08/11/01 14:14:16
計算に関しては、計算式を把握していれば、あとは標準ライブラリを用いるなり
多少拡張するなら、変数の扱い方をしっかりしていれば良い。
48:デフォルトの名無しさん
08/11/01 16:44:27
[1] 授業単元:プログラムC
[2] 問題文(含コード&リンク):
gnuplotを呼び出し、
y=sin(x**2)のグラフを描くプログラム
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:VC2005
[3.3] 言語:C
[4] 期限: 11/5
よろしくお願いします。
49:48
08/11/01 16:59:46
自己解決しました。
50:48
08/11/01 17:01:44
止めてください
どなたかお願いします
51:デフォルトの名無しさん
08/11/01 17:09:25
奇数と偶数の和を求めます。関数を使わなかったら答えは出たのですが・・・。
どこが変なのか、お願いします。
#include<stdio.h>
void calc(int x[],int num)
{
int kisu=0,gusu=0;
int i;
for(i=0;i<num;i++);{
if(x[i]%2==1) kisu+=x[i];
else gusu+=x[i];
}
printf("奇数%d\n",kisu);
printf("偶数%d\n",gusu);
}
int main(void)
{
int hai[10]={1,2,3,4,5,6,7,8,9,10}; //偶数30 奇数25
calc(hai,10);
return 0;
}
52:デフォルトの名無しさん
08/11/01 17:13:31
((x[i]%2)==1)
53:デフォルトの名無しさん
08/11/01 17:15:03
for(i=0;i<num;i++);{
for(i=0;i<num;i++){
54:51
08/11/01 17:18:40
これは恥ずかしい・・・。ありがとうごさいます!
55:デフォルトの名無しさん
08/11/01 19:00:21
【質問テンプレ】
[1] 授業単元:計算機プログラミングII 「ポインタと文字列」
[2] 問題文(含コード&リンク):課題1
2つの任意の長さの文字列をポインタ変数pxとpyを使って入力し,
pxとpyの文字列を結合した文字列を他のポインタ変数に記憶し,その
結果を出力するプログラムを作成せよ.ただし,ヘッダファイル
string.hで定義されている関数およびsprintfを使用してはいけない.
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:2008年11月6日10:30まで
[5] その他の制限:ポインタの基礎を習い始めたところだと思います。
配列や文字列、for文、if文、関数ぐらいは簡単に習っています。
56:デフォルトの名無しさん
08/11/01 19:16:55
>>55
#include <stdio.h>
#include <stdlib.h>
int string_length(char *s)
{
int i = 0;
while(*s++) i++;
return i;
}
int main(int argc, char *argv[])
{
char *px = argv[1];
char *py = argv[2];
int len_x = string_length(px);
int len_y = string_length(py);
int len = len_x + len_y;
char *pz = malloc(len + 1);
memcpy(pz, px, len_x);
memcpy(pz + len_x, py, len_y);
pz[len] = '\0';
puts(pz);
free(pz);
return 0;
}
57:お願いします
08/11/01 20:32:50
[1] 授業単元: アルゴリズムデータ構造2
[2] 問題文(含コード&リンク): 課題 (乱数とシミュレーション、分布に従った乱数)
設問1 0から100までの一様乱数を1000回発生させ、
その頻度分布を求めよ。
設問2 いわゆる成績(偏差値)の分布の例として平均
50、標準偏差10の正規分布乱数を1000回発生させ、その頻度分布を求めよ。
なお、頻度分布は次の10種類とする。
0点から10点まで、10点から20点まで、30点から40点まで、
50点から60点まで、70点から80点まで、80点から90点まで、
90点から100点まで、
設問3、設問1で求めたデータの平均と標準偏差を求めよ。
設問4、設問2で求めたデータの平均と標準偏差を求めよ。
設問5、設問1および設問2の頻度分布をヒストグラムとして表として
見やすく作成せよ。
[3] 環境
[3.1] OS: (Windows)
[3.2] コンパイラ名とバージョン: すいません、コマンドプロンプトとしか・・
[3.3] 言語: (C言語)
[4] 期限: 11月3日までで お願いします
[5] その他の制限: (できるとこまででいいのでお願いします、制限は、乱数表記で)
問題は下に張ります
58:お願いします
08/11/01 20:37:05
/* distran.c */
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
float nrand(void) { return(float)rand()/RAND_MAX; /* 0.0 --- 1.0に正規化された乱数 */}
float urand(float a,float b) { /*区間[a,b]の一様乱数*/
return a+(b-a)*nrand();}
float nmrand(float mu,float sigma) { /*正規分布乱数*/
int i;
float a;
for(a=0,i=0;i<12;i++) a+=nrand();
return mu+sigma*(a-6.0);}
float nmrand_n(float mu,float sigma,int n) { /*観測数nをもつ正規分布乱数No.2*/
int i;
float a;
for(a=0,i=0;i<n;i++) a+=nrand();
return mu+sigma*sqrt(12.0/n)*(a-n/2.0);}
void main(void) /*観測数nを変化させたときの正規分布の乱数の分布の推移*/
{ int i,j,k,f[10];
float mu=5.0,sigma=1.0;
srand(time(NULL));
for(k=1;k<=32;k*=2) {
for(i=0;i<10;i++) f[i]=0;
for(i=0;i<1000;i++) f[(int)(nmrand_n(mu,sigma,k))]++;
for(i=0;i<10;i++) {
printf("\n %2d=%6.3f ",i+1,f[i]/1000.0);
for(j=0;j<f[i]/20;j++)printf("*");}
printf("\n");}}
>57 この文の書き換えでよろしくお願いします^^
59:デフォルトの名無しさん
08/11/01 22:34:10
>>57
URLリンク(kansai2channeler.hp.infoseek.co.jp)
1と3のみ。
> 頻度分布は次の10種類とする。
分からんので0~9、10~19、20~29・・・区切りで。
発生させた乱数と、0~100までそれぞれ出た回数を
最初に表示しているので、不要なら削除。
60:デフォルトの名無しさん
08/11/02 10:16:13
[1] 授業単元:プログラミング入門
[2] 問題文:ポインタと構造体を使って,各要素が文字列を保持するリスト構造を実装しなさい.
ただし,保持している文字列がアルファベット順になるものとする.(例えば"America"→"Japan"→"UK"など)
また,機能として,「保持している文字列を先頭から表示する」「新しい要素の挿入(挿入後に新しい要素もアルファベット順に並ぶ)」「指定した文字列を保持する要素の削除」を実装せよ.
[3] 環境
[3.1] OS: Mac OS 10.5.5
[3.2] コンパイラ名とバージョン:分かりません
[3.3] 言語: C
[4] 期限: 11月3日まで
[5] その他の制限:ポインタと構造体まで習いました。
お願いします。アルファベット順に並び替える、というのがどうすれば良いのか・・・
61:デフォルトの名無しさん
08/11/02 13:42:54
アルファベット順になる場所に挿入をすれば、結果的にソートされた状態になる。
挿入するデータと要素のデータを先頭から順番に比較していき、
挿入するデータの方が小さくなるような要素の前に、新しく要素を追加すればよい。
挿入するデータよりも大きいデータが無かったら末尾に追加。
62:デフォルトの名無しさん
08/11/02 14:01:17
>>60
空気を読まず、Windowsで作ったプログラムを登校してみる
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[OS]Win Vista
[コンパイラ]gcc 3.4.2(Mingw)
役に立たなかったらごめんなさい
63:デフォルトの名無しさん
08/11/02 16:59:16
[1] 授業単元: 信号処理
[2] 問題文(含コード&リンク):
URLリンク(kansai2channeler.hp.infoseek.co.jp) の問題の続き
① 前回完成させたのプログラム以下のように変更させなさい。
プログラム→URLリンク(kansai2channeler.hp.infoseek.co.jp)
変更箇所
data[cnt] < ave以下のとき
関数powを使って、分散の計算をして標準偏差を求めるように変更させなさい。
※補足 出力したファイルはこのような感じになっていること
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年11月4日午前8時まで
[5] その他の制限: 特になし
何回やっても出力がうまくいきません。 それとdata.txtはDLするときDLKeyが必要になりますが
お手数かけて申し訳ありません。
よろしくお願いします。
64:help me
08/11/02 17:44:54
授業単元:C言語
問題文(含コード&リンク):1から10までの任意の整数値を複数個(20~30個)程度入力し、
入力した数値がそれぞれ何個ずつだったかを表示するプログラムを作成せよ。
ただし、入力は0を入力しない限り永遠に続くものとする。 なんか*を数字の横に出力
するみたいに表示するようです。
OS: (Linux)
言語:C
期限: ([2008年11月5日23:59まで]
[5] その他の制限: あまりないようです。
なんか授業が難しくてついていけません。助けてください。
65:デフォルトの名無しさん
08/11/02 18:22:27
#include <stdio.h>
int main()
{
char buf[1024];
int i,j, count[11] = {0};
while(fgets(buf, sizeof(buf), stdin)){
int n = atoi(buf);
if(n == 0) break;
if(n < 1 || n > 10) continue;
count[n]++;
}
for(i=1; i<=10; i++){
printf("%02d ", i);
for(j=0; j<count[i]; j++) putchar('*');
putchar('\n');
}
return 0;
}
66:デフォルトの名無しさん
08/11/02 20:29:49
>>63
問題文が意味不明すぎて答えが出ない。この際、仕様に間違いがあるのはスルー。
1.とりあえず、出力は、ソースから想像すると、
・縦に全部ならべる(最大1024個)。横は1列。
・各行は、入力データ(data[i])がave未満の時だけ出力する
・出力の各行は、[i]に続いて、data[i]の標準偏差
が1セットで、これをファイル終端まで繰り返すで、OK?
+出力を横に並べるなら、横1列に並んでいる出力を、横方向にいくつか並べたいのだと推測されるが、いくつ並べるかが不明。
2.十分なメモリを確保のところ
読込先が2次元の配列になっているが、ソースは1次元。-> 2次元のほうはスルーでOK?
+ファイル丸ごとメモリに展開する(らしい)仕様は、スルーでOK?
それとも、配列サイズを最初に固定で取らずに何かしようとしてる?
(の前に、入力データの範囲が規定されてないので、配列すら確保できない仕様だが・・・)
mallocでメモリを確保したい、までは読めた。ただ、何に使うメモリを確保したいのかが書かれていないので、追記が必要です。
3.5行209921列のデータなら、1024で割り切れないのは明らかだが、
最後の1024個に満たないデータは、他と同じ処理でよい?
データ自体も、データの個数が2で割り切れない+209920行しかないのだが・・
行と列が違うのは、華麗にスルーできなかった。残念。
データ自体の不良でなければ、ここの処理の改造も必要です。
頭の中を整理するために書いたが、ここまで来て、やっと前回の①の部分の意味が分かった
・平均値は計算するだけ。ファイルには出力はしない。
・データが(平均値+5*ρ)以上の場合だけ、計算した最大値をファイルに出力する
->元の問題文だと、どうみても、全データの最大値と変わらなかった気が・・
って、こんな事書いてる間に、プログラム何本か書けるんだが。。
67:デフォルトの名無しさん
08/11/02 20:58:47
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:bcc
[3.3] 言語:C
[4] 期限:11月4日
[5] その他の制限:特になし
関数内でのポインタの使い方がさっぱりです、お願いします
68:デフォルトの名無しさん
08/11/02 21:03:05
mul(&n1, &n2);
void mul(int *x,int *y){
int temp;
temp = *x;
*x = *x * *y;
*y = temp/*y;
}
69:デフォルトの名無しさん
08/11/02 21:03:29
>>67
#include<stdio.h>
void mul(int *x,int *y);
void main(){
int n1=10;
int n2=5;
printf("変数n1の値は%dです。\n",n1);
printf("変数n2の値は%dです。\n",n2);
printf("変数n1と変数n2の積をn1に、商をn2に入れます。\n");
mul(&n1,&n2);
printf("変数n1の値は%dです。\n",n1);
printf("変数n2の値は%dです。\n",n2);
}
void mul(int *x,int *y){
int temp;
temp = *x;
*x *= *y;
*y = temp/(*y);
}
70:デフォルトの名無しさん
08/11/02 21:30:10
>>68>>69
助かりました、ありがとうございます
71:60
08/11/02 23:33:35
>>61,62さん
ありがとうございます。strcmpで比較して正負が変わる位置に挿入すれば良い、
というのは分かったので、テキストのサンプルをコピペしつつ自分で書いてみたのですが、実行するとBus errorになってしまいます。ちょっと見ていただけないでしょうか?
URLリンク(kansai2channeler.hp.infoseek.co.jp)
InsertFruitsの中でprevを挿入したい要素の一つ前を指すポインタに、ptrを一つ後を指すポインタにして、そこからポインタをつなぎ変えて挿入をさせようとしてるのですが・・・
また
1.c:67: error: incompatible type for argument 1 of ‘InitList’
1.c:69: error: incompatible type for argument 1 of ‘InsertFruits’
1.c:70: error: incompatible type for argument 1 of ‘InsertFruits’
1.c:71: error: incompatible type for argument 1 of ‘InsertFruits’
1.c:74: error: incompatible type for argument 1 of ‘PrintList’
とも出てしまいます。これはどういうことなのでしょうか?
長くなってしまいましたが、よろしくお願いします・・・
72:デフォルトの名無しさん
08/11/02 23:46:15
>>71
newて変数名は使えないよ。
67からのエラーは引数の渡し方が間違ってるって事。もちっとポインタ渡しについて復習してみそ。
73:デフォルトの名無しさん
08/11/03 00:00:01
c だから使えるだろう
74:デフォルトの名無しさん
08/11/03 00:05:31
ぐはそうだっけ?すまん。。。
75:デフォルトの名無しさん
08/11/03 00:09:20
[1] 授業単元:ループ
[2] 問題文(含コード&リンク):y=x*xの座標を*でプロットするプログラムを作ります。
縦をy軸とみなし、範囲は-5<=x<=5とします。使うのはループとputcharで、計算していいのは、
x*xだけ(y=x*xを変形してはいけない)です。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語: C
[4] 期限:11月3日
[5] その他の制限:使うのはループとputchar
よろしくお願いします。
76:デフォルトの名無しさん
08/11/03 00:27:23
>>71
ポインタが欲しいところに中身を渡してる。
くだものよりも、67行目~74行目の*が、いらない子。
あ、くだものは一覧だったw
といっても、InitList()に渡す前に、listの初期化必要でない?
どこも指してないのに、そこのアドレスを使って何かを入れようとしても、
だめだと思います。
あ、配列の使い方だ。これを覚えようw
77:60=71
08/11/03 00:44:50
すみません、main関数の中身が間違ってました。
int main(void) {
List list;
InitList(&list);
InsertFruits(&list, "orange");
InsertFruits(&list, "grape");
InsertFruits(&list, "apple");
puts("くだものいちらん");
PrintList(&list);
return(0);
}
こうでした。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
エラーは出なくなったのですが、Bus errorはやはり出ます。
InsertFruitsの中身がおかしいのだと思うのですが、どなたか助言をお願いします。。
78:デフォルトの名無しさん
08/11/03 00:52:12
>>75
#include <stdio.h>
int main(void){
int x,y;
for(y=25;y>=0;y--){
for(x=-5;x<=5;x++){
if(y==(x*x)) {putchar('*');}
else {putchar(' ');}
}
putchar('\n');
}
return 0;
}
x,yともにintだけどこれでいーの?
79:デフォルトの名無しさん
08/11/03 01:05:20
>>77
callocのあたりじゃないかと予言をして俺は寝る。限界だ
80:デフォルトの名無しさん
08/11/03 01:08:55
>>77
InitList()で、list->headまたはlist->tailのnextメンバをNULLにしておくなどあるべきだと思う。
InsertFruits()のFruits型へのポインタ変数newが明らかに無効なポインタだと思う。
while(strcmp()) {}で、ptr = ptr->nextとかあるが、ptrが例えばNULLのときどうするのか。
List型のtailメンバは使わないのか。
81:デフォルトの名無しさん
08/11/03 01:13:20
>>77
InsertFruits()でataraにallocしてないのでは?
Fruits *atara;
atara = (Fruits*)calloc( 1, sizeof(Fruits) );
82:デフォルトの名無しさん
08/11/03 01:27:34
<<78
ちなみにifを使わないとしたら、どうなるでしょうか。
83:デフォルトの名無しさん
08/11/03 01:34:45
>>82
三項演算子使うぐらいしか思いつかん
if(y==(x*x)) {putchar('*');}
else {putchar(' ');}
のとこを
y==(x*x) ? putchar('*') : putchar(' ');
にするとか。意味が感じられんが
つーかなんでそんな偏屈じみた制約がついてるんだ
84:デフォルトの名無しさん
08/11/03 01:52:33
ふふふ、switchがあるぜよ?
85:デフォルトの名無しさん
08/11/03 01:55:04
>>77さん
URLリンク(kansai2channeler.hp.infoseek.co.jp)
試してみてください。
修正箇所はソースにコメントで記載してあります。
86:デフォルトの名無しさん
08/11/03 02:10:56
>>85です
コメント忘れましたが、PrintList()のwhileの中身の順番を入れ替えてました
87:デフォルトの名無しさん
08/11/03 02:12:34
>>77
=76
でおくれた!
とりあえず途中まで書いた。直してるうちに、原型がなくなったとかは内緒。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
登録、表示まで実装。
ごめん、76で配列っていうのは、ただの勘違いw
制約条件のリスト構造忘れてたorz
88:76=87=88
08/11/03 02:25:58
>>77
もう一個。元のソースをいじるなら。
メモリの実体を確保せずにポインタを渡しても・・・
が、どこかでおきています。
【対策する所】
List list;
//ここに何か。
InitList(&list);
【原因】、
/*headとtail初期化*/
void InitList (List *list) {
list->head = list->tail = AllocFruits();
}
で、listがどこもポイントしていないのに、
list->head、list->tailに値を代入していること。
89:76=87=88=89
08/11/03 02:29:16
うあ、いかん。読み違えた。
おとといから寝てないの、ひびいとるな・・・
88は忘れて下さいorz
90:デフォルトの名無しさん
08/11/03 03:27:32
[1] 授業単元:グラフの利用、データの可視化
[2] 問題文:
①: 電気双極子の作る静電ポテンシャルは
φ=(q/4πε){1/(x^2+y^2+(z-d/2)^2)^(1/2)-1/(x^2+y^2+(z+d/2)^2)^(1/2)}
で与えられる。ここで、正負の電荷は、(0,0,5),(0,0,-5)に存在するとしたとき、つまりd=10のときのポテンシャルの概形を描け。ただし、q/4πε=1とせよ。
また、y=0として、x-z平面におけるポテンシャルのみを書けば良い。
図示する範囲は、xは-20と20の間、zは-40と40の間とし、その範囲を各々20等分、40等分して、21×41のデータとして入力せよ。
②: ①と同様に+qの電荷が(0,0,5)、(0,0,-5)に、-2qの電荷が(0,0,0)に存在するとしたときのポテンシャルの概形を描け。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:2008年11月4日16:00まで
[5] その他の制限:
問題①だけでもいいのでお願いします。
91:デフォルトの名無しさん
08/11/03 03:43:36
gccでグラフ書くってgnuplotとかかな
92:87=92
08/11/03 04:23:40
>>77
削除部分も実装。参考程度に。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
>>91
なにかちがうきがする・・
93:デフォルトの名無しさん
08/11/03 04:33:39
グラフィカルにプッロトするのもあるけど、単に * で表すとか。
94:=92
08/11/03 05:27:07
>>90
環境の情報が足りないかと。
授業単元からして、、グラフの作成ソフトが別にありそう。
あとX-Windowは立ち上がってる?
それと、使うライブラリ、何か指定は?
これはどうみても、Cというより物理の問題になってる気がw
91の補足。
gnuplotを使うなら、Cから標準出力に、gnuplotのコマンドを吐いて、
パイプでつなぐ。 = Cの宿題ではなさそう
とりあえず時間がないので、早めに情報出したほうが良いと思われ。
もう一個。
Cで書く前に、グラフ作成ソフトである程度結果をつかんでから始めたほうが早いです。
95:=92
08/11/03 05:36:14
>>90
う" 問題よく見たら、ただのトラップかw
この式、グラフを書く時はほとんど定数扱いで、
変数はφとxとzだけ・・・
2次元の平面(x-z)で、21x41のマスをつくって、そこの値を計算。
って、表計算と同じw
ただ、マス目の中のデータ(数値)を可視化する要素が足りない。
とりあえずExcelでも立ち上げて、各マス目のデータ計算してくるか。。
問題はExcelが手元にない事だが。
96: ◆NiyDyBDWQM
08/11/03 05:46:19
[1] 授業単元:プログラミングC
[2] 問題文(含コード&リンク):
<関数 配列渡し>
以下のようなプログラムを作成しなさい.
2つの整数配列(要素数は任意)、配列Aと配列Bを受け取り,配列AとBの要素の値
の平均値(実数)をそれぞれ計算し、平均値が大きい方の配列の内容(整数)と平均
値(小数点第1位まで)を表示する関数を作る。また、この関数を使って以下の2つ
の配列の平均値を比較するプログラム.
配列A{1,2,3,4,5} 配列B{2,3,4,5,6}
※関数に配列を渡す時は、関数内では配列の大きさがわからないので、以下の例
のように配列と配列サイズを渡す必要がある。
void func(int vector_a[], int vector_a_size);
int vec[3] = {1,2,3};
func(vec, 3); // func(vec, sizeof(vec)/sizeof(int));
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名 Cygwin
[3.3] 言語:C
[4] 期限: 11月3日 10時まで
[5] その他の制限: まだまだ序の口のほうです。
期限まで時間があまり無いですが、どうか宜しくお願いします。
97:=92
08/11/03 06:23:45
>>96
期限なさすぎw
というか、この時間に誰か起きてることを期待しちゃいけません。
ま、一瞬で終わる問題だが・・
98:=92
08/11/03 06:49:10
>>96
URLリンク(kansai2channeler.hp.infoseek.co.jp)
釣りかと思ったけど、アップしとく。
・doubleはどうせあふれないと想定されてるっぽいので、オーバーフローのチェック省略。
必要なら改造しましょう。まだ時間は十分あるw
99:デフォルトの名無しさん
08/11/03 07:01:46
>>98
ありがとうございました。
非常に助かりました。
100: ◆7777.bQf6c
08/11/03 08:29:18
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS: Windows XP
[3.2] コンパイラ名とバージョン: Visual stdio 2005
[3.3] 言語: C
[4] 期限: 11/3 24:00
[5] その他の制限:2次元配列とfor文を使ったものでお願いします
101:デフォルトの名無しさん
08/11/03 08:42:44
>>99
関数が題意満たしてないように見えるんだけどw
102:デフォルトの名無しさん
08/11/03 09:50:03
>>100
うpろだtxtの結果表示(AB)は正しいのでしょうか?
どこを計算して先頭の"52"を導き出すのかがイマイチ・・・
103:デフォルトの名無しさん
08/11/03 09:58:47
>>102
52だと思うが。
104:100 ◆7777.bQf6c
08/11/03 10:05:27
>>102
先頭の52の求め方は
(5*9)+(-2*-1)+(1*5)=52
となります
行列の積の計算方法については、こちらを参照して下さい
【3行3列の行列の和と積の計算方法を教えて下さい。 -OKWave】
URLリンク(okwave.jp)
105:デフォルトの名無しさん
08/11/03 10:11:39
>>100
int AB[3][3];
for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++) {
AB[i][j] = A[i][0]*B[0][j] + A[i][1]*B[1][j] + A[i][2]*B[2][j];
}
}
printf("== AB ==\n");
for(i=0;i<3;i++){
for(j=0; j<3; j++){
printf("%3d",AB[i][j]);
}printf("\n");
}
106:デフォルトの名無しさん
08/11/03 10:20:48
すまん、俺が寝ぼけているのかもしれんが、>>100の結果、やっぱおかしくないか?
107:デフォルトの名無しさん
08/11/03 10:25:32
#include <stdio.h>
#define N 3
int main(){
int i,j,ii;
int a[N][N]={{5,-2,1},{9,2,9},{-3,7,4}};
int b[N][N]={{9,6,3},{-1,-2,-3},{5,3,1}};
int ab[N][N];
for(j=0;j<N;j++){
for(i=0;i<N;i++){
ab[j][i] = 0;
for(ii=0;ii<N;ii++){
ab[j][i] = ab[j][i] + a[j][ii] * b[ii][i];
}
}
}
printf("== AB ==\n");
for(i=0;i<N;i++){
for(j=0; j<N; j++){
printf("%3d",ab[i][j]);
}printf("\n");
}
return 0;
}
108:デフォルトの名無しさん
08/11/03 10:27:42
実行結果でのAの(2, 3)成分とコード中でのそれが食い違ってる。
たぶん、実行結果のAが正しい
109:デフォルトの名無しさん
08/11/03 10:31:08
わざとこういうミスをして、悩む学生を見ながらニヤニヤする変な教官とかいそう。
110:デフォルトの名無しさん
08/11/03 10:49:24
そういう言い訳をする教官もいそう。
111:60=71=77
08/11/03 11:25:53
皆様、ありがとうございます・・・!
>>85さんのソースに、>>92さんの削除関数をアレンジして加えたのですが、
リストの一番後ろの要素を削除してそれをPrintListすると無限ループしてしまいます。listのtail部分がおかしくなっているからだと思うのですが、どう直せばよいか教えていただけないでしょうか?
URLリンク(kansai2channeler.hp.infoseek.co.jp)
削除関数のアレンジした部分はコメントの※印部分です。お願いします。。
112:デフォルトの名無しさん
08/11/03 11:28:45
[1] 授業単元:計算機システム
[2] 問題文(含コード&リンク):
浮動小数点数のビットパターンを表示するプログラムを作成せよ。
そして、1.0 および、0.1, NAN, マイナス無限大, プラス無限大, その他適当な小数がどのようなビット列で表現されているか確認せよ。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:
[3.3] 言語: C
[4] 期限: 11月5日
[5] その他の制限:なし
おねがいします。
113:デフォルトの名無しさん
08/11/03 11:38:58
なんか漠然とした問題だな
114:デフォルトの名無しさん
08/11/03 12:40:22
>>112
#include <stdio.h>
#include <limits.h>
int is_little_endian(){
int x = 1;
return *(char*)&x;
}
typedef unsigned char byte_t;
void print_bytebits_(byte_t value){
byte_t mask = 1 << (sizeof(byte_t) * CHAR_BIT - 1);
for(;mask; mask >>=1) putchar(mask & value ? '1' : '0');
}
void print_bits(void *p, int bytesize){
byte_t *p_byte = (byte_t*)p;
int i;
if(is_little_endian()){
for(i=bytesize-1; i>=0; i--) print_bytebits_(p_byte[i]);
}else{
for(i=0; i<bytesize; i++) print_bytebits_(p_byte[i]);
}
}
int main(){
double values[] = {1.0, 0.1, 0.0/0.0, -1.0/0.0, 1.0/0.0, -3.14};
int i;
for(i=0; i<sizeof(values)/sizeof(*values); i++){
print_bits(&values[i], sizeof(double));
printf("(%.02f)\n", values[i]);
}
return 0;
}
115:デフォルトの名無しさん
08/11/03 12:46:05
[1] 授業単元:C
[2] 問題文(含コード&リンク):
カレントディレクトリの".txt"という拡張子を持つすべてのファイルを
読み込み、ファイルに記載されているデータを二倍して".TXT"というファイルに出力しなさい。
".txt"の拡張子前のファイル名はランダムな数字列であり(例:029340.txt)、
ファイルの中身は以下の5行1列からなる数値ファイルである。
.txt
3
5
2
4
5
.TXT
6
10
4
8
10
[3] 環境
[3.1] OS:windowsXP
[3.2] コンパイラ名とバージョン:borland C++
[3.3] 言語: C
[4] 期限: 11月4日
[5] その他の制限:なし
116:115
08/11/03 12:47:39
>>115
すいません間違えました。
.TXTではなくて.Tです。
117:デフォルトの名無しさん
08/11/03 12:52:06
半角を全角にするのもやればいいのか?
118:デフォルトの名無しさん
08/11/03 12:55:34
>>117
すいません。
数値は半角です。
119:デフォルトの名無しさん
08/11/03 13:13:29
>>113さん
遅くなってごめんなさい。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
修正箇所は申し訳ないのですがDIFFツールなどで調べてください。
120:119
08/11/03 13:15:53
アンカーミス
>>111さんでした
釣ってきます
121:デフォルトの名無しさん
08/11/03 15:28:51
>>115
URLリンク(kansai2channeler.hp.infoseek.co.jp)
ファイル名が 数字のみ.txt であるかのチェックはあり、
中身が数字のみか、5行1列かのチェックはないんで
そうなっているファイルを用意しておくこと。
122:help me
08/11/03 15:37:36
>>65 お礼遅れましたすみません。 とても助かりました!
ありがとうございました。(^0^)
123:デフォルトの名無しさん
08/11/03 16:11:32
[1] 授業単元:C++
[2] 問題文(含コード&リンク):URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン:VS2008
[3.3] 言語:C++
[4] 期限:[2008年11月08日まで]
よろしくお願いします。
124:デフォルトの名無しさん
08/11/03 16:20:08
[1] 授業単元: 画像処理プログラミング
[2] 問題文(含コード&リンク):
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS: UNIX
[3.2] コンパイラ名とバージョン:
[3.3] 言語: C
[4] 期限: 11月4日
よろしくお願いします。
期限が近いのにまったく手が出ません。
125:デフォルトの名無しさん
08/11/03 16:28:13
>>124
久々にめんどくさそうなの来たなwwww
126:デフォルトの名無しさん
08/11/03 16:30:47
何をwwwwで笑っているのか知らんが、面倒臭いと思うのも個人の主観。
ぜんぜん面倒臭くない、単なるバイナリーデータの操作だろ、そんなの。
むしろ、オラッ、強敵が現れてなんだかwktkしてきた、ってゴクウみたいな
奴もいるかもしれんぞ?
127:デフォルトの名無しさん
08/11/03 16:35:43
>>126
もちろん>>124を明日までに一から作れる暇とスキルがあっての書き込みだよな?
128:デフォルトの名無しさん
08/11/03 16:44:45
>>126
多分おれのこと言ってるんだと思うけど今回はお前に宿題ゆずってやるよ
129:100 ◆7777.bQf6c
08/11/03 16:45:49
返信遅れてすいません
txtに書かれたプログラムは私の打ち間違いです、失礼しました
それと>>105さん>>107さん、ありがとうございました
130:60=71=77=111
08/11/03 16:56:46
>>119さん
ありがとうございます。正常に動きました。
その他助けてくださった方々、本当にありがとうございました!
131:デフォルトの名無しさん
08/11/03 16:58:01
>>126さんが明日までにコンバータ作ってくれるそうです。良かったですね>>124
とりあえず両手を空に挙げてやるから元気玉でも集めて作ってみろよ。面倒じゃないんだろ?>>126
132:デフォルトの名無しさん
08/11/03 17:05:49
>>1 読める?読めない?聖徳太子(ry
要するに、個人を指定、特定して答えてもらうスレじゃないんだよ、ここ?
やってくれるよ、良かったね?お前がやれよw
133:デフォルトの名無しさん
08/11/03 17:13:25
>>124はスルーする流れなのか?
134:デフォルトの名無しさん
08/11/03 17:26:35
>>66
レス遅れてすみません><
1.出力は
・縦ではなく、横にならべる。つまり行。縦は1024列(絶対)。
・各行は、data.txtのデータ(data[i])が(ave) + 5*(sd)以上の時だけ出力する
しかし、[0][0],[0][1],[0][2],・・・,[205][3]をひとつの区切りとする。
この1024個中の標準偏差(ave) + 5*(sd)以上の値を出力する。
次に[206][0],[206],[1],・・・,[411][2],[411][3]の1024個中の標準偏差以上の
値を出力する。このとき、peak.txtに改行して出力する。
このようにdata.txtの値を1024個で区切る。
2.十分なメモリを確保のところ
ソースは1次元に見えるけど、出力ファイルには2次元で!!
mallocでメモリを確保したいのは、data.txtが約16Mもあるから!!
3.文章に間違えありました!!!!
5行209921列のデータではなく、209921行5列のデータです。
なので
[0][0],[0][1],[0][2],・・・,[205][3]
[206][0],[206][1],・・・,[211][3]
[211][0],[211][1],・・・,[216][3]
[217][0],[217][1],・・・,[222][3]
・
・
・
と1024個で区切れる。
どうでしょうか? プログラムよろしくお願いします。
135:デフォルトの名無しさん
08/11/03 17:27:45
>>132
必死なのは分かるが、とりあえず聖徳太子(ryのテンプレ教えてくれ。
あと>>124は最近傍法での拡大くらいまでは、と思ってるが、さすがに(4)はなんとかいうフォーマットから調べないかんなあ。
136:デフォルトの名無しさん
08/11/03 17:40:44
フォーマットはぐぐれば一発だよ
だからさっさと作っておくれー
137:デフォルトの名無しさん
08/11/03 17:57:05
>>124 URLリンク(kansai2channeler.hp.infoseek.co.jp)
こんな感じか?
コンパイルすらしてないコードなんで動かなかったら適宜修正してくれ。
138:137
08/11/03 18:04:34
flee... orz
139:デフォルトの名無しさん
08/11/03 18:16:38
>>135
> 必死なのは
誰とも分からない見えない人に答えさせようとしているお前。
140:デフォルトの名無しさん
08/11/03 18:42:00
日本語かc/c++でおk。
141:デフォルトの名無しさん
08/11/03 18:50:01
C言語で数字を小数第一位まで表示させるにはどうすればようでしょうか。
142:デフォルトの名無しさん
08/11/03 18:51:23
%.1f
143:=92
08/11/03 19:43:57
久しぶりに夕方まで寝てしまった。。。
>>101
問題読み違ってた?
ま、あとはがんばれw
144:=92
08/11/03 20:02:13
>>90
URLリンク(kansai2channeler.hp.infoseek.co.jp)
計算する所までは実装。計算結果は①:dataout1.csv、②:dataout1.csvに出力。
グラフ化の部分は、環境がわからんのでパス。3次元のグラフを*で書く気にならなかった。
csv内のデータは、横方向:x(-20~20)、縦方向:z(-40~40)、値:φ(x,z)
電荷ごとに、0除算のオーバーフローをdoubleの最大値として処理しているので、
②の結果が上下対象になっていません(斜めにdoubleの最大値が入る)。
計算結果の検算と②の式のチェックは、がんばれ。
②の処理はコメントアウトしてあります。
②を使う時は①の処理をコメントアウトしてから、
②の処理のコメントアウトを解除します。
②は、せめて式とdの値を書かないと。
ここは電磁気学の板じゃないので。
適当に調べてかいといたけど・・
145:=92
08/11/03 20:11:49
>>134
っ計算機
5も209921も奇数。よって、5x209921も奇数。
1024は偶数。
従って割り切れることはありません。
+[0]~[3]なら、要素数は4。
問題を解く前に、概算するくせをつけましょう。
146:=92
08/11/03 20:22:21
>>134
連投すまん。
1024個単位なら、256x4。
従って、
[0][0]~[0][3]
・・・
[255][0]~[255][3]
[256][0]~[256][3]
・・・
[511][0]~[511][3]
という感じになるはず。
あと、メモリのところ。
[0][0]~[0][3]
・・・
[255][0]~[255][3]
だけ確保して、1024個分を順次読み込み、1024個単位で処理すれば、
17.2MB分をmallocする必要はないと思うのだが、なぜ確保するのか?
(全体をメモリに格納しないと処理できない計算が発生するのか?)
これが知りたい。
147:デフォルトの名無しさん
08/11/03 20:28:02
y=cos(x)の座標を表示させようとしているんですけど、次のプログラムって何が変なんですか。
int main(){
double x, y, pai=3.14, cos;
for(y=1; y>=-1; y++){
for(x=1; x<=4*pai; x++){
if(y==cos(pai/x)){
putchar('*');
}
else{
putchar(' ');
}
putchar('\n');
}
}
return 0;
}
148:デフォルトの名無しさん
08/11/03 20:47:07
1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
無限級数
(1)Σx^(i-1)の極限が1/(x-1)になる過程を示す。
(2)f(x)=0の解を数値的に求めるアルゴリズム。
プリントにこんだけしか書いてないけど大学のパソコンからじゃないとhpが開けないのですいません。
[3] 環境
[3.1] OS: Windows XP
[3.2] コンパイラ名とバージョン: GNU C Compiler(独習cにふぞくしてるやつ)
[3.3] 言語: C
[4] 期限: 明日の五時迄
[5] その他の制限:scanf関数でxとnに入力する形でfor文を使ったものでdouble型でお願いします 。
149:148
08/11/03 20:48:27
一応自分で作ったんですけどコンパイルできなくて何がなんだか・・・
#include <stdio.h>
int main (void)
{
int n, i, f ,x;
printf ("xに代入する値を入力してください。\n");
scanf ("%lf",&x);
printf ("nに代入する値を入力してください。\n");
scanf ("%ld",&n);
for (1=0;i<=n;i++)
{x*=(i-1);
f+=x;}
printf("求める値は %dです。\n",f);
return 0;
}
150:=92
08/11/03 20:53:50
>>147
・x, yはintにする必要がある。(詳細は、forを調べましょう)
・cos(pai/x)としているが、pai/xの部分を考え直しましょう
151:デフォルトの名無しさん
08/11/03 20:58:37
>>149
・fが初期化されていない
・1=0ってなに?
・intなのに%lf
152:=92
08/11/03 20:59:42
>>149
エラーの出る場所:
for (1=0;i<=n;i++)
1=0(定数に定数を代入しています): iと1の打ち間違い
153:148
08/11/03 21:06:21
>>151
>>149
double型にするのをわすれてました
これを実行すると何を代入しても答えが0になるんですけど
どこを直せばいいでしょうか?
#include <stdio.h>
int main (void)
{
double n, i, f ,x;
f=0;
printf ("xに代入する値を入力してください。\n");
scanf ("%lf",&x);
printf ("nに代入する値を入力してください。\n");
scanf ("%ld",&n);
for (i=0;i<=n;i++)
{x*=(i-1);
f+=x;}
printf("求める値は %dです。\n",f);
return 0;
}
154:デフォルトの名無しさん
08/11/03 21:07:06
>>149
#include <stdio.h>
#include <math.h>
int main(void)
{
int n, i;
double x, f = 0.0;
printf ("xに代入する値を入力してください。\n");
scanf("%lf", &x);
printf ("nに代入する値を入力してください。\n");
scanf("%d", &n);
for (i = 1; i <= n; i++) {
f += pow(x, i-1);
}
printf("求める値は %f です。\n", f);
return 0;
}
それと極限は 1/(1-x) な
155:デフォルトの名無しさん
08/11/03 21:09:37
nについて良く見直せ。
156:=92
08/11/03 21:10:48
>>149
うは、かぶった><;
ついでに、doubleの値がどこかに必要だと思うのだが・・
あと、問題文に、i->nの時の極限と書かないと分からない。
157:デフォルトの名無しさん
08/11/03 21:16:07
[1] 配列:
[2] 問題文:
10個のデータがランダムに格納されている一次元配列を用意して、その中から偶数のみを表示させるプログラムを作る
158:148
08/11/03 21:17:12
直して少し改変したらめちゃくちゃな結果がでました
#include <stdio.h>
int main (void)
{
double n, i, f ,x;
f=0;
printf ("xに代入する値を入力してください。\n");
scanf ("%lf",&x);
printf ("nに代入する値を入力してください。\n");
scanf ("%lf",&n);
for (i=0;i<=n;i++)
{x*=(i-1);
f+=x;
printf("n= %d の時、求める値は %d です。\n",i,f);
}
return 0;
}
159:=92
08/11/03 21:22:14
>>158
結果表示のfは%d?
あと、極限と1/(x-1)の差も表示しないと、どれくらい近づいたかわからない。
ただし、もとのxが保存されていないことに注意。
160:=92
08/11/03 21:24:56
食事してくる。あとはまかせた!
161:デフォルトの名無しさん
08/11/03 21:27:03
>>158
i, n は int でいい。
それにあわせて n の入力時も scanf("%d", &n)
それから for 文の中がおかしい。
x のベキ乗を求めるなら f += pow(x, i-1)
>>154
162:148
08/11/03 21:30:56
>>160
ありがとうございました。
>>161
mathはまだ習ってないのでできればstdioのみでやれるようにしたいのですがどうすればいいのやら・・・
163:デフォルトの名無しさん
08/11/03 21:42:19
>>162
ちゃんと確認してないからミスがあればすまん。
for (i = 1;i < n; i++){
temp = x;
for (j = 0;j < i-1; j++) {
temp *= x;
}
f += temp;
}
164:148
08/11/03 22:12:59
>>163
ありがとうございます。
165:=92
08/11/03 22:19:32
>>148
ふと思った事。
lim Σx^(i-1) -> 無限大。収束しない。
極限とか1 / (x-1) とでてきたあたりで、log(x)の微分が1/xとか思い出すのだが・・
166:デフォルトの名無しさん
08/11/03 22:22:02
この条件分は可能ですか。
if(4<=x<=10)
167:=92
08/11/03 22:29:15
>>166
if ((4 <= x) && (x <= 10))
168:148
08/11/03 22:29:54
まだ格闘してます
>>165
すいません1/(1-x)でさらに0<x<1って条件付でした
169:デフォルトの名無しさん
08/11/03 22:33:03
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク): y=cos(x)の座標を*でプロットするプログラムを作ります。
範囲は[0, 4π]です。
[3] 環境
[3.1] OS: UNIX
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[5] その他の制限:ループと条件分岐、putcharを使う
170:デフォルトの名無しさん
08/11/03 22:35:28
>>164
>>163だが
x^0のことを忘れてた。
for (i = 1;i < n; i++){
temp = 1;
for (j = 0;j < i-1; j++) {
temp *= x;
}
f += temp;
}
171:112
08/11/03 22:38:23
>>114
ありがとうございます。ただ、どんな原理で動いているのかサッパリなので、
もしよろしければ解説していただけないでしょうか・・・?
172:デフォルトの名無しさん
08/11/03 22:45:02
いうまでも無かろう、汎用電子計算機の基本的な仕組み
0と1の組み合わせで、実装されている仕様に応じて
動作しているのさ、フフンッ
173:=92
08/11/03 22:53:47
>>112
ヒント。
外ループが回るごとのfの値:
f=1 (jは0から-1まで。内ループの実行回数は、0)
f=1 + 1*x (jは0から0まで。内ループの実行回数は、1)
f=1 + 1*x + 1*x*x (jは0から1まで。内ループの実行回数は、2)
f=1 + 1*x + 1*x*x + 1*x*x*x (jは0から2まで。内ループの実行回数は、3)
・・・
f=1 + 1*x + ・・・ + 1*x^(n - 1) (jは0からn-2まで。内ループの実行回数は、n-1)
174:デフォルトの名無しさん
08/11/03 22:58:42
単純に、double型の変数を1バイトごとに分けて
さらに1ビットずつチェキしていると。
175:=92
08/11/03 23:01:28
>>112
問題文(1)は、
lim (i = 0 -> n-1) Σx^i = 1/(x-1)
に書き直すと分かりやすかったかも。
元が、lim (i = 1 -> n) Σx^(i - 1) になってると、ちょっと混乱w
連投ごめんなさい。
176:デフォルトの名無しさん
08/11/03 23:06:12
>>174
double型って、
符号(1bit) | 指数(11bit) | 仮数(52bit) の64ビットで構成される数の事言ってる?
177:デフォルトの名無しさん
08/11/03 23:11:28
>>165
ベキ級数ですから、収束条件は |x| < 1 ですしね。どうなんでしょうね。
178:デフォルトの名無しさん
08/11/03 23:14:45
>>112くらいのプログラムなら初心者にとっては勉強になるモンなんだろな
規格が出来る前は浮動小数点型が>>176の構成だとは限らなくて
機種依存だったわけだし。
これからも128bit機とかがでたらdoubleの構成が変わるかも?しれん
179:クソースでおじゃっ
08/11/03 23:20:18
>>112
#include <stdio.h>
#define BPB 8 // 1byte / 8bit
void hoge(double x) {
int i,j;
char *p;
for(i=sizeof(x)-1,p=(char*)&x; i>=0; i--) {
for(j=BPB-1; j>=0; j--) {
printf("%d",(p[i]>>j)&1);
}
printf(" ");
}
}
int main(void) {
double a[]={1.0, 0.1, 0.0/0.0, -1.0/0.0, 1.0/0.0, -3.14};
int i;
for(i=0; i<sizeof(a)/sizeof(a[0]); i++) {
printf("a = %lf \n",a[i]);
hoge(a[i]);
puts("");
}
return 0;
}
180:デフォルトの名無しさん
08/11/03 23:20:21
double のデータ構造がどうこうよりビット操作やビットマスクの
勉強としての意義のほうが大きいと思う。
181:デフォルトの名無しさん
08/11/04 00:14:43
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク): y=cos(x)の座標を*でプロットするプログラムを作ります。
範囲は[0, 4π]です。
[3] 環境
[3.1] OS: UNIX
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] できるだけ早く
[5] その他の制限:ループと条件分岐、putcharを使う
よろしくお願いします。
182:デフォルトの名無しさん
08/11/04 00:19:07
>>146
う~~~ん・・・・伝わらないよ><
205×5-1で1024個になるって意味なんですけど。。。
つまり205行5列で1024個ってことなんですけど。
どうでしょうか? 伝われば幸いです。
malloc
183:デフォルトの名無しさん
08/11/04 00:33:06
>>178
double(MSDNだとreal*8で引くと良い?)よりもlong doubleが変わりそう。
real*10はFPUが80bitで・・とかのあたりだろうし。
というか、>>172、>>174
もとの質問番号書いといてくれ。
間に割り込み多すぎて、どれに対する反応かわからんw
>>180
だね。
printf("%s", (MSDNの浮動小数点のページの内容));
してもしかたないしw
>>182
君の気持ちを受信した。
[204][4]をどうするかの問題は残るが、適当に処理しよう。
184:183
08/11/04 00:57:50
data.txtを確認しなおしました。
整理すると、
1行目~205行目 -> [0][0]~[204][4] (ただし[204][4] にあたる部分はデータなし)
206行目~410行目 -> [205][0]~[409][4] (ただし[409][4] にあたる部分はデータなし)
・・・
という感じですね。
で、最後が、
~209920行目 -> [209715][0]~[209919][4] (ただし[204][4] にあたる部分はデータなし)
で、209920 / 205 = 1024と。
(最後の209921行目はEOFしか入っていないので、データの最後はその前の行)
で、mallocは、[0][0]~[204][4]と同じサイズx1024を確保したいと。
(2次元配列の1箇所だけ空けるわけにいかないので、確保するのは1025 x 1024)
だいぶ見えてきたね。
185:183
08/11/04 03:38:21
>>182
途中経過。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
平均、標準偏差などの計算周りを実装。ファイルへの出力部が未実装。
ごめん、原型はなくなった。
186:183
08/11/04 04:16:29
>>182
あ、一個忘れてた。問題どれが正しいのかわからん。
出力は、
(>>134 によると)
・出力は、縦方向は1024行。横はデータ次第。
・data.txtのデータ(data[i])が(ave) + 5*(sd)以上の時だけ出力する(画面に?ファイルか?)
・[206][0],[206],[1],・・・,[411][2],[411][3]だけ、
標準偏差(== sd)以上の値をpeak.txtに出力する。
(->とりあえず、[206][0],[206],[1],・・・,[411][2],[411][3]だけでなく、
1024個全部出力しとく。標準偏差1個だけ出力したいわけではなさそうなので。)
(>>63 によると)
・data.txtのデータ(data[cnt]) < ave(== 平均値)以下のとき、
標準偏差をpeek.txtに出力する。(分散も?ファイル名あってる?)
(もとの問題文(7914.txt)によると)
③が最終的に欲しいものとして、
・データ1024個ごとのブロック内の最大値と、周波数(そのブロック内の何番目のデータか)を、
peek.txtに出力。
->これはどうがんばっても、各ブロックごとに1個しか最大値がないので、
縦1列になる。これを横5個とかに並べなおして出力?(横にいくつ並べるかは書いてないが)
あと、①の
・各ブロックの、平均値と、最大値と、(ave + 5*sd)以上のデータを、それぞれ
計算する(画面に表示する??)、最大値だけは③でpeek.txtに出力する
(かなりがんばって解釈したが、これで良いのか?)
①は今回は関係なし?
187:183
08/11/04 04:17:42
>>182
続き。
とりあえず、(63の条件の) powを使って分散を計算、そこから標準偏差の計算までは実装済み。
以下、すべて予定。
こんな時間に見てなさそうだから、出力は全部画面に向けとく。
ファイルへの出力は、134を信じて、peek.txtに標準偏差が出るようにしておく。
あとは、好きなのをファイル出力に向けなおして。
途中で寝てなければ、そのうちアップする。
188:183
08/11/04 05:56:00
>>182
いかん、ぼけとった。
>>186の内容を一部修正。
(>>134 によると) のところ。3個目。
・出力するのは、標準偏差でなく、個別データだった。(最終行で間違った。)
ということは、[206][0],[206],[1],・・・,[411][2],[411][3]だけで良いのか?
(今書きかけのプログラムのは、全部出してるが。)
・標準偏差(== sd)以上の値 -> これは、平均値+標準偏差だと思うので、ave + sdにしておいた。
あと、>>185で貼ったソース。
分散を求めるところでj=0でクリアしているが、ループの他のところでも使っているので、アウト。
分散の計算は、ループから分離した。
そろそろ時間が近いな。。
189:183
08/11/04 06:07:37
>>182
もう一個発見。
>>183の
(>>63 によると) のところ。
(data[cnt]) < ave(== 平均値)以下のとき標準偏差を出力、 は意味を成さない。
(data[cnt]) < ave(== 平均値)以下のdata[cnt]を出力、が正しそうだ。
それから、不明点。
・各ブロック([0][0]~[204][4])とかの何番目にあるか == 周波数
・何ブロック目か == 周波数 // ([0][0]~[204][4])が1、([205][0]~)が2
これのどちらが正しい?
問題文で1024個のそれぞれが周波数に対応としているが、
どっちの1024個かわからんとです。
とりあえず、各ブロック([0][0]~[204][4])とかの何番目にあるか == 周波数
としたが。。
。。。書いてるうちに、もう一個発見。
[206][0],[206],[1],・・・,[411][2],[411][3]は、区切りがずれとるな。。
190:デフォルトの名無しさん
08/11/04 06:09:01
落ち着け
191:デフォルトの名無しさん
08/11/04 06:20:04
無駄に複雑化した気が。
てかはじめのままで何でだめなの
192:183
08/11/04 07:29:45
>>182
URLリンク(kansai2channeler.hp.infoseek.co.jp)
とりあえずこんな感じか?
出力の条件がいろいろあったので、それぞれ出しておいた。
出力条件ごとに別ループにしてあるので、
いらないのは、コメントアウトする事。
あと、ファイルに出力したのは、
[205][0],[205],[1],・・・,[409][2],[409][3]の中で、
data > aveを満たすデータ。
横5個で改行。
193:183
08/11/04 07:31:43
>>191
答え:出力条件が違う。出力フォーマットが違う。出力するものが違う。
194:183
08/11/04 07:35:31
>>191
その前に、問題文がちがう・・・のが大きかった
あと、もう一個理由追加。
無駄にmallocしてるから。(問題の条件にあるから)
195:183
08/11/04 07:45:24
入力ファイルは2次元(205x5)でも、
1次元(1024)の配列で処理すれば、本来はいける。
(というか、その方が処理が格段に楽。)
205x5が1024にならない、という突っ込みは、どこか上の方を参照。
最後の1個が欠けたデータなんだ。
今回の問題は、
・入力データ(17.2MB)を丸ごと配列に押し込む、
・配列は、double[205 * 1024][5]
の制約付き。
これも、どこか参照。
簡単な版作る?
196:183
08/11/04 08:10:37
始めの方を元に作り直そうと思ったけど、strtokの使い方があやしいのと、
varの計算が間違ってるのと・・を直さないといけないんだった。
分散を(1/n) * sum(val)^2 - ave^2で求めようとしてるところ。(実際は違う値を求めてるが・・)
今回のプログラムでは、これを本来の(1/n) * sum((val - ave)^2)に
戻した分、ループがかさんで見えるはず。
誤差を気にしないのであれば元の式でもOKらしいが・・
元の式のままで行くなら、式を置く位置を変更かな。
197:デフォルトの名無しさん
08/11/04 08:13:08
r;ァ'N;:::::::::::::,ィ/ >::::::::::ヽ
. 〃 ヽル1'´ ∠:::::::::::::::::i
i′ ___, - ,. = -一  ̄l:::::::::::::::l
. ! , -==、´r' l::::::/,ニ.ヽ
l _,, -‐''二ゝ l::::l f゙ヽ |、 ここはお前の日記帳じゃねえんだ
レー-- 、ヽヾニ-ァ,ニ;=、_ !:::l ) } ト
ヾ¨'7"ry、` ー゙='ニ,,,` }::ヽ(ノ チラシの裏にでも書いてろ
:ーゝヽ、 !´ " ̄ 'l,;;;;,,,.、 ,i:::::::ミ
::::::::::::::::ヽ.-‐ ト、 r'_{ __)`ニゝ、 ,,iリ::::::::ミ
::::::::::::::::::::Vi/l:::V'´;ッ`ニ´ー-ッ-,、:::::`"::::::::::::::;゙ , な!
:::::::::::::::::::::::::N. ゙、::::ヾ,.`二ニ´∠,,.i::::::::::::::::::::///
:::::::::::::::::::::::::::::l ヽ;:::::::::::::::::::::::::::::::::::::::::::/ /
::::::::::::::::::::::::::::::! :|.\;::::::::::::::::::::::::::::::/ /
198:183
08/11/04 09:38:51
>>197
チラシ探してくる・・・
の前に、varの計算あってた、ごめん。
何年間かどこかで修行してくるわ。
199:デフォルトの名無しさん
08/11/04 13:46:53
[1] 授業単元:配列
[2] 問題文(含コード&リンク):ファイルを文字単位で読み出し,アルファベット('a' -> 'z')が二回連続して出現する全ての箇所から,アルファベット2文字を単位とした出現回数を int 型二次元配列 count[][] に格納せよ。
ファイルの先頭から最後まで文字単位で捜査し,2回連続してアルファベット('a' -> 'z')が出現した箇所を対象にせよ。
this is a pen であれば,th, hi, is, is, pe, en がカウントの対象となる。
"be" という二文字が出現した回数は count[1][4] (count['b'-'a']['e'-'a'])に格納されるようにせよ。
[3] 環境
[3.1] OS: Mac OS
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語: C
[4] 期限: 2008年11月5日11:59まで
お願いします
200:デフォルトの名無しさん
08/11/04 14:31:08
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク)
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:11月5日
[5] その他の制限:特になし
よろしくお願いします。
201:デフォルトの名無しさん
08/11/04 14:54:26
>>199
下の方は確認用ね。
#include<stdio.h>
#define isUpper(a) ('A' <= (a) && (a) <= 'Z')
#define isLower(a) ('a' <= (a) && (a) <= 'z')
#define isAlpha(a) (isUpper(a) || isLower(a))
#define position(a) ( isUpper(a) ? (a) - 'A' : (a) -'a')
int count[26][26];
int main(){
char ch,prev='\0';
int i,j;
FILE* fp;
if((fp = fopen("in.txt","r")) == NULL) return 1;
while((ch = fgetc(fp)) != EOF){
if(isAlpha(prev) && isAlpha(ch)) count[position(prev)][position(ch)]++;
prev=ch;
}
fclose(fp);
printf(" ");
for(i=0;i<26;i++) printf(" %c",'a'+i);
printf("\n");
for(i=0;i<26;i++){
printf("%c",'a'+i);
for(j=0;j<26;j++) printf("%2d",count[i][j]);
printf("\n");
}
}
202:デフォルトの名無しさん
08/11/04 15:17:01
>>200
意外と簡単だった♪
void move(int n, int s, int d){
int tmp,i,j;
printf("%d:%c --> %c\n",n,'a'+s,'a'+d);
tmp=st[sp[s]][s];
st[sp[s]][s]=0; //スタックsからpop
st[sp[d]+1][d]=tmp; //スタックdにpush
//スタックポインタの操作
sp[s]--;
sp[d]++;
for(i=0;i<M;i++){
printf("%c ",'a'+i);
for(j=0;j<=sp[i];j++){
printf("%2d",st[j][i]);
}
printf("\n");
}
}
203:デフォルトの名無しさん
08/11/04 15:29:33
>>202
ありがとうございます!
問1と2の複合って感じですかね?
204:デフォルトの名無しさん
08/11/04 15:40:19
そうそう。
1の部分が
sp[s]--;
sp[d]++;
これで棒に刺さってる枚数をカウントして、
for(i=0;i<M;i++){
printf("%c ",'a'+i);
for(j=0;j<=sp[i];j++){
printf("%2d",st[j][i]);
}
printf("\n");
}
で棒の名前と刺さってる板の大きさを列挙する。
205:デフォルトの名無しさん
08/11/04 19:08:58
九九を計算して,以下のように表示するプログラムを作成せよ
1 2 3 4 5 6 7 8 9
2 4 6 8 10 12 14 16 18
3 6 9 12 15 18 21 24 27
4 8 12 16 20 24 28 32 36
5 10 15 20 25 30 35 40 45
6 12 18 24 30 36 42 48 54
7 14 21 28 35 42 49 56 63
8 16 24 32 40 48 56 64 72
9 18 27 36 45 54 63 72 81
for文、while文を使えとかいってたと思います。
よろしくお願いします。
206:デフォルトの名無しさん
08/11/04 19:16:48
>>205
int i, j;
for( i = 1; i < 10; i++ ) {
for( j = 1; j < 10; j++ ) {
printf( "%d ", i * j);
}
printf( "\n");
}
207:デフォルトの名無しさん
08/11/04 19:36:34
>>206
ありがとうございます。
208:デフォルトの名無しさん
08/11/04 19:45:56
>>206
実行してみたんですけど、ただ計算するだけでなく
表みたいにしないといけないんです。どうしたらいいですか?
209:デフォルトの名無しさん
08/11/04 19:47:57
>>208
int i, j;
for( i = 1; i < 10; i++ ) {
for( j = 1; j < 10; j++ ) {
printf( "%2d ", i * j);
}
printf( "\n");
}
210:デフォルトの名無しさん
08/11/04 20:11:47
>>209
できました。ありがとうございます。
211:デフォルトの名無しさん
08/11/04 20:30:10
∑1/x![X=1から10まで]を求めるにはどうしたらいいでしょうか?
212:デフォルトの名無しさん
08/11/04 20:30:17
[1] 授業単元: 配列
[2] 問題文(含コード&リンク): URLリンク(kansai2channeler.hp.infoseek.co.jp)
(↓途中までですが、考えてみたものです)
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン: cc
[3.3] 言語: C
[4] 期限: 2008年11月5日14:00まで
[5] 多次元配列を用いて
213:デフォルトの名無しさん
08/11/04 20:35:31
[1] 授業単元:プログラミング
[2] 2つの3×3行列の入力に対して積を計算し、結果を出力せよ。
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン:VS2008
[3.3] 言語:C++
[4] 期限: 明後日
[5] その他の制限: 繰り返しfor、2次元配列を使うこと。3重ループになるそうです。
しかし、どのように3重ループを使えばいいのかわかりません。
214:デフォルトの名無しさん
08/11/04 20:52:33
for(i=0; i<3; i++) for(j=0; j<3; j++) for(k=0; k=3; k++) c[i][j] += a[i][k] * b[k][j];
215:デフォルトの名無しさん
08/11/04 22:23:38
>>211
#include <stdio.h>
int main (void)
{
int i, j;
int kai;
double sum = 0;
for (i = 1;i <= 10; i++) {
kai = 1;
for (j = i;j > 0; j--) {
kai *= j;
}
sum += (double)1.0 / kai;
}
printf("{Σ1/(x!) |1 <= x <= 10} = %f\n", sum);
return 0;
}
216:デフォルトの名無しさん
08/11/04 22:34:19
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク): y=cos(x)の座標を*でプロットするプログラムを作ります。
範囲は[0, 4π]です。
[3] 環境
[3.1] OS: UNIX
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] できるだけ早く
[5] その他の制限:ループと条件分岐、putcharを使う
よろしくお願いします。
217:デフォルトの名無しさん
08/11/04 22:50:06
>>216
>[4] できるだけ早く
が非常に心証が悪いのですが、お気づきですか?気づかれたほうがいいですよ。
218:デフォルトの名無しさん
08/11/04 23:05:47
どうでもいい
219:216
08/11/04 23:38:43
>>217
不愉快な思いをさせてしまい申し訳ありませんでした。
これからは気をつけます。
220:デフォルトの名無しさん
08/11/04 23:50:29
>>192
レス遅くなりました。
プログラムありがとうございました。
出力の方は自分でなんとか、変えてみます。
助かりました。
221:デフォルトの名無しさん
08/11/05 00:09:10
>>212
その1のほう。原形とどめてないかも。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
URLリンク(www.mashimo.com)
を使ってテストした。多分大丈夫。
222:デフォルトの名無しさん
08/11/05 00:34:20
>>217
URLリンク(kansai2channeler.hp.infoseek.co.jp)
223:デフォルトの名無しさん
08/11/05 00:43:12
>>137
レス遅れてしまい申し訳ありません。
プログラムありがとうございました。
これからプログラムの内容を理解していきたいと思います。
224:デフォルトの名無しさん
08/11/05 00:56:29
>>222
ありがとうございました。
とても助かりました。
225:デフォルトの名無しさん
08/11/05 01:00:03
URLリンク(xy.yu.to)
始終荒れまくりの海外サーバ絵チャだ
一人の神プログラマーが強すぎてマクロ荒しが全く太刀打ちできてない。
荒しプログラマーは全員退散!!
誰か倒してくれwwwwww
荒らしても荒らしても線が消されてしまう
一体どうやっているのか?!
226:デフォルトの名無しさん
08/11/05 01:23:50
誰か助けてください。次のプログラムは関数の座標をプロットするプログラムなのですが、
y軸の数字はそのままで、もっと細かくプロットするにはどうすればよいでしょうか。
たとえば、(0.5, 0.25)をプロットするといった具合にです。お願いします。
int main(){
double x,y;
y=100.0;
while(y>=0){
printf("%.1f", y);
x=-10;
while(x<=10){
if(y==(x*x)){
putchar('*');
}
else {
putchar(' ');
}
x=x++;
}
putchar('\n');
y=y-5.0;
}
return 0;
}
227:デフォルトの名無しさん
08/11/05 01:33:17
>x=x++;
関係ないがこれはやめろ
228:デフォルトの名無しさん
08/11/05 01:50:19
[1] コンピュータの基礎的なもの:
[2] 1!+2!+....k!を求めよ:
[3] 環境
[3.1] 一応Win: (Windows/Linux/等々)
[3.2] VC6.0: (gcc 3.4 VC 6.0等)
[3.3] C: (C/C++/どちらでも可 のいずれか)
[4] 今晩中です: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
#include<stdio.h>
main(){
int i,k;
float n,m;
printf("k=");
scanf("□□",□□);
n=0.0;
m=1.0;
for(i=1;i<=□;i□□){
n□□(m□□i);
}
printf("1!+2!+...+%□=%□\n",□,□);
}
forの内部以外のところは埋まりました。
forの内側のnから始まる分が分かりません。
229:デフォルトの名無しさん
08/11/05 01:57:32
n += (m *= i);
230:デフォルトの名無しさん
08/11/05 02:16:29
#include<stdio.h>
main(){
int i,k;
float n,m;
printf("k=");
scanf("%d",&k);
n=0.0;
m=1.0;
for(i=0;i<=k;i++){
n+=(m*=i);
}
printf("1!+2!+.....+%d!=%f\n",k,n);
}
ありがとうございます。
こんなかんじでやって答えが0にしかならないのですが...
231:デフォルトの名無しさん
08/11/05 02:21:37
m=1.0;
for(i=0;i<=k;i++){
n+=(m*=i);
}
これでは常にm = 0.0になってしまうのだが、for ( i = 1; ...)なだろうな
232:デフォルトの名無しさん
08/11/05 02:23:37
ありがとうございます。いけました
233:デフォルトの名無しさん
08/11/05 02:27:39
どなたか226をお願いします。夜が明けるまでにお願いします。
234:デフォルトの名無しさん
08/11/05 03:01:49
>>233
cとyの刻み幅を変えるだけでいいと思う
#include<stdio.h>
int main(){
double x,y;
y=100.0;
while(y>=0){
printf("%.2f", y);
x=-10;
while(x<=10){
if(y==(x*x)){
putchar('*');
}
else {
putchar(' ');
}
x+=0.5;
}
putchar('\n');
y-=0.25;
}
return 0;
}
235:デフォルトの名無しさん
08/11/05 03:20:02
×c
○x
236:デフォルトの名無しさん
08/11/05 03:25:41
1024がどうしたのやつ、まだ引きずってたのか。
前スレで205*5にするのは別に必須でなくて、1024個単位で処理できればいいんでしょ?
って確認しておkが出てたはずなんだけどなー
何が分からないかを伝える練習の場となったか。それもまたよかろ。
237:デフォルトの名無しさん
08/11/05 05:53:10
[1] 授業単元:計算機プログラミングII 「ポインタと文字列」
[2] 問題文(含コード&リンク):課題1
2つの任意の長さの文字列をポインタ変数pxとpyを使って入力し,
pxとpyの文字列を結合した文字列を他のポインタ変数に記憶し,その
結果を出力するプログラムを作成せよ.ただし,ヘッダファイル
string.hで定義されている関数およびsprintfを使用してはいけない.
その他,未習のもの(memcpyなど)は使えない.
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:2008年11月6日10:30まで
[5] その他の制限:ポインタの基礎を習い始めたところだと思います。
配列や文字列、for文、if文、関数ぐらいは簡単に習っています。
[6]出されたヒント:px,pyの長さを数える。たとえば,pxがn個の文字列ならば,
新たなポインタにまずこのn個の文字列が順に入り,その次のところからは,
pyの1番目,2番目の文字が入っていく。
という方針であると説明を受けました。
238:デフォルトの名無しさん
08/11/05 06:27:37
>>237
長さ数えなくてもいける!
ただsscanfは微妙によくない気がする!w
#include<stdio.h>
void concatenate(const char* px, const char* py, char* pz){
while(*px) *pz++ = *px++;
while(*py) *pz++ = *py++;
*pz = '\0';
}
int main(){
char x[256];
char y[256];
char z[256];
printf("x:");
fscanf(stdin,"%s",x);
printf("y:");
fscanf(stdin,"%s",y);
concatenate(x,y,z);
printf("z:%s\n",z);
}
239:デフォルトの名無しさん
08/11/05 09:26:58
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク): 下位バイト側を,バイナリで出力するプロ
グラムです。
[3] 環境
[3.1] OS: WINDOWS
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 無期限
[5] その他の制限:main()の引数として,argc, argvを使わなくてはいけません。
下のプログラムを元につくります。
よろしくお願いいたします。
#include <stdio.h>
union UNION {
int i;
char ch[4];
};
int main() {
union UNION obj;
obj.i = 320;
printf("%x %x %x %x",obj.ch[0],obj.ch[1],obj.ch[2],obj.ch[3]);
return 0;
}
240:デフォルトの名無しさん
08/11/05 10:29:58
[1] 授業単元:プログラミング
[2] 問題文: 構造体を用いて配列の和、積を求めるプログラムを作成せよ。
ただし、配列のデータは2つのファイルから開いて使用すること。
配列のデータ例
3 4
1.1 2.2 3.3 4.4
1.0 2.0 3.0 4.0
2.0 3.5 6.2 2.5
[3] 環境
[3.1] OS:windows
[3.2] コンパイラ名:gcc
[4]11月6日 12:00まで
[5]その他:
構造体のメンバーは
行のサイズ unsigned int
列のサイズ unsigned int
行列のデータへのポインタ double **
よろしくお願いします。
241:デフォルトの名無しさん
08/11/05 11:14:23
[1] 授業単元: ニューラルネットワーク
[2] 問題文
ニューラルネットワークの初期状態が記憶パターン1とよく似ているが少しだけ異なっていたとする。
ニューロンが非同期的に状態更新し、記憶パターン1に近づいていく様子をシュミレーションするプログラムを
c++で作成せよ。
[3] 環境
[3.1] OS: Windows Vista
[3.2] コンパイラ名とバージョン: わかりませんが、最初から付いていたやつかと…。
[3.3] 言語: C++
[4] 期限: 2008年11月9日
[5] その他の制限:
序盤まではできたのですが後半からさっぱり・・・。下にできた(と思う)所までと、
与えられた問題のヒント、完成例など置いておきますのでどなたか御願いします><
何か不明な点があったら言って下さい。
↓
URLリンク(kansai2channeler.hp.infoseek.co.jp)
242:デフォルトの名無しさん
08/11/05 12:13:43
[1] 授業単元:C言語
[2] 問題文
指数関数ex の近似値を返す関数expon(x, n)をつくります。第1引数は浮
動小数点数x で,第2引数はex をTaylor 展開で展開する際の最大次数n になります。
n次項までのTaylor 展開の式は下に示す通りです。
さらに,浮動小数点数y と正の整数m を引数とし,y の小数点m 桁より下を切り捨てて出
力する関数trunc(y, m)をつくりなさい。
次に,これらの2つの関数を用いて,ex の近似値を小数点以下の桁数を指定して出力する
プログラムをつくりなさい。
ex ? 1 + x + x2/2! + x3/3! + … + xn/n!
△出力例:
指数関数exp(x)の近似値を計算します!
x を入力してください:2.5?
Taylor 展開の最大次数n は:100?
小数点以下の桁数m は:3?
exp(x)の近似値 = 12.182
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語: C
[4] 期限: 2008/11/7 24:00まで
[5] その他の制限:printf("%.*f", m, y); は用いないで定義すること。
よろしくお願いします。
243:デフォルトの名無しさん
08/11/05 12:33:39
>>241
vistaにはコンパイラついてませんよ?
244:デフォルトの名無しさん
08/11/05 13:22:14
>>221
一つ目の問題、ありがとうございます。
2つ目の問題の、
3×3行列の余因子の二次元配列を使った書き方がわかりません。
全て書けばプログラムがかなり長くなってしまいますし、それでは配列を使わなくても書けるのでは、と思い考えています。
245:デフォルトの名無しさん
08/11/05 13:49:36
[1] 授業単元:数値計算
[2] 問題文(含コード&リンク):
data[n][n]に格納された、n次正方行列の逆行列を求めるプログラムを作成せよ。
対角要素に0に近い要素があっても、正しく求められるように工夫せよ。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: VC 6.0
[3.3] 言語: C
[4] 期限: 明日
[5] その他の制限: なし
お願いします
246:デフォルトの名無しさん
08/11/05 14:03:52
このプログラムで*をもっと表示させるにはどうすればよいですか。
今日中にお願いいたします。
#include<stdio.h>
#include<math.h>
int main(){
double x, y, pai=3.14;
for(y=1; y>=-1; y=y-0.1){
for(x=0; x<=4*pai; x++){
if(y==cos(x)){
putchar('*');
}
else{
putchar(' ');
}
}
putchar('\n');
}
return 0;
}
247:デフォルトの名無しさん
08/11/05 14:11:58
>>246
#include<stdio.h>
#include<math.h>
int main(){
double x, y, pai=3.14;
for(y=1; y>=-1; y=y-0.1){
for(x=0; x<=4*pai; x++){
if(y==cos(x)){
putchar('************************************');
}
else{
putchar(' ');
}
}
putchar('\n');
}
return 0;
}
248:デフォルトの名無しさん
08/11/05 14:11:59
もっとってどういう風に?
249:デフォルトの名無しさん
08/11/05 15:44:48
>>243
う~ん、でもコンパイルは最初から普通に出来るんですが…
Visual Studio 2008 Express Editionsのページから無料でインストールしたやつを
使用してるんですが、Webインストールした時に一緒に付いて来たとかなのかな…
そうだとしたら落としたのはついこないだなのでvarは最新のはずですが…。
250:デフォルトの名無しさん
08/11/05 15:52:19
そういうときはVS2008と書けばおk
251:デフォルトの名無しさん
08/11/05 16:03:16
>>250
あ、なるほど。
お手数おかけしました><
252:デフォルトの名無しさん
08/11/05 16:03:57
>>242
n = 14 くらいまでにしておかないと、とんでもない結果になるよ
URLリンク(kansai2channeler.hp.infoseek.co.jp)
253: ◆591LS1rcWk
08/11/05 16:04:49
[1] 授業単元:プログラミング実習
[2] URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS: Win vista
[3.2] borland C++ 2.31
[3.3] 言語: C
[4] 期限: 11月06日14:00まで
Rxh(k)=1/n * Σ(n-1,n=0)x[n]*y[n+k]を計算しRxhを1-7出力するプログラムなのですが
完成し、動作を確認した後途中式に用意しておいた二重forループ無いの17行目
printf("%d---%d\n",sum1,sum2);
を消すと正常に稼働しなくなります。
原因解決策などお願いします。
254:デフォルトの名無しさん
08/11/05 16:07:35
>printf(x[8]={1,2,3,4,5,6,7,8}n);
何これ?
255:246
08/11/05 16:28:39
>>248
自分もなんといっていいかわからないのですが、246のままのプログラムでは、cosの値が整数のときしか*が表示されません。
でもpaiの値が小数を含んでいるので、cosの値が小数第何位かになってしまうわけです。
かといって、yの刻み幅をかなり小さくしてしまうと大変なことになってしまいます。
cosの値を四捨五入とかできればいいのですが・・・
そういう場合はどのようにすればよいのでしょうか。