C/C++の宿題を片付けます 117代目
■ このスレッドは過去ログ倉庫に格納されています
【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・問題文やコードをリンクするときは、一言内容にについて説明をつけましょう。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはコラー!!です。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。
【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):
[3] 環境
[3.1] OS: (Windows/Linux/等々)
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
[3.3] 言語: (C/C++/どちらでも可 のいずれか)
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
【C 関数検索 man on WWW】 http://www.linux.or.jp/JM/index.html
【過去ログ検索】 http://chomework.sakura.ne.jp/
【wiki】 http://www23.atwiki.jp/homework/
前スレ
C/C++の宿題を片付けます 116代目
http://pc11.2ch.net/test/read.cgi/tech/1222813731/
0002デフォルトの名無しさん
2008/10/30(木) 09:38:190003775 ◆00BY157eo6
2008/10/30(木) 19:42:33[1] 授業単元:Cプログラミング
[2] 問題文(含コード&リンク):
LU分解法を用いて、
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7868.zip
のmatrix2.datファイル(内容は下のtxtにまとめました)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7892.txt
を参照して、
その係数行列Aの逆行行列X=A^-1を求めるプログラムを作成してください。
AX=I(Iは単位行列)となることをしめしてください、
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7868.zip
に含まれるmat_aux(内容は)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7889.txt
に含まれる補助関数を使ってください。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限: ([2008年11月6日まで]
0004911
2008/10/30(木) 20:52:37回答してくれたプログラムを立ち上げてみたんですが、エラーがかえってきて困ってます。
#include<stdio.h>
int gcd3(x, y, z){
return gcd( gcd(x,y), z);
}
でいいんですか?
0005デフォルトの名無しさん
2008/10/30(木) 21:19:41[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] 関数とかはまだ習ってないです
0006デフォルトの名無しさん
2008/10/30(木) 21:20:02立ち上げるって、コンパイル通らんだろ?
0007デフォルトの名無しさん
2008/10/30(木) 21:20:12[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] 関数とかはまだ習ってないです
0008911
2008/10/30(木) 21:51:020009デフォルトの名無しさん
2008/10/30(木) 22:05:59#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;
}
0010デフォルトの名無しさん
2008/10/30(木) 22:14:25ありがとうございます!助かりました
0011デフォルトの名無しさん
2008/10/30(木) 22:25:21#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;
}
0013911
2008/10/30(木) 22:41:060014デフォルトの名無しさん
2008/10/30(木) 23:06:29連結リストのセルの先頭をdelete_firstで削除して
5 1
1 4
4 → 2
2 3
3
と表示されるのですがメモリの35と23行目の解放がされていないと表示されます。
どこにfree()を入れればいいんでしょうか?
0015911
2008/10/30(木) 23:26:48出直してきます
0016デフォルトの名無しさん
2008/10/31(金) 00:06:10/*連結リストの先頭のセルを削除*/
struct cell *delete_first(struct cell *head)
{
struct cell * next;
if(head == NULL){
return NULL;
}
next = head->next;
free(head);
return next;
}
こんなことがしたかったんだろうと妄想
0017デフォルトの名無しさん
2008/10/31(金) 00:39:22[2] 問題文(含コード&リンク):
参考プログラム http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7898.txt
問題文 http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7899.txt
[3] 環境
[3.1] OS:XP
[3.2] コンパイラ名とバージョン: Visual stdio2005
[3.3] 言語:C言語
[4] 期限:10月31日 13:00まで
[5] その他の制限:特になし
よろしくお願いします
001817
2008/10/31(金) 00:41:330019デフォルトの名無しさん
2008/10/31(金) 00:53:39[2] 問題文(含コード&リンク):
http://pc11.2ch.net/test/read.cgi/tech/1222813731/832 の問題の続き
�@ 前回完成させたのプログラムを変更させなさい。
プログラム→http://kissho6.xii.jp/14/src/1yon14691.c.html
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] その他の制限: 特になし
よろしくお願いします。
0020デフォルトの名無しさん
2008/10/31(金) 02:46:46[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、演算子の複合演算子(+=,-=,*=,/=,%=)
インクリメント(++)デクリメント(--)は習いました。
お願いします。
0021デフォルトの名無しさん
2008/10/31(金) 03:34:49ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7902.c
0022デフォルトの名無しさん
2008/10/31(金) 10:16:06以下の無限級数は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 に収束していく過程を観察せよ.
誰か助けてください。
0023デフォルトの名無しさん
2008/10/31(金) 11:06:36002422
2008/10/31(金) 11:11:43int 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;
}
これでできない理由を誰か教えてください。
0025デフォルトの名無しさん
2008/10/31(金) 14:59:36本当に有難う御座いました。
大変助かりました。
0026デフォルトの名無しさん
2008/10/31(金) 15:16:33[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、演算子の複合演算子(+=,-=,*=,/=,%=)
インクリメント(++)デクリメント(--)は習いました。
お願いします。
0027775 ◆00BY157eo6
2008/10/31(金) 15:27:04[1] 授業単元:Cプログラミング
[2] 問題文(含コード&リンク):
LU分解法を用いて、
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7868.zip
のmatrix2.datファイル(内容は下のtxtにまとめました)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7892.txt
を参照して、
その係数行列Aの逆行行列X=A^-1を求めるプログラムを作成してください。
AX=I(Iは単位行列)となることをしめしてください、
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7868.zip
に含まれるmat_aux(内容は)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7889.txt
に含まれる補助関数を使ってください。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限: ([2008年11月6日まで]
0028デフォルトの名無しさん
2008/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日まで
0029デフォルトの名無しさん
2008/10/31(金) 15:48:09int main(void)
{
int i, j;
for(i=1; i<=10; i++){
for(j=0; j<i; j++){
printf("*");
}
printf("\n");
}
return 0;
}
0031デフォルトの名無しさん
2008/10/31(金) 15:56:56http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7903.c
0033デフォルトの名無しさん
2008/10/31(金) 19:26:220034デフォルトの名無しさん
2008/10/31(金) 19:52:09[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] その他の制限: 繰り返し、条件処理、配列を勉強しました。これらを使って、一次元配列でお願いします。
初心者なので初心者でも分かるようなプログラムをお願いします。
0035デフォルトの名無しさん
2008/10/31(金) 20:37:26http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7906.c
0036デフォルトの名無しさん
2008/10/31(金) 20:44:59http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7907.txt
0038デフォルトの名無しさん
2008/11/01(土) 00:20:57#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;
}
0039デフォルトの名無しさん
2008/11/01(土) 03:54:17何気にこのスレで出た宿題をこなしてけばそれなりに実力がつきそうだな
0040デフォルトの名無しさん
2008/11/01(土) 10:20:49もっと難しい問題プリーズ。
0041デフォルトの名無しさん
2008/11/01(土) 11:51:17本当に有難う御座いました。
大変助かりました。
0042デフォルトの名無しさん
2008/11/01(土) 11:56:48・演習のための明らかに簡単なプログラム
こんなんじゃ実力は付かない
・プログラムのためのプログラミング
・実用的な計算
とかじゃないとダメだろ
0043デフォルトの名無しさん
2008/11/01(土) 12:15:540044デフォルトの名無しさん
2008/11/01(土) 13:05:56できる奴は自力でできるわけだし。
0045デフォルトの名無しさん
2008/11/01(土) 13:46:19なんて無理。というか、プログラミングと数値計算は多少分野が異なる。
0046デフォルトの名無しさん
2008/11/01(土) 13:52:060047デフォルトの名無しさん
2008/11/01(土) 14:14:16多少拡張するなら、変数の扱い方をしっかりしていれば良い。
0048デフォルトの名無しさん
2008/11/01(土) 16:44:27[2] 問題文(含コード&リンク):
gnuplotを呼び出し、
y=sin(x**2)のグラフを描くプログラム
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:VC2005
[3.3] 言語:C
[4] 期限: 11/5
よろしくお願いします。
004948
2008/11/01(土) 16:59:46005048
2008/11/01(土) 17:01:44どなたかお願いします
0051デフォルトの名無しさん
2008/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;
}
0052デフォルトの名無しさん
2008/11/01(土) 17:13:310053デフォルトの名無しさん
2008/11/01(土) 17:15:03for(i=0;i<num;i++){
005451
2008/11/01(土) 17:18:400055デフォルトの名無しさん
2008/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文、関数ぐらいは簡単に習っています。
0056デフォルトの名無しさん
2008/11/01(土) 19:16: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;
}
0057お願いします
2008/11/01(土) 20:32:50[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] その他の制限: (できるとこまででいいのでお願いします、制限は、乱数表記で)
問題は下に張ります
0058お願いします
2008/11/01(土) 20:37:05#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 この文の書き換えでよろしくお願いします^^
0059デフォルトの名無しさん
2008/11/01(土) 22:34:10http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7909.c
1と3のみ。
> 頻度分布は次の10種類とする。
分からんので0〜9、10〜19、20〜29・・・区切りで。
発生させた乱数と、0〜100までそれぞれ出た回数を
最初に表示しているので、不要なら削除。
0060デフォルトの名無しさん
2008/11/02(日) 10:16:13[2] 問題文:ポインタと構造体を使って,各要素が文字列を保持するリスト構造を実装しなさい.
ただし,保持している文字列がアルファベット順になるものとする.(例えば"America"→"Japan"→"UK"など)
また,機能として,「保持している文字列を先頭から表示する」「新しい要素の挿入(挿入後に新しい要素もアルファベット順に並ぶ)」「指定した文字列を保持する要素の削除」を実装せよ.
[3] 環境
[3.1] OS: Mac OS 10.5.5
[3.2] コンパイラ名とバージョン:分かりません
[3.3] 言語: C
[4] 期限: 11月3日まで
[5] その他の制限:ポインタと構造体まで習いました。
お願いします。アルファベット順に並び替える、というのがどうすれば良いのか・・・
0061デフォルトの名無しさん
2008/11/02(日) 13:42:54挿入するデータと要素のデータを先頭から順番に比較していき、
挿入するデータの方が小さくなるような要素の前に、新しく要素を追加すればよい。
挿入するデータよりも大きいデータが無かったら末尾に追加。
0062デフォルトの名無しさん
2008/11/02(日) 14:01:17空気を読まず、Windowsで作ったプログラムを登校してみる
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7912.txt
[OS]Win Vista
[コンパイラ]gcc 3.4.2(Mingw)
役に立たなかったらごめんなさい
0063デフォルトの名無しさん
2008/11/02(日) 16:59:16[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7914.txt の問題の続き
�@ 前回完成させたのプログラム以下のように変更させなさい。
プログラム→http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7915.c
変更箇所
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が必要になりますが
お手数かけて申し訳ありません。
よろしくお願いします。
0064help me
2008/11/02(日) 17:44:54問題文(含コード&リンク):1から10までの任意の整数値を複数個(20〜30個)程度入力し、
入力した数値がそれぞれ何個ずつだったかを表示するプログラムを作成せよ。
ただし、入力は0を入力しない限り永遠に続くものとする。 なんか*を数字の横に出力
するみたいに表示するようです。
OS: (Linux)
言語:C
期限: ([2008年11月5日23:59まで]
[5] その他の制限: あまりないようです。
なんか授業が難しくてついていけません。助けてください。
0065デフォルトの名無しさん
2008/11/02(日) 18:22:27int 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;
}
0066デフォルトの名無しさん
2008/11/02(日) 20:29:49問題文が意味不明すぎて答えが出ない。この際、仕様に間違いがあるのはスルー。
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*ρ)以上の場合だけ、計算した最大値をファイルに出力する
->元の問題文だと、どうみても、全データの最大値と変わらなかった気が・・
って、こんな事書いてる間に、プログラム何本か書けるんだが。。
0067デフォルトの名無しさん
2008/11/02(日) 20:58:47[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7918.txt
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:bcc
[3.3] 言語:C
[4] 期限:11月4日
[5] その他の制限:特になし
関数内でのポインタの使い方がさっぱりです、お願いします
0068デフォルトの名無しさん
2008/11/02(日) 21:03:05void mul(int *x,int *y){
int temp;
temp = *x;
*x = *x * *y;
*y = temp/*y;
}
0069デフォルトの名無しさん
2008/11/02(日) 21:03:29#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);
}
0070デフォルトの名無しさん
2008/11/02(日) 21:30:10助かりました、ありがとうございます
007160
2008/11/02(日) 23:33:35ありがとうございます。strcmpで比較して正負が変わる位置に挿入すれば良い、
というのは分かったので、テキストのサンプルをコピペしつつ自分で書いてみたのですが、実行するとBus errorになってしまいます。ちょっと見ていただけないでしょうか?
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7919.txt
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’
とも出てしまいます。これはどういうことなのでしょうか?
長くなってしまいましたが、よろしくお願いします・・・
0072デフォルトの名無しさん
2008/11/02(日) 23:46:15newて変数名は使えないよ。
67からのエラーは引数の渡し方が間違ってるって事。もちっとポインタ渡しについて復習してみそ。
0073デフォルトの名無しさん
2008/11/03(月) 00:00:010074デフォルトの名無しさん
2008/11/03(月) 00:05:310075デフォルトの名無しさん
2008/11/03(月) 00:09:20[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
よろしくお願いします。
0076デフォルトの名無しさん
2008/11/03(月) 00:27:23ポインタが欲しいところに中身を渡してる。
くだものよりも、67行目〜74行目の*が、いらない子。
あ、くだものは一覧だったw
といっても、InitList()に渡す前に、listの初期化必要でない?
どこも指してないのに、そこのアドレスを使って何かを入れようとしても、
だめだと思います。
あ、配列の使い方だ。これを覚えようw
007760=71
2008/11/03(月) 00:44:50int main(void) {
List list;
InitList(&list);
InsertFruits(&list, "orange");
InsertFruits(&list, "grape");
InsertFruits(&list, "apple");
puts("くだものいちらん");
PrintList(&list);
return(0);
}
こうでした。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7920.txt
エラーは出なくなったのですが、Bus errorはやはり出ます。
InsertFruitsの中身がおかしいのだと思うのですが、どなたか助言をお願いします。。
0078デフォルトの名無しさん
2008/11/03(月) 00:52:12#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だけどこれでいーの?
0079デフォルトの名無しさん
2008/11/03(月) 01:05:20callocのあたりじゃないかと予言をして俺は寝る。限界だ
0080デフォルトの名無しさん
2008/11/03(月) 01:08:55InitList()で、list->headまたはlist->tailのnextメンバをNULLにしておくなどあるべきだと思う。
InsertFruits()のFruits型へのポインタ変数newが明らかに無効なポインタだと思う。
while(strcmp()) {}で、ptr = ptr->nextとかあるが、ptrが例えばNULLのときどうするのか。
List型のtailメンバは使わないのか。
0081デフォルトの名無しさん
2008/11/03(月) 01:13:20InsertFruits()でataraにallocしてないのでは?
Fruits *atara;
atara = (Fruits*)calloc( 1, sizeof(Fruits) );
0082デフォルトの名無しさん
2008/11/03(月) 01:27:34ちなみにifを使わないとしたら、どうなるでしょうか。
0083デフォルトの名無しさん
2008/11/03(月) 01:34:45三項演算子使うぐらいしか思いつかん
if(y==(x*x)) {putchar('*');}
else {putchar(' ');}
のとこを
y==(x*x) ? putchar('*') : putchar(' ');
にするとか。意味が感じられんが
つーかなんでそんな偏屈じみた制約がついてるんだ
0084デフォルトの名無しさん
2008/11/03(月) 01:52:330085デフォルトの名無しさん
2008/11/03(月) 01:55:04http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7921.txt
試してみてください。
修正箇所はソースにコメントで記載してあります。
0086デフォルトの名無しさん
2008/11/03(月) 02:10:56コメント忘れましたが、PrintList()のwhileの中身の順番を入れ替えてました
0087デフォルトの名無しさん
2008/11/03(月) 02:12:34=76
でおくれた!
とりあえず途中まで書いた。直してるうちに、原型がなくなったとかは内緒。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7922.txt
登録、表示まで実装。
ごめん、76で配列っていうのは、ただの勘違いw
制約条件のリスト構造忘れてたorz
008876=87=88
2008/11/03(月) 02:25:58もう一個。元のソースをいじるなら。
メモリの実体を確保せずにポインタを渡しても・・・
が、どこかでおきています。
【対策する所】
List list;
//ここに何か。
InitList(&list);
【原因】、
/*headとtail初期化*/
void InitList (List *list) {
list->head = list->tail = AllocFruits();
}
で、listがどこもポイントしていないのに、
list->head、list->tailに値を代入していること。
008976=87=88=89
2008/11/03(月) 02:29:16おとといから寝てないの、ひびいとるな・・・
88は忘れて下さいorz
0090デフォルトの名無しさん
2008/11/03(月) 03:27:32[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のデータとして入力せよ。
�A: �@と同様に+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] その他の制限:
問題�@だけでもいいのでお願いします。
0091デフォルトの名無しさん
2008/11/03(月) 03:43:36009287=92
2008/11/03(月) 04:23:40削除部分も実装。参考程度に。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7923.txt
>>91
なにかちがうきがする・・
0093デフォルトの名無しさん
2008/11/03(月) 04:33:390094=92
2008/11/03(月) 05:27:07環境の情報が足りないかと。
授業単元からして、、グラフの作成ソフトが別にありそう。
あとX-Windowは立ち上がってる?
それと、使うライブラリ、何か指定は?
これはどうみても、Cというより物理の問題になってる気がw
91の補足。
gnuplotを使うなら、Cから標準出力に、gnuplotのコマンドを吐いて、
パイプでつなぐ。 = Cの宿題ではなさそう
とりあえず時間がないので、早めに情報出したほうが良いと思われ。
もう一個。
Cで書く前に、グラフ作成ソフトである程度結果をつかんでから始めたほうが早いです。
0095=92
2008/11/03(月) 05:36:14う" 問題よく見たら、ただのトラップかw
この式、グラフを書く時はほとんど定数扱いで、
変数はφとxとzだけ・・・
2次元の平面(x-z)で、21x41のマスをつくって、そこの値を計算。
って、表計算と同じw
ただ、マス目の中のデータ(数値)を可視化する要素が足りない。
とりあえずExcelでも立ち上げて、各マス目のデータ計算してくるか。。
問題はExcelが手元にない事だが。
[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] その他の制限: まだまだ序の口のほうです。
期限まで時間があまり無いですが、どうか宜しくお願いします。
0098=92
2008/11/03(月) 06:49:10http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7924.txt
釣りかと思ったけど、アップしとく。
・doubleはどうせあふれないと想定されてるっぽいので、オーバーフローのチェック省略。
必要なら改造しましょう。まだ時間は十分あるw
0099デフォルトの名無しさん
2008/11/03(月) 07:01:46ありがとうございました。
非常に助かりました。
[2] 問題文(含コード&リンク):
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7925.txt
[3] 環境
[3.1] OS: Windows XP
[3.2] コンパイラ名とバージョン: Visual stdio 2005
[3.3] 言語: C
[4] 期限: 11/3 24:00
[5] その他の制限:2次元配列とfor文を使ったものでお願いします
0101デフォルトの名無しさん
2008/11/03(月) 08:42:44関数が題意満たしてないように見えるんだけどw
■ このスレッドは過去ログ倉庫に格納されています