C/C++の宿題を片付けます 117代目
レス数が1000を超えています。これ以上書き込みはできません。
【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・問題文やコードをリンクするときは、一言内容にについて説明をつけましょう。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはコラー!!です。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。
【質問テンプレ】
[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
0102デフォルトの名無しさん
2008/11/03(月) 09:50:03うpろだtxtの結果表示(AB)は正しいのでしょうか?
どこを計算して先頭の"52"を導き出すのかがイマイチ・・・
0103デフォルトの名無しさん
2008/11/03(月) 09:58:4752だと思うが。
0104100 ◆7777.bQf6c
2008/11/03(月) 10:05:27先頭の52の求め方は
(5*9)+(-2*-1)+(1*5)=52
となります
行列の積の計算方法については、こちらを参照して下さい
【3行3列の行列の和と積の計算方法を教えて下さい。 -OKWave】
ttp://okwave.jp/qa87490.html
0105デフォルトの名無しさん
2008/11/03(月) 10:11:39int 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");
}
0106デフォルトの名無しさん
2008/11/03(月) 10:20:480107デフォルトの名無しさん
2008/11/03(月) 10:25:32#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;
}
0108デフォルトの名無しさん
2008/11/03(月) 10:27:42たぶん、実行結果のAが正しい
0109デフォルトの名無しさん
2008/11/03(月) 10:31:080110デフォルトの名無しさん
2008/11/03(月) 10:49:24011160=71=77
2008/11/03(月) 11:25:53>>85さんのソースに、>>92さんの削除関数をアレンジして加えたのですが、
リストの一番後ろの要素を削除してそれをPrintListすると無限ループしてしまいます。listのtail部分がおかしくなっているからだと思うのですが、どう直せばよいか教えていただけないでしょうか?
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7926.txt
削除関数のアレンジした部分はコメントの※印部分です。お願いします。。
0112デフォルトの名無しさん
2008/11/03(月) 11:28:45[2] 問題文(含コード&リンク):
浮動小数点数のビットパターンを表示するプログラムを作成せよ。
そして、1.0 および、0.1, NAN, マイナス無限大, プラス無限大, その他適当な小数がどのようなビット列で表現されているか確認せよ。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:
[3.3] 言語: C
[4] 期限: 11月5日
[5] その他の制限:なし
おねがいします。
0113デフォルトの名無しさん
2008/11/03(月) 11:38:580114デフォルトの名無しさん
2008/11/03(月) 12:40:22#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;
}
0115デフォルトの名無しさん
2008/11/03(月) 12:46:05[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] その他の制限:なし
0116115
2008/11/03(月) 12:47:39すいません間違えました。
.TXTではなくて.Tです。
0117デフォルトの名無しさん
2008/11/03(月) 12:52:060118デフォルトの名無しさん
2008/11/03(月) 12:55:34すいません。
数値は半角です。
0119デフォルトの名無しさん
2008/11/03(月) 13:13:29遅くなってごめんなさい。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7927.txt
修正箇所は申し訳ないのですがDIFFツールなどで調べてください。
0121デフォルトの名無しさん
2008/11/03(月) 15:28:51http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7928.c
ファイル名が 数字のみ.txt であるかのチェックはあり、
中身が数字のみか、5行1列かのチェックはないんで
そうなっているファイルを用意しておくこと。
0122help me
2008/11/03(月) 15:37:36ありがとうございました。(^0^)
0123デフォルトの名無しさん
2008/11/03(月) 16:11:32[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7929.txt
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン:VS2008
[3.3] 言語:C++
[4] 期限:[2008年11月08日まで]
よろしくお願いします。
0124デフォルトの名無しさん
2008/11/03(月) 16:20:08[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7930.txt
[3] 環境
[3.1] OS: UNIX
[3.2] コンパイラ名とバージョン:
[3.3] 言語: C
[4] 期限: 11月4日
よろしくお願いします。
期限が近いのにまったく手が出ません。
0125デフォルトの名無しさん
2008/11/03(月) 16:28:13久々にめんどくさそうなの来たなwwww
0126デフォルトの名無しさん
2008/11/03(月) 16:30:47ぜんぜん面倒臭くない、単なるバイナリーデータの操作だろ、そんなの。
むしろ、オラッ、強敵が現れてなんだかwktkしてきた、ってゴクウみたいな
奴もいるかもしれんぞ?
0127デフォルトの名無しさん
2008/11/03(月) 16:35:43もちろん>>124を明日までに一から作れる暇とスキルがあっての書き込みだよな?
0128デフォルトの名無しさん
2008/11/03(月) 16:44:45多分おれのこと言ってるんだと思うけど今回はお前に宿題ゆずってやるよ
0129100 ◆7777.bQf6c
2008/11/03(月) 16:45:49txtに書かれたプログラムは私の打ち間違いです、失礼しました
それと>>105さん>>107さん、ありがとうございました
013060=71=77=111
2008/11/03(月) 16:56:46ありがとうございます。正常に動きました。
その他助けてくださった方々、本当にありがとうございました!
0131デフォルトの名無しさん
2008/11/03(月) 16:58:01とりあえず両手を空に挙げてやるから元気玉でも集めて作ってみろよ。面倒じゃないんだろ?>>126
0132デフォルトの名無しさん
2008/11/03(月) 17:05:49要するに、個人を指定、特定して答えてもらうスレじゃないんだよ、ここ?
やってくれるよ、良かったね?お前がやれよw
0133デフォルトの名無しさん
2008/11/03(月) 17:13:250134デフォルトの名無しさん
2008/11/03(月) 17:26:35レス遅れてすみません><
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個で区切れる。
どうでしょうか? プログラムよろしくお願いします。
0135デフォルトの名無しさん
2008/11/03(月) 17:27:45必死なのは分かるが、とりあえず聖徳太子(ryのテンプレ教えてくれ。
あと>>124は最近傍法での拡大くらいまでは、と思ってるが、さすがに(4)はなんとかいうフォーマットから調べないかんなあ。
0136デフォルトの名無しさん
2008/11/03(月) 17:40:44だからさっさと作っておくれー
0137デフォルトの名無しさん
2008/11/03(月) 17:57:05こんな感じか?
コンパイルすらしてないコードなんで動かなかったら適宜修正してくれ。
0138137
2008/11/03(月) 18:04:340139デフォルトの名無しさん
2008/11/03(月) 18:16:38> 必死なのは
誰とも分からない見えない人に答えさせようとしているお前。
0140デフォルトの名無しさん
2008/11/03(月) 18:42:000141デフォルトの名無しさん
2008/11/03(月) 18:50:010142デフォルトの名無しさん
2008/11/03(月) 18:51:230144=92
2008/11/03(月) 20:02:13http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7934.txt
計算する所までは実装。計算結果は�@:dataout1.csv、�A:dataout1.csvに出力。
グラフ化の部分は、環境がわからんのでパス。3次元のグラフを*で書く気にならなかった。
csv内のデータは、横方向:x(-20〜20)、縦方向:z(-40〜40)、値:φ(x,z)
電荷ごとに、0除算のオーバーフローをdoubleの最大値として処理しているので、
�Aの結果が上下対象になっていません(斜めにdoubleの最大値が入る)。
計算結果の検算と�Aの式のチェックは、がんばれ。
�Aの処理はコメントアウトしてあります。
�Aを使う時は�@の処理をコメントアウトしてから、
�Aの処理のコメントアウトを解除します。
�Aは、せめて式とdの値を書かないと。
ここは電磁気学の板じゃないので。
適当に調べてかいといたけど・・
0145=92
2008/11/03(月) 20:11:49っ計算機
5も209921も奇数。よって、5x209921も奇数。
1024は偶数。
従って割り切れることはありません。
+[0]〜[3]なら、要素数は4。
問題を解く前に、概算するくせをつけましょう。
0146=92
2008/11/03(月) 20:22:21連投すまん。
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する必要はないと思うのだが、なぜ確保するのか?
(全体をメモリに格納しないと処理できない計算が発生するのか?)
これが知りたい。
0147デフォルトの名無しさん
2008/11/03(月) 20:28:02int 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;
}
0148デフォルトの名無しさん
2008/11/03(月) 20:47:07[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型でお願いします 。
0149148
2008/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;
}
0150=92
2008/11/03(月) 20:53:50・x, yはintにする必要がある。(詳細は、forを調べましょう)
・cos(pai/x)としているが、pai/xの部分を考え直しましょう
0151デフォルトの名無しさん
2008/11/03(月) 20:58:37・fが初期化されていない
・1=0ってなに?
・intなのに%lf
0153148
2008/11/03(月) 21:06:21>>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;
}
0154デフォルトの名無しさん
2008/11/03(月) 21:07:06#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) な
0155デフォルトの名無しさん
2008/11/03(月) 21:09:370156=92
2008/11/03(月) 21:10:48うは、かぶった><;
ついでに、doubleの値がどこかに必要だと思うのだが・・
あと、問題文に、i->nの時の極限と書かないと分からない。
0157デフォルトの名無しさん
2008/11/03(月) 21:16:07[2] 問題文:
10個のデータがランダムに格納されている一次元配列を用意して、その中から偶数のみを表示させるプログラムを作る
0158148
2008/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;
}
0159=92
2008/11/03(月) 21:22:14結果表示のfは%d?
あと、極限と1/(x-1)の差も表示しないと、どれくらい近づいたかわからない。
ただし、もとのxが保存されていないことに注意。
0160=92
2008/11/03(月) 21:24:560161デフォルトの名無しさん
2008/11/03(月) 21:27:03i, n は int でいい。
それにあわせて n の入力時も scanf("%d", &n)
それから for 文の中がおかしい。
x のベキ乗を求めるなら f += pow(x, i-1)
>>154
0162148
2008/11/03(月) 21:30:56ありがとうございました。
>>161
mathはまだ習ってないのでできればstdioのみでやれるようにしたいのですがどうすればいいのやら・・・
0163デフォルトの名無しさん
2008/11/03(月) 21:42:19ちゃんと確認してないからミスがあればすまん。
for (i = 1;i < n; i++){
temp = x;
for (j = 0;j < i-1; j++) {
temp *= x;
}
f += temp;
}
0165=92
2008/11/03(月) 22:19:32ふと思った事。
lim Σx^(i-1) -> 無限大。収束しない。
極限とか1 / (x-1) とでてきたあたりで、log(x)の微分が1/xとか思い出すのだが・・
0166デフォルトの名無しさん
2008/11/03(月) 22:22:02if(4<=x<=10)
0169デフォルトの名無しさん
2008/11/03(月) 22:33:03[2] 問題文(含コード&リンク): y=cos(x)の座標を*でプロットするプログラムを作ります。
範囲は[0, 4π]です。
[3] 環境
[3.1] OS: UNIX
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[5] その他の制限:ループと条件分岐、putcharを使う
0170デフォルトの名無しさん
2008/11/03(月) 22:35:28>>163だが
x^0のことを忘れてた。
for (i = 1;i < n; i++){
temp = 1;
for (j = 0;j < i-1; j++) {
temp *= x;
}
f += temp;
}
0172デフォルトの名無しさん
2008/11/03(月) 22:45:020と1の組み合わせで、実装されている仕様に応じて
動作しているのさ、フフンッ
0173=92
2008/11/03(月) 22:53:47ヒント。
外ループが回るごとの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)
0174デフォルトの名無しさん
2008/11/03(月) 22:58:42さらに1ビットずつチェキしていると。
0175=92
2008/11/03(月) 23:01:28問題文(1)は、
lim (i = 0 -> n-1) Σx^i = 1/(x-1)
に書き直すと分かりやすかったかも。
元が、lim (i = 1 -> n) Σx^(i - 1) になってると、ちょっと混乱w
連投ごめんなさい。
0176デフォルトの名無しさん
2008/11/03(月) 23:06:12double型って、
符号(1bit) | 指数(11bit) | 仮数(52bit) の64ビットで構成される数の事言ってる?
0177デフォルトの名無しさん
2008/11/03(月) 23:11:28ベキ級数ですから、収束条件は |x| < 1 ですしね。どうなんでしょうね。
0178デフォルトの名無しさん
2008/11/03(月) 23:14:45規格が出来る前は浮動小数点型が>>176の構成だとは限らなくて
機種依存だったわけだし。
これからも128bit機とかがでたらdoubleの構成が変わるかも?しれん
0179クソースでおじゃっ
2008/11/03(月) 23:20:18#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;
}
0180デフォルトの名無しさん
2008/11/03(月) 23:20:21勉強としての意義のほうが大きいと思う。
0181デフォルトの名無しさん
2008/11/04(火) 00:14:43[2] 問題文(含コード&リンク): y=cos(x)の座標を*でプロットするプログラムを作ります。
範囲は[0, 4π]です。
[3] 環境
[3.1] OS: UNIX
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] できるだけ早く
[5] その他の制限:ループと条件分岐、putcharを使う
よろしくお願いします。
0182デフォルトの名無しさん
2008/11/04(火) 00:19:07う〜〜〜ん・・・・伝わらないよ><
205×5−1で1024個になるって意味なんですけど。。。
つまり205行5列で1024個ってことなんですけど。
どうでしょうか? 伝われば幸いです。
malloc
0183デフォルトの名無しさん
2008/11/04(火) 00:33:06double(MSDNだとreal*8で引くと良い?)よりもlong doubleが変わりそう。
real*10はFPUが80bitで・・とかのあたりだろうし。
というか、>>172、>>174
もとの質問番号書いといてくれ。
間に割り込み多すぎて、どれに対する反応かわからんw
>>180
だね。
printf("%s", (MSDNの浮動小数点のページの内容));
してもしかたないしw
>>182
君の気持ちを受信した。
[204][4]をどうするかの問題は残るが、適当に処理しよう。
0184183
2008/11/04(火) 00:57:50整理すると、
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)
だいぶ見えてきたね。
0185183
2008/11/04(火) 03:38:21途中経過。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7936.txt
平均、標準偏差などの計算周りを実装。ファイルへの出力部が未実装。
ごめん、原型はなくなった。
0186183
2008/11/04(火) 04:16:29あ、一個忘れてた。問題どれが正しいのかわからん。
出力は、
(>>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)によると)
�Bが最終的に欲しいものとして、
・データ1024個ごとのブロック内の最大値と、周波数(そのブロック内の何番目のデータか)を、
peek.txtに出力。
->これはどうがんばっても、各ブロックごとに1個しか最大値がないので、
縦1列になる。これを横5個とかに並べなおして出力?(横にいくつ並べるかは書いてないが)
あと、�@の
・各ブロックの、平均値と、最大値と、(ave + 5*sd)以上のデータを、それぞれ
計算する(画面に表示する??)、最大値だけは�Bでpeek.txtに出力する
(かなりがんばって解釈したが、これで良いのか?)
�@は今回は関係なし?
0187183
2008/11/04(火) 04:17:42続き。
とりあえず、(63の条件の) powを使って分散を計算、そこから標準偏差の計算までは実装済み。
以下、すべて予定。
こんな時間に見てなさそうだから、出力は全部画面に向けとく。
ファイルへの出力は、134を信じて、peek.txtに標準偏差が出るようにしておく。
あとは、好きなのをファイル出力に向けなおして。
途中で寝てなければ、そのうちアップする。
0188183
2008/11/04(火) 05:56:00いかん、ぼけとった。
>>186の内容を一部修正。
(>>134 によると) のところ。3個目。
・出力するのは、標準偏差でなく、個別データだった。(最終行で間違った。)
ということは、[206][0],[206],[1],・・・,[411][2],[411][3]だけで良いのか?
(今書きかけのプログラムのは、全部出してるが。)
・標準偏差(== sd)以上の値 -> これは、平均値+標準偏差だと思うので、ave + sdにしておいた。
あと、>>185で貼ったソース。
分散を求めるところでj=0でクリアしているが、ループの他のところでも使っているので、アウト。
分散の計算は、ループから分離した。
そろそろ時間が近いな。。
0189183
2008/11/04(火) 06:07:37もう一個発見。
>>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]は、区切りがずれとるな。。
0190デフォルトの名無しさん
2008/11/04(火) 06:09:010191デフォルトの名無しさん
2008/11/04(火) 06:20:04てかはじめのままで何でだめなの
0192183
2008/11/04(火) 07:29:45http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7937.txt
とりあえずこんな感じか?
出力の条件がいろいろあったので、それぞれ出しておいた。
出力条件ごとに別ループにしてあるので、
いらないのは、コメントアウトする事。
あと、ファイルに出力したのは、
[205][0],[205],[1],・・・,[409][2],[409][3]の中で、
data > aveを満たすデータ。
横5個で改行。
0193183
2008/11/04(火) 07:31:43答え:出力条件が違う。出力フォーマットが違う。出力するものが違う。
0195183
2008/11/04(火) 07:45:241次元(1024)の配列で処理すれば、本来はいける。
(というか、その方が処理が格段に楽。)
205x5が1024にならない、という突っ込みは、どこか上の方を参照。
最後の1個が欠けたデータなんだ。
今回の問題は、
・入力データ(17.2MB)を丸ごと配列に押し込む、
・配列は、double[205 * 1024][5]
の制約付き。
これも、どこか参照。
簡単な版作る?
0196183
2008/11/04(火) 08:10:37varの計算が間違ってるのと・・を直さないといけないんだった。
分散を(1/n) * sum(val)^2 - ave^2で求めようとしてるところ。(実際は違う値を求めてるが・・)
今回のプログラムでは、これを本来の(1/n) * sum((val - ave)^2)に
戻した分、ループがかさんで見えるはず。
誤差を気にしないのであれば元の式でもOKらしいが・・
元の式のままで行くなら、式を置く位置を変更かな。
0197デフォルトの名無しさん
2008/11/04(火) 08:13:08. 〃 ヽル1'´ ∠:::::::::::::::::i
i′ ___, - ,. = -一  ̄l:::::::::::::::l
. ! , -==、´r' l::::::/,ニ.ヽ
l _,, -‐''二ゝ l::::l f゙ヽ |、 ここはお前の日記帳じゃねえんだ
レー-- 、ヽヾニ-ァ,ニ;=、_ !:::l ) } ト
ヾ¨'7"ry、` ー゙='ニ,,,` }::ヽ(ノ チラシの裏にでも書いてろ
:ーゝヽ、 !´ " ̄ 'l,;;;;,,,.、 ,i:::::::ミ
::::::::::::::::ヽ.-‐ ト、 r'_{ __)`ニゝ、 ,,iリ::::::::ミ
::::::::::::::::::::Vi/l:::V'´;ッ`ニ´ー-ッ-,、:::::`"::::::::::::::;゙ , な!
:::::::::::::::::::::::::N. ゙、::::ヾ,.`二ニ´∠,,.i::::::::::::::::::::///
:::::::::::::::::::::::::::::l ヽ;:::::::::::::::::::::::::::::::::::::::::::/ /
::::::::::::::::::::::::::::::! :|.\;::::::::::::::::::::::::::::::/ /
0199デフォルトの名無しさん
2008/11/04(火) 13:46:53[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まで
お願いします
0200デフォルトの名無しさん
2008/11/04(火) 14:31:08[2] 問題文(含コード&リンク)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7938.txt
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:11月5日
[5] その他の制限:特になし
よろしくお願いします。
0201デフォルトの名無しさん
2008/11/04(火) 14:54:26下の方は確認用ね。
#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");
}
}
0202デフォルトの名無しさん
2008/11/04(火) 15:17:01意外と簡単だった♪
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");
}
}
0203デフォルトの名無しさん
2008/11/04(火) 15:29:33ありがとうございます!
問1と2の複合って感じですかね?
0204デフォルトの名無しさん
2008/11/04(火) 15:40:191の部分が
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");
}
で棒の名前と刺さってる板の大きさを列挙する。
0205デフォルトの名無しさん
2008/11/04(火) 19:08:581 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文を使えとかいってたと思います。
よろしくお願いします。
0206デフォルトの名無しさん
2008/11/04(火) 19:16:48int i, j;
for( i = 1; i < 10; i++ ) {
for( j = 1; j < 10; j++ ) {
printf( "%d ", i * j);
}
printf( "\n");
}
0207デフォルトの名無しさん
2008/11/04(火) 19:36:34ありがとうございます。
0208デフォルトの名無しさん
2008/11/04(火) 19:45:56実行してみたんですけど、ただ計算するだけでなく
表みたいにしないといけないんです。どうしたらいいですか?
0209デフォルトの名無しさん
2008/11/04(火) 19:47:57int i, j;
for( i = 1; i < 10; i++ ) {
for( j = 1; j < 10; j++ ) {
printf( "%2d ", i * j);
}
printf( "\n");
}
0210デフォルトの名無しさん
2008/11/04(火) 20:11:47できました。ありがとうございます。
0211デフォルトの名無しさん
2008/11/04(火) 20:30:100212デフォルトの名無しさん
2008/11/04(火) 20:30:17[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7939.txt
(↓途中までですが、考えてみたものです)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7940.txt
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン: cc
[3.3] 言語: C
[4] 期限: 2008年11月5日14:00まで
[5] 多次元配列を用いて
0213デフォルトの名無しさん
2008/11/04(火) 20:35:31[2] 2つの3×3行列の入力に対して積を計算し、結果を出力せよ。
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン:VS2008
[3.3] 言語:C++
[4] 期限: 明後日
[5] その他の制限: 繰り返しfor、2次元配列を使うこと。3重ループになるそうです。
しかし、どのように3重ループを使えばいいのかわかりません。
0214デフォルトの名無しさん
2008/11/04(火) 20:52:330215デフォルトの名無しさん
2008/11/04(火) 22:23:38#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;
}
0216デフォルトの名無しさん
2008/11/04(火) 22:34:19[2] 問題文(含コード&リンク): y=cos(x)の座標を*でプロットするプログラムを作ります。
範囲は[0, 4π]です。
[3] 環境
[3.1] OS: UNIX
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] できるだけ早く
[5] その他の制限:ループと条件分岐、putcharを使う
よろしくお願いします。
0217デフォルトの名無しさん
2008/11/04(火) 22:50:06>[4] できるだけ早く
が非常に心証が悪いのですが、お気づきですか?気づかれたほうがいいですよ。
0218デフォルトの名無しさん
2008/11/04(火) 23:05:470219216
2008/11/04(火) 23:38:43不愉快な思いをさせてしまい申し訳ありませんでした。
これからは気をつけます。
0220デフォルトの名無しさん
2008/11/04(火) 23:50:29レス遅くなりました。
プログラムありがとうございました。
出力の方は自分でなんとか、変えてみます。
助かりました。
0221デフォルトの名無しさん
2008/11/05(水) 00:09:10その1のほう。原形とどめてないかも。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7941.txt
ttp://www.mashimo.com/2c6.html
を使ってテストした。多分大丈夫。
0222デフォルトの名無しさん
2008/11/05(水) 00:34:20http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7942.txt
0223デフォルトの名無しさん
2008/11/05(水) 00:43:12レス遅れてしまい申し訳ありません。
プログラムありがとうございました。
これからプログラムの内容を理解していきたいと思います。
0224デフォルトの名無しさん
2008/11/05(水) 00:56:29ありがとうございました。
とても助かりました。
0225デフォルトの名無しさん
2008/11/05(水) 01:00:03始終荒れまくりの海外サーバ絵チャだ
一人の神プログラマーが強すぎてマクロ荒しが全く太刀打ちできてない。
荒しプログラマーは全員退散!!
誰か倒してくれwwwwww
荒らしても荒らしても線が消されてしまう
一体どうやっているのか?!
0226デフォルトの名無しさん
2008/11/05(水) 01:23:50y軸の数字はそのままで、もっと細かくプロットするにはどうすればよいでしょうか。
たとえば、(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;
}
0227デフォルトの名無しさん
2008/11/05(水) 01:33:17関係ないがこれはやめろ
0228デフォルトの名無しさん
2008/11/05(水) 01:50:19[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から始まる分が分かりません。
0229デフォルトの名無しさん
2008/11/05(水) 01:57:320230デフォルトの名無しさん
2008/11/05(水) 02:16:29main(){
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にしかならないのですが...
0231デフォルトの名無しさん
2008/11/05(水) 02:21:37for(i=0;i<=k;i++){
n+=(m*=i);
}
これでは常にm = 0.0になってしまうのだが、for ( i = 1; ...)なだろうな
0232デフォルトの名無しさん
2008/11/05(水) 02:23:370233デフォルトの名無しさん
2008/11/05(水) 02:27:390234デフォルトの名無しさん
2008/11/05(水) 03:01:49cと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;
}
0235デフォルトの名無しさん
2008/11/05(水) 03:20:02○x
0236デフォルトの名無しさん
2008/11/05(水) 03:25:41前スレで205*5にするのは別に必須でなくて、1024個単位で処理できればいいんでしょ?
って確認しておkが出てたはずなんだけどなー
何が分からないかを伝える練習の場となったか。それもまたよかろ。
0237デフォルトの名無しさん
2008/11/05(水) 05:53:10[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番目の文字が入っていく。
という方針であると説明を受けました。
0238デフォルトの名無しさん
2008/11/05(水) 06:27:37長さ数えなくてもいける!
ただ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);
}
0239デフォルトの名無しさん
2008/11/05(水) 09:26:58[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;
}
0240デフォルトの名無しさん
2008/11/05(水) 10:29:58[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 **
よろしくお願いします。
0241デフォルトの名無しさん
2008/11/05(水) 11:14:23[2] 問題文
ニューラルネットワークの初期状態が記憶パターン1とよく似ているが少しだけ異なっていたとする。
ニューロンが非同期的に状態更新し、記憶パターン1に近づいていく様子をシュミレーションするプログラムを
c++で作成せよ。
[3] 環境
[3.1] OS: Windows Vista
[3.2] コンパイラ名とバージョン: わかりませんが、最初から付いていたやつかと…。
[3.3] 言語: C++
[4] 期限: 2008年11月9日
[5] その他の制限:
序盤まではできたのですが後半からさっぱり・・・。下にできた(と思う)所までと、
与えられた問題のヒント、完成例など置いておきますのでどなたか御願いします><
何か不明な点があったら言って下さい。
↓
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7913.zip
0242デフォルトの名無しさん
2008/11/05(水) 12:13:43[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); は用いないで定義すること。
よろしくお願いします。
0243デフォルトの名無しさん
2008/11/05(水) 12:33:39vistaにはコンパイラついてませんよ?
0244デフォルトの名無しさん
2008/11/05(水) 13:22:14一つ目の問題、ありがとうございます。
2つ目の問題の、
3×3行列の余因子の二次元配列を使った書き方がわかりません。
全て書けばプログラムがかなり長くなってしまいますし、それでは配列を使わなくても書けるのでは、と思い考えています。
0245デフォルトの名無しさん
2008/11/05(水) 13:49:36[2] 問題文(含コード&リンク):
data[n][n]に格納された、n次正方行列の逆行列を求めるプログラムを作成せよ。
対角要素に0に近い要素があっても、正しく求められるように工夫せよ。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: VC 6.0
[3.3] 言語: C
[4] 期限: 明日
[5] その他の制限: なし
お願いします
0246デフォルトの名無しさん
2008/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;
}
0247デフォルトの名無しさん
2008/11/05(水) 14:11:58#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;
}
0248デフォルトの名無しさん
2008/11/05(水) 14:11:590249デフォルトの名無しさん
2008/11/05(水) 15:44:48う〜ん、でもコンパイルは最初から普通に出来るんですが…
Visual Studio 2008 Express Editionsのページから無料でインストールしたやつを
使用してるんですが、Webインストールした時に一緒に付いて来たとかなのかな…
そうだとしたら落としたのはついこないだなのでvarは最新のはずですが…。
0250デフォルトの名無しさん
2008/11/05(水) 15:52:190251デフォルトの名無しさん
2008/11/05(水) 16:03:16あ、なるほど。
お手数おかけしました><
0252デフォルトの名無しさん
2008/11/05(水) 16:03:57n = 14 くらいまでにしておかないと、とんでもない結果になるよ
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7945.txt
[1] 授業単元:プログラミング実習
[2] http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7944.txt
[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);
を消すと正常に稼働しなくなります。
原因解決策などお願いします。
0254デフォルトの名無しさん
2008/11/05(水) 16:07:35何これ?
0255246
2008/11/05(水) 16:28:39自分もなんといっていいかわからないのですが、246のままのプログラムでは、cosの値が整数のときしか*が表示されません。
でもpaiの値が小数を含んでいるので、cosの値が小数第何位かになってしまうわけです。
かといって、yの刻み幅をかなり小さくしてしまうと大変なことになってしまいます。
cosの値を四捨五入とかできればいいのですが・・・
そういう場合はどのようにすればよいのでしょうか。
0256デフォルトの名無しさん
2008/11/05(水) 16:30:21一番最初に配列の内容を出力しておくこと
という条件でした。
情報足りなくてすいません。
0257デフォルトの名無しさん
2008/11/05(水) 16:33:070258デフォルトの名無しさん
2008/11/05(水) 16:55:22int main (void)
{
float rxh[8]={0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0};
int x[8]={1,2,3,4,5,6,7,8},
h[8]={8,7,6,5,4,3,2,1};
int sum1=0,sum2=0,n=8,k,y,z;
printf("x[8]={1,2,3,4,5,6,7,8}\n");
printf("h[8]={8,7,6,5,4,3,2,1}\n");
k=0;
y=n-1;
z=n-k;
for(k=0;k<y;k++,z--){
for(n=0;n<z;n++){
sum1 = x[n] * h[n+k];
sum2 += sum1;
//printf("%d---%d\n",sum1,sum2);
}
rxh[k] = (float)sum2/8.0;
printf("Rxh[%d]=%2.3f\n",k+1,rxh[k]);
sum2=0;
}
return(0);
}
#include <stdio.h>
int main (void)
{
float rxh[8]={0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0};
int x[8]={1,2,3,4,5,6,7,8},
h[8]={8,7,6,5,4,3,2,1};
int sum1=0,sum2=0,n=8,k,y,z;
printf("x[8]=[1,2,3,4,5,6,7,8]\n");
printf("h[8]=[8,7,6,5,4,3,2,1]\n");
y=n-1;
z=n-k;
for(k=0;k<y;k++,z--){
for(n=0;n<z;n++){
sum1 = x[n] * h[n+k];
sum2 += sum1;
printf("%d---%d\n",sum1,sum2);
}
rxh[k] = (float)sum2/8;
printf("Rxh[%d]=%2.3f \n",k+1,rxh[k]);
sum2=0;
}
return(0);
}
0260デフォルトの名無しさん
2008/11/05(水) 17:16:18気づきませんでした。ありがとうございます。
修正して下さった点は
k=0;の初期化とrxh[k] = (float)sum2/8.0;の8だった部分を8.0にで合っていますか?
0261213
2008/11/05(水) 17:53:35返すのが遅れてすいません。どうもありがとうございます。
一晩考えたのですが…
#include <stdio.h>
int main()
{
int a[3][3];
int b[3][3];
int c[3][3];
int i, j, k;
scanf_s("%d %d %d %d %d %d %d %d %d", &a[0][0],&a[0][1],&a[0][2],&a[1][0],&a[1][1],&a[1][2],&a[2][0],&a[2][1],&a[2][2]);
scanf_s("%d %d %d %d %d %d %d %d %d", &b[0][0],&b[0][1],&b[0][2],&b[1][0],&b[1][1],&b[1][2],&b[2][0],&b[2][1],&b[2][2]);
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];
}
printf("%d, " ,c[i][j]);
}
printf("\n");
}
}
とするととんでもない数字が表示されます。
0262デフォルトの名無しさん
2008/11/05(水) 18:03:040263デフォルトの名無しさん
2008/11/05(水) 18:26:590264デフォルトの名無しさん
2008/11/05(水) 18:44:48[2]
�@12個のデータを入力できる1次元配列(int型)を準備し、
キーボードから各自 適当な数字(int型の範囲)を12個入力する.
入力したデータは,準備した配列に格納される.
12個のデータの最大値と最小値を表示するプログラムを作成しなさい.
�A12個のデータを入力できる2次元配列(int型 3行4列)を準備し,
キーボードから各自 適当な数字(int型の範囲)を12個入力する
入力したデータは,準備した配列に格納される.
12個のデータの最大値と最小値を表示するプログラムを作成しなさい.
[3] 環境
[3.1] OS windows Vista
[3.2] コンパイラ名:gcc
[3.3] 言語: C
[4]11月12日 13:00まで
[5]その他制限:if文、for文、配列などは習いましたが、それ以上はまだ習っていません。よろしくお願いします。
0265デフォルトの名無しさん
2008/11/05(水) 19:36:54できました。どうもありがとうございます。
0266デフォルトの名無しさん
2008/11/05(水) 19:49:160267デフォルトの名無しさん
2008/11/05(水) 20:00:44argc, argv をどうしたいの?
何の下位バイトを出力するの?
0268デフォルトの名無しさん
2008/11/05(水) 20:12:49[2] 問題文(含コード&リンク):
適当な1文字を入力し、それが元が何であったかが分からないように何文字かずらして暗号化し、また元に戻すようなプログラムを作りなさい。文字としては英字小文字のみと仮定します。
例を以下に示します。作成するプログラムも同じような出力形式にしてください。
[ 例 ]
入力文字 = x
暗号化された文字 = b
復号化された文字 = x
何文字ずらすか?については、各自で適当に設定して構いません。
ただし、暗号化された文字も、英字小文字でなければなりません。例えば、zに2を足すと、そのままでは英字でない記号になってしまいますが、これを z+1 -> a, z+2 -> b, z+3 -> c, … のようにアルファベットの先頭に戻してやる処理が必要です。
この点を工夫して下さい。
[3] 環境
[3.1] OS:Windows XP
[3.2] Visual C++ 2005
[3.3] C++
[4] 期限:11月6日23時まで
[5] その他の制限: Char型変数を使うのはわかるのですがそれからがよくわからなくて・・・。
初歩的なことですみませんが、よろしくお願いします。
0269デフォルトの名無しさん
2008/11/05(水) 20:15:06#include <stdio.h>
#include <limits.h>
#include <stdlib.h>
union UNION {
int i;
unsigned char ch[8];
};
void f(unsigned char c)
{
unsigned char i;
for (i = (1 << (CHAR_BIT - 1)); i != 0; i >>= 1) {
if ((c & i) != 0) putchar('1');
else putchar('0');
}
}
int main(int argc, char *argv[])
{
union UNION obj;
obj.i = 0;
if (argc > 1) obj.i = atoi(argv[1]);
printf("%d\n", obj.i);
f(obj.ch[1]);
putchar(' ');
f(obj.ch[0]);
return 0;
}
よくわからないとこは適当に判断させてもらった
0270デフォルトの名無しさん
2008/11/05(水) 21:00:23[2] 問題文(含コード&リンク):
テキストファイル
CD_DATA|45
DVD_DATA|601
MD_DATA|24
メイン関数と読み込み関数で、テキストファイルの'|'より後ろを構造体に書き込み
エラー処理でテキストファイルに'|'が無い時エラーメッセージをだす。
テキストファイルの中の行数が違った時エラーメッセージをだす。
[3] 環境
[3.1] OS:Windows XP
[3.2] コンパイラ名とバージョン:
[3.3] C
[4] 期限:11月6日15時まで
0271デフォルトの名無しさん
2008/11/05(水) 21:00:39どうもありがとうございます。
0272デフォルトの名無しさん
2008/11/05(水) 21:44:12offsset は -26 〜 26、入力文字 in の範囲チェックはどっかでやっておく
int offset = 3;
char in, en, de;
in = getchar();
/* 暗号化 */
en = (in - 'a' + offset + 26) % 26 + 'a';
/* 復号 */
de = (en - 'a' - offset + 26) % 26 + 'a';
printf("入力文字 = %c\n暗号化された文字 = %c\n復号された文字 = %c\n", in, en, de);
0273デフォルトの名無しさん
2008/11/05(水) 22:14:22内容は、入力された整数列を文字型配列で読み込み、その整数を以下のような変換規則に従い出力するというものです。
0→D、1→f、2→k、3→E、4→y、5→Q、6→R、7→e、8→B、9→t
以下は作ってみたものとなります。出力結果が文字化けしてしまいます…
#include<stdio.h>
#include<string.h>
#define N 50
int main(){
int i, j;
char num[N], txt[N];
printf("%d個までの整数列を入力して下さい : ", N);
scanf("%s", &num);
for(i = 0; i < strlen(num); i++){
for(j = 0; j < 10; j++){
if(num[i] == 'j') txt[i] = "DfkEyQReBt"[j];
}
}
printf("\n整数列を変換した文字列は「");
for(i = 0; i < strlen(num); i++){
putchar(txt[i]);
}
printf("」です。\n");
return 0;
}
0274デフォルトの名無しさん
2008/11/05(水) 22:24:23scanf("%s", &num); --> scanf("%s", num); & をトル
if(num[i] == 'j') --> if(num[i] = j + '0') 'j' という文字と比べてどうすんの
以上。
0275デフォルトの名無しさん
2008/11/05(水) 22:30:26どうもです。コンパイル通りました(^^
とっても初心者なので、「j + '0'」とするのがどうも理解しにくいところですが…(^^;
あと、sage忘れスマソ
027614
2008/11/05(水) 22:34:32ありがとうございます。先頭のセルの削除と解放ができました。
すべてのセルを削除すると同時に連結リストの先頭と2つ目に追加したセルの領域を解放する関数って
どう書けばいいんですか?
void *delete_all(struct cell *head)
{
struct cell * next;
if(head == NULL){
return NULL;
}
while(next !=NULL){
next = head->next;
}
free(head);
}
whileでnextをセルの終わりまで飛ばして、削除しようと考えたのですが領域の解放の部分が分かりません。
0277デフォルトの名無しさん
2008/11/05(水) 22:51:42[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7947.txt
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:
[3.3] C
[4] 期限:11月8日
よろしくおねがいします。
0278デフォルトの名無しさん
2008/11/05(水) 22:52:31'0' は ASCII コードで 48 という整数値に対応する。
'1' は ASCII コードで 49 だから '0' + 1 と表せる。
同様に、'2', '3', ..., '9' は '0' + 2. '0' + 3, ... , '0' + 9 となる。
0279デフォルトの名無しさん
2008/11/05(水) 23:04:20できました。
本当に助かります。ありがとうございました
0280デフォルトの名無しさん
2008/11/05(水) 23:12:41pxとpyの文字列を結合した文字列を他のポインタ変数に記憶し、
その結果を出力するプログラム』
を作れという課題なのですが、うまく動作してくれません。
誤ってる部分等、目につきましたら助言お願いします。
#include<stdio.h>
#define N 10
int main(){
char *px,*py,*pz,x[N+1],y[N+1],z[N+(N+1)]; /*最大N文字まで入力可としたいので、N+1個分の配列を用意*/
px=x;
py=y;
pz=z;
printf("2つの文字列を入力してください。(ただし、各々最大%d文字まで)\n",N);
printf("1つ目の文字列 >");
scanf("%s",px);
printf("2つ目の文字列 >");
scanf("%s",py);
/* pxとpyの文字列をpzに記憶させる部分 */
while(*pz++ = *px++) ;
pz--;
while(*pz++ = *py++) ;
printf("%s\n",pz);
return(0);
}
/*以下、出力結果
2つの文字列を入力してください。(ただし、各々最大10文字まで)
1つ目の文字列 >yamada
2つ目の文字列 >tarou
フフフフフフフフフフフフフフフフフフフフtarou
*/
0281デフォルトの名無しさん
2008/11/05(水) 23:15:38printf("%s\n",pz);
↓
printf("%s\n",z);
0282デフォルトの名無しさん
2008/11/05(水) 23:18:010285デフォルトの名無しさん
2008/11/05(水) 23:21:530287デフォルトの名無しさん
2008/11/05(水) 23:35:151問目あがり。
全角スペースは適当に置き換えてちょ。
#include<stdio.h>
#define N 12
int main()
{
int i, array[N];
int max, min;
for( i = 0; i < N; i++ )
scanf( "%d", &array[i]);
/* とりあえず0番目の要素を最大値,最小値として設定し, それ以降の要素と比べる */
max = min = array[0];
for( i = 1; i < N; i++ ) {
if(max < array[i])
max = array[i];
if(min > array[i])
min = array[i];
}
printf( "Max: %d\nMin: %d\n", max, min);
return 0;
}
0288デフォルトの名無しさん
2008/11/05(水) 23:45:19exeファイルから知ることはできないのでしょうか?
0289デフォルトの名無しさん
2008/11/05(水) 23:55:03なんとなくはできるよ
逆アセンブルすりゃいいじゃん
したらばニモニックが登場して
そこからアセンブリを割り出せばいい
さらにそのあと好きな高級言語に翻訳
0290デフォルトの名無しさん
2008/11/05(水) 23:58:49[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7948.txt
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:
[3.3] C
[4] 期限:11月6日 朝7時
[5] その他の制限:出来るだけ簡単に!
よろしくおねがいします!!!
0291デフォルトの名無しさん
2008/11/06(木) 00:17:02ありがとうございます、すっきりしました(^^
0292デフォルトの名無しさん
2008/11/06(木) 00:24:370293デフォルトの名無しさん
2008/11/06(木) 00:27:32ソースコードを知るのか、例えばアドベンチャーゲームのような、実行ファイルに含まれる
文章を知るのかによってかわるかな。
0294デフォルトの名無しさん
2008/11/06(木) 01:08:14[2] 問題文(含コード&リンク): y=cos(x)の座標を*でプロットするプログラムを作ります。xの範囲は[0, 4π]です。
縦をy軸と見立てます。使うのは条件分岐のif、ループ、putcharです。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 夜が明けるまで
[5] その他の制限: 今はループと条件分岐のifまで習っています。使うのは条件分岐とループ、putcharです。
初めて書き込みします。特に難しいことは必要としないとは言っていましたが、自分には難しすぎます。
どうかよろしくお願いします。
0295デフォルトの名無しさん
2008/11/06(木) 01:14:05http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7950.txt
0296デフォルトの名無しさん
2008/11/06(木) 01:28:06横80文字縦20行としてとりあえず。上下非対称だがその辺は丸め誤差のせいにして。
#define WIDTH 80
#define HEIGHT 20
#define PI 3.14159265358979
int x, y;
int c[WIDTH];
for(x = 0; x < WIDTH; x++) c[x] = (cos(4 * PI / WIDTH * x) + 1)* HEIGHT/2;
for(y = 0; y <= HEIGHT; y++){
for(x = 0; x < WIDTH; x++)
if(c[x] == HEIGHT - y) putchar('*');
else putchar(' ');
putchar('\n');
}
0297296
2008/11/06(木) 01:30:01配列習ってないんだったら if(c[x] == の部分の c[x] を
cos(4*PI/WIDTH * x) + 1)*HEIGHT/2
に置き換える。すると最初の for(x = 0; は不要。
0298296
2008/11/06(木) 01:33:100299デフォルトの名無しさん
2008/11/06(木) 01:38:35struct cell *next, *curr;
for (curr = head, next = NULL ; next = curr->next, curr != NULL; curr = next) {
free(curr);
}
せめてこうだったわ。半日修行してくる。
0300294
2008/11/06(木) 01:48:40配列習ってないので、c[x]を置き換えてやってみたんですけど、何かうまくいきませんでした。
どうすればよいでしょうか。
あと「横80文字縦20行とする」ってどういうことですか。
0301デフォルトの名無しさん
2008/11/06(木) 01:49:08ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7952.txt
0302デフォルトの名無しさん
2008/11/06(木) 01:49:112問目あがり。全角スペースは適当に置き換えてちょ。簡単に、簡潔にかいたつもり。
#include <stdio.h>
#define X 4 /* X,Yの値を交換しても動くから好きにしてちょ */
#define Y 3
int main(void)
{
int i, j, max, min, array[X][Y];
for( i = 0; i < X; i++ )
for( j = 0; j < Y; j++ )
scanf( "%d", &array[i][j]);
max = min = array[0][0];
for( i = 0; i < X; i++ ) {
for( j = 0; j < Y; j++ ) {
if(max < array[i][j])
max = array[i][j];
if(min > array[i][j])
min = array[i][j];
}
}
printf( "Max: %d\nMin: %d\n", max, min);
return 0;
}
0303301
2008/11/06(木) 01:51:230304294
2008/11/06(木) 02:08:21自分の組んだのだと、一つしか表示されません。
#include<stdio.h>
#include<math.h>
int main(){
double x, y, pai=3.14;
for(y=1; y>=0; y=y-0.1){
for(x=0; x<=pai/2; x=x+0.1){
if(y==cos(x)){
putchar('*');
}
else{
putchar(' ');
}
}
putchar('\n');
}
return 0;
}
0305デフォルトの名無しさん
2008/11/06(木) 02:19:51幅を持たせろ、なんで一致するとおもったんだ?
0306294
2008/11/06(木) 02:22:030307デフォルトの名無しさん
2008/11/06(木) 02:23:470308デフォルトの名無しさん
2008/11/06(木) 02:27:23#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=x+0.1){
if(y - 0.05 < cos(x) && cos(x) <= y + 0.05){
putchar('*');
}
else{
putchar(' ');
}
}
putchar('\n');
}
return 0;
}
答えわたしとけばいいんじゃね?
0309294
2008/11/06(木) 02:28:13そういう場合はどうすればよいでしょうか。
0310デフォルトの名無しさん
2008/11/06(木) 02:32:01おお!
あざーっす!!
0311294
2008/11/06(木) 02:32:57自分の知識が足りず、申し訳ありませんでした。
0312301
2008/11/06(木) 02:39:00#include <math.h>を足して
関数のプロトタイプ宣言して
#define next(x) (((x)+1% (Q_SIZE+1))
↓
#define next(x) ((x+1) % (Q_SIZE+1))
関数enqueue内の return 0; の前に rear = next(rear); 足して
○○○1つ目 enqueue(n) == -1
○○○2つ目 (n=dequeue()) == -1
viewqueueは printf("末尾(長さ:%d)\n", abs(front-rear));
0313デフォルトの名無しさん
2008/11/06(木) 02:39:310314デフォルトの名無しさん
2008/11/06(木) 02:54:41可能ならば、どのように実装すればよいのか教えてください。
int myrand(int Max, int N, int prob)
0からMaxまでのランダムな整数を返しますが、
probの確率でNを返してくれるような関数です。
例えば、myrand(100, 10, 50)は50%で10を返しますが、
それ以外は1〜100までランダム、という具合です。
0315デフォルトの名無しさん
2008/11/06(木) 03:03:44それ以外は1〜100までランダム
10は含むのか?
0316デフォルトの名無しさん
2008/11/06(木) 03:12:50return N;
else
return (int)(rand()*(Max+1.0)/(1.0+RAND_MAX));
0317デフォルトの名無しさん
2008/11/06(木) 04:12:38probを100で割るか左辺を100倍しないと
0318デフォルトの名無しさん
2008/11/06(木) 09:54:40[2] 問題文(含コード&リンク):
10進数⇔16進数の変換プログラムを作成せよ
-10進⇒16進か16進⇒10進かを最初に選択
-変数はint型で
実行例
10進⇒16進なら1,16進⇒10進なら2を入力してください: 1 ↓
10進数を入力してください: 1000 ↓
入力した数は16進数で 3e8 です.
10進⇒16進なら1, 16進⇒10進なら2を入力してください: 2 ↓
16進数を入力してください: f86a ↓
入力した数は10進数で 63594 です.
[3] 環境 Visual C++
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン: C++コンパイラ,リンカ
[3.3] 言語: C言語
[4] 期限: 2008年11月10日(月)までお願いします。
[5] その他の制限: main関数,文末記号,エスケープシーケンス,printf関数
逐次処理(順次処理)、条件分岐(選択処理)if,if-else,switch、
繰り返し(反復処理)while,do-while,for、演算子の複合演算子(+=,-=,*=,/=,%=)
インクリメント(++)デクリメント(--)、scanf関数、アドレス演算子は習いました。
お願いします。
0319デフォルトの名無しさん
2008/11/06(木) 10:02:27strltolは使っちゃだめな課題っぽいけどそうなんだよね?
0320デフォルトの名無しさん
2008/11/06(木) 10:21:18そうですね。
strltolは使わないでお願いします。
0321デフォルトの名無しさん
2008/11/06(木) 10:22:38そうですね。
strltolは使わないでお願いします。
0322デフォルトの名無しさん
2008/11/06(木) 10:46:05#include <stdio.h>
int main(void) {
int i, n;
printf("10進⇒16進なら1, 16進⇒10進なら2を入力してください: ");
scanf("%d", &i);
switch(i) {
case 1:
printf("10進数を入力してください: ");
scanf("%d", &n);
printf("入力した数は16進数で %x です\n", n);
break;
case 2:
printf("16進数を入力してください: ");
scanf("%x", &n);
printf("入力した数は10進数で %d です\n", n);
break;
}
return 0;
}
0323デフォルトの名無しさん
2008/11/06(木) 11:47:27[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7953.txt
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:bcc
[3.3] 言語:c
[4] 期限:11/10
[5] その他の制限:とくになし
よろしくおねがいします
0324デフォルトの名無しさん
2008/11/06(木) 12:07:30int kaibun(char str[]){
{
int i, n;
/* 終端文字 \0 または \n までの文字数を数える */
for(n = 0; str[n] != '\0' && str[n] != '\n'; n++);
/* 先頭からの文字と末尾からの文字でひとたび違ったら即 0 を return */
for(i = 0; i < n; i++) if(str[i] != str[n - i - 1]) return 0;
/* 最後まで return 0 されなかったら 1 を return */
return 1;
}
0325デフォルトの名無しさん
2008/11/06(木) 12:11:06は
for(i = 0; i < n/2; i++)
で十分だったな
0326738
2008/11/06(木) 12:23:09[2] 問題文(含コード&リンク): 入力した文字の先頭と最後の文字を出力する。
”終わり”と入力すればプログラム終了。
[3]
[3.1] OS:linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語: C言語
[4] 期限: 2008年11月8日までお願いします。
[5] その他の制限: scanfを使うのではなくgetcharを使用
0327デフォルトの名無しさん
2008/11/06(木) 13:23:19マルチバイト文字の処理を要求しているのか
0328324
2008/11/06(木) 13:28:33例文よく見てなかった。大文字小文字は区別しないのな
制限なしってことだから、ctype.h の tolower 使って書き換える
if(str[i] != str[n - i - 1])
↓
if(tolower(str[i]) != tolower(str[n - i - 1]))
0329デフォルトの名無しさん
2008/11/06(木) 13:33:00ありがとうございました!
0330324
2008/11/06(木) 14:35:12int kaibun(char str[])
{
int i, n;
char buf[MAX_SIZE];
/* 終端文字 \0 または \n までの文字数を数えて空白を除いて buf にコピー */
for(i = 0, n = 0; str[i] != '\0' && str[i] != '\n'; i++) if(str[i] != ' ') buf[n++] = str[i];
/* 先頭からの文字と末尾からの文字でひとたび違ったら即 0 を return */
for(i = 0; i < n; i++) if (tolower(buf[i]) != tolower(buf[n - i - 1])) return 0;
/* 最後まで return 0 されなかったら 1 を return */
return 1;
}
0332デフォルトの名無しさん
2008/11/06(木) 18:49:14なんども申し訳ありません
ありがとうございます!
0333デフォルトの名無しさん
2008/11/06(木) 18:58:02本当に有難う御座いました。
大変助かりました。
0334デフォルトの名無しさん
2008/11/06(木) 19:40:49[1] 配列
[2]
下に示す行列の積を求めて表示するプログラムを作りなさい。
int x[2][3]={{1,2,3},{4,5,6}}
int y[3][2]={{1,5},{5,3},{8,1}}
実行結果
35 14
77 41
問
[3] 環境
[3.1] XP
[3.2] VC 6.0
[3.3] 言語:C
[4] 期限:明日まで
0335デフォルトの名無しさん
2008/11/06(木) 19:59:36#include <string>
#include <iostream>
class Fish {};
class Wakana : public Fish{
protected: std::string name;
public:
Wakana() : name("ワカナ") { };
void show() { std::cout << name << std::endl; }};
class Tsubasu : public Wakana {
protected: std::string name;
public:
Tsubasu() : name("ツバス") { }
void show() { std::cout << Wakana::name << "→" << name << std::endl; }};
class Inada : public Tsubasu {
protected: std::string name;
public:
Inada() : name("イナダ") { }
void show() { std::cout << Wakana::name << "→" << Tsubasu::name << "→" <<name << std::endl; };};
class Hamachi : public Inada {
protected: std::string name;
public:
Hamachi() : name("ハマチ") { };
void show() {
std::cout << Wakana::name << "→" << Tsubasu::name << "→" << Inada::name << "→" << name << std::endl;}};
class Buri : public Hamachi {
protected: std::string name;
public:
Buri() : name("ブリ") { };
void show() {std::cout << Wakana::name << "→" << Tsubasu::name << "→" << Inada::name << "→" << Hamachi::name << "→" << name << std::endl;}};
int main(){Buri().show(); return 0;}
0336デフォルトの名無しさん
2008/11/06(木) 20:08:410337デフォルトの名無しさん
2008/11/06(木) 21:02:39http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7954.cpp
クラス名がinabaになっちゃった.
0338デフォルトの名無しさん
2008/11/06(木) 21:05:41上の方に行列の課題なかったか?
int ans[2][2] = {0};
int i, j, k;
for(i = 0; i < 2; i++)
for(j = 0; j < 2; j++)
for(k = 0; k < 3; k++)
ans[i][j] += x[i][k]*y[k][j];
for(i = 0; i < 2; i++){
for(j = 0; j < 2; j++)
printf("%d ", ans[i][j]);
printf("\n");
}
0339デフォルトの名無しさん
2008/11/06(木) 21:12:34[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7955.txt
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語: C
[4] 期限:11月10日12:00まで
[5] その他の制限: 構造体を利用することになっています。
構造体のメンバーは
行のサイズ unsigned int
列のサイズ unsigned int
行列のデータへのポインタ double **
で構成するものとする。
と指定されています。
よろしくお願いします。
0341デフォルトの名無しさん
2008/11/06(木) 23:13:24ありがとうございます。
>>315
Maxはある程度大きく、それ程厳密な確率を求めているわけではないですので、
316さんの実装で十分です。
0342デフォルトの名無しさん
2008/11/07(金) 00:17:42[2] 問題文(含コード&リンク):
#include <stdio.h>
int main(void)
{
char ??? = {
"1.振り込み",
"2.預け入れ",
"3.残高照会",
"4.通帳記録",
"5.終了",
???
};
char ???p;
p = menu;
while(*p){
printf("???\n",???);
}
上記の???の場所を適切に埋め、動作を確認する。
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン: VC6.0
[3.3] 言語: C++
[4] 期限: [2008年11月07日10:00まで]
[5] その他の制限:
よろしくお願いします。
0343デフォルトの名無しさん
2008/11/07(金) 00:34:56int main(void)
{
char *menu[] = {
"1.振り込み",
"2.預け入れ",
"3.残高照会",
"4.通帳記録",
"5.終了",
NULL,
};
char **p;
p = menu;
while(*p){
printf("%s\n", *(p++));
}
return 0;
}
0344デフォルトの名無しさん
2008/11/07(金) 00:37:17動作確認しました。
ありがとうございます!
助かりました。
0345デフォルトの名無しさん
2008/11/07(金) 01:05:48[2] 問題文:
(1)自然数nの正の約数が6個あり(1及びn自身を含めて)
それらの総数の和が532である時のnの値を求めるプログラム。
(2)
nを2桁の偶数としn^2の下2桁がnと同じ時、nの値を求めるプログラム。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: [11月7日8:00まで]
[5] その他の制限: 特になし
(2)については答えが76と分かっているのですが
(1)についてはさっぱりなんです…
0346デフォルトの名無しさん
2008/11/07(金) 01:55:20#include<stdio.h>
int main()
{
int n, c, a, s;
for (n = 1; ; n ++)
{
c = s = 0;
for (a = 1; a <= n; a ++)
{
if (n % a == 0)
{
c ++;
s += a;
}
}
if (c == 6 && s == 532)
{
printf("%d\n", n);
break;
}
}
return 0;
}
0347デフォルトの名無しさん
2008/11/07(金) 01:55:57すごい力まかせ、最適化の余地あり
void main(){
int count ;
int buff[6] ;
for ( int i = 1 ; i < 532 ; i++ ){
count = 0 ;
for ( int j= 1 ; j <= i ; j++ ){
if(i%j==0){
buff[count] = j ;
count++ ;
if ( count >= 6 ){
break ;
}
}
}
if ( count == 6 && buff[5]==i){
if( buff[0] + buff[1] + buff[2] + buff[3] + buff[4] + buff[5] == 532 ){
printf ( "%d\n", i ) ;
break ;
}
}
}
}
0348デフォルトの名無しさん
2008/11/07(金) 02:07:12#include <stdio.h>
int main(void)
{
int n, tmp;
for(n=10; n<100; n+=2){
if(n == n*n%100)
break;
}
printf("%d\n", n);
return 0;
}
0349デフォルトの名無しさん
2008/11/07(金) 04:36:24ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7956.c
動作確認はあまりしてない。とりあえず動く程度。分割コンパイルは適当に。
0350デフォルトの名無しさん
2008/11/07(金) 04:51:50同じ学校だね。
0351デフォルトの名無しさん
2008/11/07(金) 06:11:38下のif(a==NULL)が動作しないです。どう書けばいいか教えて下さい。
int main(){
char a[256];
gets(a);
if(a==NULL){
printf("何か入力して下さい");
}
puts(a);
}
宜しくお願いします。
0352デフォルトの名無しさん
2008/11/07(金) 06:41:130353351
2008/11/07(金) 06:57:08ありがとうございました。
0354デフォルトの名無しさん
2008/11/07(金) 07:17:14[2] 問題文(含コード&リンク): 上下の画面外から敵を2つ出現させて、中央へ移動。左斜め上、右斜め下へそれぞれ移動し、矢印の方向へ一周回る。
一周回ったら再び、中央へ移動する。こんな感じの動きですhttp://www.dotup.org/uploda/www.dotup.org18140.bmp.html
敵を表示させるところまでいったのですが、どうかお願いします。http://www.dotup.org/uploda/www.dotup.org18139.zip.html
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン: VC2005又はVC2008
[3.3] 言語: C++
[4] 期限: 2008年11月8日18:00まで
[5] その他の制限: 構造体でお願いします。説明不足な点など、何かあれば言って下さい。
0356デフォルトの名無しさん
2008/11/07(金) 10:21:50クラスは使っていいの?
0357デフォルトの名無しさん
2008/11/07(金) 10:55:20使っても大丈夫です。
0358デフォルトの名無しさん
2008/11/07(金) 12:02:23問題文とか一部だけ見せられてもね・・・・
0359デフォルトの名無しさん
2008/11/07(金) 12:47:47>>354
恥ずかしすぎるので実行ファイルのみ(DXライブラリ)
ttp://www.dotup.org/uploda/www.dotup.org18202.zip.html
0360デフォルトの名無しさん
2008/11/07(金) 12:59:19[2] 問題文 神経衰弱の作成
[3] 環境
[3.1] OS: XP
[3.2] コンパイラ名とバージョン: Visual Studio
[3.3] 言語: C
[5] その他の制限:行と列を入力し表にする、
0361デフォルトの名無しさん
2008/11/07(金) 14:08:15動作確認できました。
ありがとうございます<(_ _)>
0362デフォルトの名無しさん
2008/11/07(金) 14:09:35言語はc++です
0363デフォルトの名無しさん
2008/11/07(金) 14:17:19[2] 問題文
# 下記のように,二つのベクトルを生成し,それらの内積を計算するプログラムを作成しなさい.ただし,ベクトルの各成分は0〜9の整数型の乱数で,ベクトルの長さは10とする.なお,乱数の生成にはrandを用いよ.
kawasaki@orange ~/lectures/2008/C/5$ ./a.exe
a = (8, 1, 4, 1, 7, 4, 9, 1, 2, 0)
b = (4, 0, 5, 4, 6, 0, 8, 6, 3, 6)
The value of the inner product of the two vectors = 182
kawasaki@orange ~/lectures/2008/C/5$ ./a.exe
a = (4, 8, 4, 6, 8, 1, 0, 3, 5, 8)
b = (8, 6, 4, 1, 6, 0, 4, 6, 1, 0)
The value of the inner product of the two vectors = 173
kawasaki@orange ~/lectures/2008/C/5$ ./a.exe
a = (8, 7, 3, 8, 8, 3, 8, 8, 3, 1)
b = (8, 9, 6, 3, 6, 3, 6, 3, 5, 8)
The value of the inner product of the two vectors = 321
kawasaki@orange ~/lectures/2008/C/5$
# 上と同じ計算をするプログラムを,乱数の生成にMersenne Twisterを用いて書け.ヒント:genrand_real2()に適切な値の整数をかけたものを整数型にキャストして,0〜9の整数乱数をつくる.
[3] 環境
[3.1] OS: linux
[3.2] コンパイラ名とバージョン:
[3.3] 言語: C
[5]
お願いします・・・できれば1時間以内に・・・
0364デフォルトの名無しさん
2008/11/07(金) 14:24:44変数に代入すれば?
0365デフォルトの名無しさん
2008/11/07(金) 14:30:18#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int a[10], b[10], i, sum = 0;
srand((unsigned int)time(NULL));
for (i = 0; i < 10; ++i) {
a[i]= 0 + (int)(rand() * (9 - 0 + 1.0) / (1.0 + RAND_MAX));
b[i]= 0 + (int)(rand() * (9 - 0 + 1.0) / (1.0 + RAND_MAX));
}
printf("a = (");
for (i = 0; i < 9; ++i) {
printf("%d, ", a[i]);
}
printf("%d)\n", a[i]);
printf("b = (");
for (i = 0; i < 9; ++i) {
printf("%d, ", b[i]);
sum += a[i] * b[i];
}
printf("%d)\n", b[i]);
sum += a[i] * b[i];
printf("The value of the inner product of the two vectors = %d", sum);
return 0;
}
0366デフォルトの名無しさん
2008/11/07(金) 14:33:59[1] 授業単元: プログラミング
[2] 問題文 神経衰弱の作成
[3] 環境
[3.1] OS: XP
[3.2] コンパイラ名とバージョン: Visual Studio
[3.3] 言語: C
[5] その他の制限:行と列を入力し表にする、
できれば夕方あたりまでにおねがいします><
0367デフォルトの名無しさん
2008/11/07(金) 14:39:120368デフォルトの名無しさん
2008/11/07(金) 14:57:060369デフォルトの名無しさん
2008/11/07(金) 16:08:25[2] 問題文:以下に与えたデータ列をLZ78符合で圧縮し、画面に表示するプログラムを作成せよ。
データ列:ABCBCBCDEBCDABCD
コンソールアプリケーションで作成すること。
画面には最低限以下のものを出力すること。
【1】与えたデータ列
【2】作成した辞書の一覧
【3】符号化したデータ列
[3] 環境
[3.1] OS: WindousXP
[3.2] コンパイラ名とバージョン: VisualStudio2005
[3.3] 言語: C,C++どちらでも可
[4] 期限:2008年11月13日まで
[5] その他の制限: 標準ライブラリ可
0370デフォルトの名無しさん
2008/11/07(金) 16:56:14struct 座標 {
int x, y;
};
struct 移動 {
座標 end; // 移動先。この座標まで移動したら、次の方向(next)へ向かって移動する
移動 *next; // 次の移動先へのポインタ
};
こんな感じで、画面中央と画面の端の点を結んで、ループごとにちょっとずつ点に移動するのはダメ?
見当違いな事言っていたらごめんね。
0371241
2008/11/07(金) 17:47:36すいません、241の問題が課題3でして、この前の課題1,2とそれの解答を下に。
課題1
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7957.zip
課題2
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7958.zip
課題1が1/2の確立で+-1となる記憶パターンを生成するプログラムで、
課題2がシナプスの結合の重みを決定するものです。
説明と資料の不足どうもすみませんでした…。
他にも情報、説明が足りない所があればお伝え下さい。
あと追記ですが、提出期限が11月9日→11月10日に変更になりました。
0372デフォルトの名無しさん
2008/11/07(金) 18:04:34これって正解?それとも自力で解いたやつ?
>weight[j][i]=pattern1[i]*pattern1[j];/* 結合の重みの計算*/
>weight[j][i]=weight[i][j];
課題2回答.txtのこの部分、おかしい気がするんだけど。
0373デフォルトの名無しさん
2008/11/07(金) 18:18:00課題2からしてコンパイルどころかインデントのチェックすら通らんな
例題も、定義によれば重みの対角成分は必ず+1じゃないとおかしいのに、
全部白(-1)になってる。問題に関する資料は全部晒したほうが良いと思われ
0374デフォルトの名無しさん
2008/11/07(金) 18:37:50[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7959.c
↑のカレンダープログラム(西暦と月を入力するとその月のカレンダーが表示されるもの)を
次のように改造せよ。
・月のカレンダーではなく一年分のカレンダーを表示させる。
・daysinyear()とdaysinmonth()でif文ではなくswitch文を使う。
というのと、
フィボナッチ数列を、指定された個数まで求めて表示するプログラムを書け。
ループにfor文を使ったもの、whileを使ったもの、doを使ったものをそれぞれ作ることで
プログラムを三つ書く。
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名: gcc
[3.3] 言語: C
[4] 期限: 2008年11月10日まで
[5] その他:上にあるカレンダープログラムは講師が生徒のレベルに合わせて
作成したものです。
2つになってしまいましたがどうかよろしくお願いします。
0375デフォルトの名無しさん
2008/11/07(金) 18:48:53一応クリアはできた
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7960.c
0376241
2008/11/07(金) 18:51:32>>373
もうほんと色々すいません…。講義で使うPDFが重くてラウンジにupできなかったんですが、
違う所にここまでの講義内容のpdf全部上げときます。(第2回〜第5回迄)
http://www1.axfc.net/uploader/He/so/155985.zip
DLパスは「123」です。馬鹿学校ですいません…。
0377デフォルトの名無しさん
2008/11/07(金) 18:57:20上げてもらった資料まだ目を通してないけど
とりあえず対角成分だけ別に設定できるようにしてやってみた
例題と同じ値を入れてみても経過が一致しないww
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7961.txt
0378377
2008/11/07(金) 18:58:37ざっくりコメントアウトすればいい
0379デフォルトの名無しさん
2008/11/07(金) 19:11:46[2] 問題文(含コード&リンク):
data[n][n]に格納された、n次正方行列の逆行列を求めるプログラムを作成せよ。
対角要素に0に近い要素があっても、正しく求められるように工夫せよ。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: VC 6.0
[3.3] 言語: C
[4] 期限: 今日中
[5] その他の制限: なし
お願いします!
0380372
2008/11/07(金) 20:23:47俺はお手上げだ。
それ、初期化忘れと、対角成分ってところに代入するのは0じゃね?
ってことでこれ。変更箇所に目印を付けてみた。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7962.txt
0381デフォルトの名無しさん
2008/11/07(金) 20:37:04対角成分はテキスト読んだかぎり+1にならない理由が見当たらないが、例題では0を入れているな。
weight は全要素に値が入るんだから初期化不要では?
あと、pattern2 の初期値だが、ランダムに「反転する」ならば
if(randv > 0.75)
pattern2[i] = -pattern1[i];
else
pattern2[i] = pattern1[i]
みたいな感じにすれば、この場合 25% の確率で反転する。
0382デフォルトの名無しさん
2008/11/07(金) 22:24:20[2] 問題文(含コード&リンク):
円柱の半径と高さを実数で入力し,その体積を求めるプログラムを作りなさい
-変数はすべてdouble型を用いること
-円周率p=3.14159265358979として計算
[3] 環境 Visual C++
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン: C++コンパイラ,リンカ
[3.3] 言語: C言語
[4] 期限: 2008年11月10日(月)までお願いします。
[5] その他の制限: main関数,文末記号,エスケープシーケンス,printf関数
逐次処理(順次処理)、条件分岐(選択処理)if,if-else,switch、
繰り返し(反復処理)while,do-while,for、演算子の複合演算子(+=,-=,*=,/=,%=)
インクリメント(++)デクリメント(--)、scanf関数、アドレス演算子(&)は習いました。
お願いします。
0383デフォルトの名無しさん
2008/11/07(金) 22:38:25#include <stdio.h>
main()
{
double p = 3.14159265358979, r, h;
printf("半径: ");
scanf("%lf", &r);
printf("高さ: ");
scanf("%lf", &h);
printf("体積: %f\n", p*r*r*h);
}
0384デフォルトの名無しさん
2008/11/07(金) 22:46:30問題文はこれだけなので合っているのですが、どうかされましたか?
0385デフォルトの名無しさん
2008/11/07(金) 22:49:00宿題とする価値がないというか何と言うか…
0386デフォルトの名無しさん
2008/11/07(金) 22:54:53そうなんですか。
一応、この問題はC言語のテキストの発展問題なんですがそんなに簡単だったんですね。
そんな問題が解らないって本当に自分やばいですね。
何はともあれ、宿題をやって下さって有難う御座いました。
本当に助かりました。
0387デフォルトの名無しさん
2008/11/07(金) 23:06:11[2] 問題文(含コード&リンク):
途中までつくって、コンパイルも出来るようになったのですが、動作が中途半端です。fork(), execvp, waitあたりが理解出来ていないからどこか
がおかしいと思うのですが、見て下さい。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7966.c
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7964.txt
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7965.txt
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc 4.1.2
[3.3] 言語: C
[4] 期限: 今日中
[5] その他の制限:
やろうとしていること:
実行すると、testプロンプトが表示されるので、好きなコマンドを実行すると、結果を表示する。->例えば、test> ls -l -a /tmp/temp.txt
exitを入力するまで繰り返し何度でもコマンドを実行出来る。
質問(1)なぜか最初の一回目はexecvpによるコマンド実行結果が表示されません。二回目からは正常に動作するのですが。。
質問(2)exitを入力するまでループにしているのですが、一回入力させれば終了したいのに、複数回コマンドを実行した場合は、exitも複数回入力しなければ
抜けられなくなってしまいました。
質問(3)二回目のコマンド実行時、一回目よりも短いオプションで実行するとなぜか「ls: p/temp.txt: ファイルかディレクトリが見つかりません」とエラーになります。
argv[i]に格納した文字列が途中で切れてしまっているように思われます。
質問(4)存在しないコマンドを入力するとエラーメッセージを出したいのですが、どうすればよいでしょうか。
質問(5)ソース中にシグナルキャッチャーの箇所がありますが、どのように使えばいいのかわかりません。不明確な質問ですが、この文脈で使い方がわかる
場合は教えて下さい。以上、長くなりましたが宜しくお願いします。
0388デフォルトの名無しさん
2008/11/07(金) 23:16:10悪いが383≠385だ。
0390377
2008/11/07(金) 23:30:28資料に目を通した。
>>389
よくみると重み付き総和の計算で j≠i と小さくw書かれてたから w[i][i] = 0 が正解だわ
あと資料にいろいろ小出しにされたヒントを全部反映させといた。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7967.c
>>377 は毎回全部のニューロンをもれなく更新してたたために2ステップで
ほとんど収束してたけど、ランダムに更新するニューロンを選択する部分作ったら
収束がほどよい感じになった。
NUM_OF_NEURON がニューロン数
NUM_OF_ERRORS を増やすと初期値の乱れ具合が増す。
ほどほどにしないと収束しなくなるw 結構おもしろかったわ
0391377
2008/11/07(金) 23:41:34if (tmp[i] > 0)
printf("■");
else
printf("□");
/* neuron_state を tmp にコピーしてから使う */
tmp[i] = neuron_state[i];
これは、printf する前に、for のすぐあとに書かないと表示が狂う
for(i = 0; i < NUM_OF_NEURON; i++) {
/* neuron_state を tmp にコピーしてから使う */
tmp[i] = neuron_state[i];
if (tmp[i] > 0)
printf("■");
else
printf("□");
0392383
2008/11/07(金) 23:56:36むかし専門学校で講師やってたんだが、scanf 教えたその日に出して
授業中に作らせた課題で、宿題にすらなってなかったんで確認してみた
0393241
2008/11/08(土) 00:09:19動作確認しました!ありがとうございました!
絶望してた課題だったので凄いうれしいです;;
多レスでご迷惑お掛けしてすいませんでした><
0394デフォルトの名無しさん
2008/11/08(土) 01:52:00初回の fork の前後で cmd->args[0] の内容が違って見えるね
cmd->args[i] の領域って、自分で malloc してないで、strtok() に任せてるでしょ
自分で malloc した領域をつかって strtok_r 使ってみたら?
0395デフォルトの名無しさん
2008/11/08(土) 02:14:04とりあえず、出題の動きをするものを作った
どことなく危険な香りのするプログラムになった
http://www.dotup.org/uploda/www.dotup.org18927.zip.html
出題者の意図がまったくわからないので
かなりの手抜きプログラムになっている
おそらく出題者の意図とはかけ離れたものであろう気がする
というか、何のシステムのないところにいきなりこれをやれって無理があるような
最初にめんどくさい思いをさせて「こうすると楽だよ」的な流れなのか
何か前説があってそれを踏まえた上でやるべき課題なのか・・・・
0396394
2008/11/08(土) 02:25:45あー、違うところかもしれん
原因はそこじゃなくて、gets() やってるところだと思う
simple_accept_input() のローカル変数 str[] に取り込んでるでしょ
strtok(str, " ") とやっているわけだから strtok によって得られるポインタは、
このローカル変数 str[] を参照する。
ローカル変数の寿命はその関数を抜けるまで。
実際 str[] はスタック領域に作られるわけだから、後に関数が実行されたときに
破壊される可能性大。
今回はそれがたまたま fork() 実行時に重なっただけで、fork() 自体によって
データロストしてたわけではなさそう(そもそも fork は全データコピーだしね)
普通、ポインタでいろんなとこから参照されるデータを、特定の関数のローカル変数にしまってはいけない。
gets したデータは、main のローカル変数なりグローバル変数なり malloc するなりして不揮発にしておかないと
0397394
2008/11/08(土) 02:41:38てなわけで、simple_accept_input() の char str[256] をグローバルにしただけで動くようになった。
(1) str[] をグローバルにすれば解決
(2) 同上
(3) 同上
(4) execvp() の直後に exit(-1); とかやって子プロセスを終了させないと
fork_cmd() から返って gets(str) はじめてループになるぞ
(5) シグナルで何やりたいかわからんが、signal システムコールでこの関数と
シグナル関連付ければ、シグナル発生したときにこの関数に飛んでくる
0398387
2008/11/08(土) 03:11:24ありがとうございました。char str[256]とchar *strpをmain関数の前で宣言するようにしました。
初回からきちんと動作するようになりました。それから、子プロセス側ではexecvp後にexit(-1)を
入れるようにしました。(1)、(2)が解決しました。
しかし、これで(3)と(4)も直るはずでしょうか?私の環境ではまだ直りません。。具体的な症状は以下の通りです。
(3)引数の数が前回より減った場合におかしくなる
(一回目)test> ls -l -a -s /tmp/temp.txt ---OK
(二回目)test> ls -l -a /tmp/temp.txt ---NG
ls: p/temp.txt: ファイルかディレクトリが存在しません
※ちなみに引数の数が前回より増える場合は問題ないです。
(一回目)test> ls -l -a /tmp/temp.txt ---OK
(二回目)test> ls -l -a -s /tmp/temp.txt ---OK
まだどこか修正する箇所がありますでしょうか?
(4)存在しないコマンド実行時、コンソールから実行したのと同じようにエラーを表示することは出来ないでしょうか?
例)test> jfodajfoeifji -l -a -l /tmp/temp.txt
-bash: jfodajfoeifji: コマンドが見つかりません
(5)そうですよね、これだけじゃ何がしたいか不明ですよね。。こちらは、無視して頂いて結構です。
0399デフォルトの名無しさん
2008/11/08(土) 03:36:41(3) 原因は、cmd->args[i] の最後の要素に NULL が入っていないこと 。
simple_accept_cmd() 内で
if(strp != NULL){
cmd_a->args[i] = strp;
cmd_a->num_args++;
}
とやって cmd_a->args[i] には NULL が入らないようになってるけど、
cmd_a->args[i] = strp;
if(strp != NULL){
cmd_a->num_args++;
}
と順序変えてやればおk
(5) コマンドの status を見てやればエラー処理できるでしょ
エラーの詳細知りたかったら、子プロセスでないとわからないから
execvp(cmd->args[0], cmd->args);
printf("Command error:%s\n", strerror(errno));
とでもすれば、strerror で得られる原因が表示される。ファイルが見つからない場合だけ
対処したいんだったら、execvp 直後の errno の値で場合分けを行う。
0400デフォルトの名無しさん
2008/11/08(土) 03:45:19業務系じゃありえない魔術過ぎてワロタ
これがゲームプログラムって奴なのか
いくらなんでもお行儀が悪すぎだろう
0402デフォルトの名無しさん
2008/11/08(土) 04:09:43[2] 問題文(含コード&リンク):
検索対象文字列と検索文字列を入力して、発見位置と個数を出力する。
※検索対象文字列は50文字を超えないものとする
※標準ライブラリのstrstr関数を利用すること
※実行例のような出力が得られるようにすること
<実行例>
検索対象文字列→AAAAAAAAAAA
検索文字列→AAA
検索結果
AAAAAAAAAAA
*********
9個発見しました
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ:Borland C++ Compiler 5.5
[3.3] C
[4] 期限:明日
[5] その他の制限:なし
ポインタ難しいです・・・この時間までやってましたができませんでした。
どなたかよろしくおねがいします!!
0403デフォルトの名無しさん
2008/11/08(土) 04:13:210404デフォルトの名無しさん
2008/11/08(土) 04:23:06何度かそういうのあったよ。
0405デフォルトの名無しさん
2008/11/08(土) 04:29:47#include <stdio.h>
#include <string.h>
int main()
{
char str[100], needle[50], *p;
int i = 0;
printf("検索対象文字列を入力:");
scanf("%s", str);
printf("検索文字列を入力:");
scanf("%s", needle);
printf("検索対象文字列→%s\n", str);
printf("検索文字列→%s\n", needle);
printf("検索結果\n%s\n", str);
p = str;
while(strstr(p, needle) != NULL){
if(p == strstr(p, needle)){
i++;
printf("*");
} else
printf(" ");
p++;
}
printf("\n%d個発見しました\n", i);
return 0;
}
0406デフォルトの名無しさん
2008/11/08(土) 04:30:45そうなんですか。それでは英語の問題文のまま載せても大丈夫ですか?
それとも和訳したほうが良いですか?
あまり自分の英語力に自信ないんで変な和訳になってしまったらと思ってるのですが。
0407デフォルトの名無しさん
2008/11/08(土) 04:42:37多分俺はできないが。
0408デフォルトの名無しさん
2008/11/08(土) 05:24:42ありがとうございます。それでは載せさせて頂きます。
[1] 授業単元:C++
[2] 問題文: ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7970.txt
[3] 環境
[3.1] OS:XP
[3.2] コンパイラ名とバージョン: Visualstudio 2005
[3.3] 言語:C++
[4] 期限:2008年11月10日
[5]
xtxの中の図は自分が作って物です。図を載せようとしたのですが載せれなかったので。
わかりにくくてすいません。
英語の問題文ですがよろしくお願いします。
0409デフォルトの名無しさん
2008/11/08(土) 05:39:34単なる C のプログラムになっちまったが
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7971.txt
0410409
2008/11/08(土) 05:41:20偶数奇数判定逆だった
if(*in_val % 2 == 0)
↓
if(*in_val % 2 != 0)
0411デフォルトの名無しさん
2008/11/08(土) 05:57:20本当に助かりました。ありがとうございました。
0412デフォルトの名無しさん
2008/11/08(土) 06:00:05ただのCだから今までの授業で習ったものと毛色が随分と異なる場合はばれちゃうね。
0413デフォルトの名無しさん
2008/11/08(土) 07:18:54図が文字化けしてましたね。すいません。
やはりCとC++とではだいぶ異なるんですか?
最近授業でプログラミング始めたばかりなんでわからないことだらけで。
0414デフォルトの名無しさん
2008/11/08(土) 07:41:14つくろうとしているのですが、まずは前段として以下のようなものをつくりたいです。
例えば「./a.out "cat -n test.c" "grep a"」
と引数を与えてプログラムを実行すると、
str1[0]=cat, str1[1]=-n, str1[2]=test.c, str1[3]=NULL,
str2[0]=grep, str2[1]=a, str2[2]=NULL,
のように格納させたいです。つまり、argv[1]の内容とargv[2]の内容をそれぞれstrtokで空白で
区切って格納させていき、最後にNULLを入れる。思うように出来ません。宜しくお願いします。
0415デフォルトの名無しさん
2008/11/08(土) 07:54:07図はエンコード指定すればだいじょうぶ。
今までの授業で教えてもらったソースコードと雰囲気が似てるならいいよ。
授業でcinとかcoutとか使わなかった?
0416デフォルトの名無しさん
2008/11/08(土) 07:55:18pipe や popen 使わずにどうやってパイプ相当の機能を作るのかわからないけど
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7972.txt
0417デフォルトの名無しさん
2008/11/08(土) 08:11:340418414
2008/11/08(土) 08:11:58有り難うございます。popenはわからないのですがpipeを使ってやってみようと思います。
ひょっとして全然とんちんかんなことやっているのかも知れませんがもう少しやってみて
駄目だったらまたご質問させて頂きます。
0419デフォルトの名無しさん
2008/11/08(土) 08:12:49foo | ./a.out
ってやりたいだけだよね
0420デフォルトの名無しさん
2008/11/08(土) 08:17:00#include <stdio.h>
#include <string.h>
int main(int argc, char **argv)
{
char *str1[10];
char *str2[10];
char **p;
p = str1;
*(p++) = strtok(argv[1], " ");
while ((*(p++) = strtok(NULL, " ")) != NULL);
for (p=str1; *p!=NULL; p++) {
printf("%s\n", *p);
}
return 0;
}
インデント確認用アンカー >>420
0421414
2008/11/08(土) 08:19:53パイプ自体を作ろうとしています。シェルだとcat -n test.c | more
と打つところを、./a.out "cat -n test.c" "more"と打たせることで、
forkした親子プロセスでファイルディスクリプタなんちゃらというのを
使って(すみません勉強したてです)処理を渡すようなCプログラムを作ろうとしています。
自分の限界は恐らく1時間前後で見えてくると思いますのでしばしお待ち下さい。
0422デフォルトの名無しさん
2008/11/08(土) 08:22:39そっか。がんばってねー。
またなんかあると聞くといい、、、けど宿題スレはちょと違うかもだ
0423414
2008/11/08(土) 08:38:11そのまま流用出来たので。皆様、有り難うございました。
>>422
すみません。宿題は宿題なのですが、初心者なのに毎週難易度がぐんと上がるので、ある程度は
自分でやってみないと次から全くわからなくなってしまうので。。わからないところだけ小出しに
質問させて頂きました。スレに反していたら申し訳ないです。
あ、でも匿名パイプの次の宿題は名前付きパイプなのですが、こちらはちょっと読んだところ手も足も
出なそうなので、丸投げさせて頂くと思います。またちょっとしたら投稿します。ぐだぐだすみません。
0424デフォルトの名無しさん
2008/11/08(土) 08:49:570425デフォルトの名無しさん
2008/11/08(土) 08:51:24から察するに、pipeを使って2つのプロセスを繋げろという課題、
次の課題はsocketを使ってAF_UNIXのパイプを作って〃とみた。
0426デフォルトの名無しさん
2008/11/08(土) 10:45:59たとえばABCとDEFという二つのクラスがあるとします。
DEFというクラスがABCから作られたオブジェクトを無制限に持つようにしたいんです。
この際にDEFのメンバやコンストラクターはどんな感じに作ればいいのでしょうか?
0427デフォルトの名無しさん
2008/11/08(土) 11:02:34std::vector<ABC> abc;
};
メンバとして持たせたいなら、これだけじゃないの?
[2] 問題文(含コード&リンク):
ニュートン法を利用して入力データの平方根を求めるプログラムを作りなさい.
-解を求めたい実数aを入力
-解を求めるための初期値x0を入力
・なんでもよいが普通はaの平方根に近い値を入力
-ニュートン法を用いた計算
・x1=(x0+a/x0)*0.5を計算
・x1-x0の絶対値がe以下ならばx1が求める平方根
- eは収束判定に用いる値でここでは1.0E-10を使用する
-差が-eからeの範囲に入れば繰り返し終了
-入らなければx1をx0に代入して再度繰り返してx1の計算
[3] 環境 Visual C++
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン: C++コンパイラ,リンカ
[3.3] 言語: C言語
[4] 期限: 2008年11月10日(月)までお願いします。
[5] その他の制限: main関数,文末記号,エスケープシーケンス,printf関数
逐次処理(順次処理)、条件分岐(選択処理)if,if-else,switch、
繰り返し(反復処理)while,do-while,for、演算子の複合演算子(+=,-=,*=,/=,%=)
インクリメント(++)デクリメント(--)、scanf関数、アドレス演算子(&)は習いました。
お願いします。
平方根を求めたい数を入力してください: 5.0 ↓
解を求めるための初期値を入力してください: 2.0 ↓
5.000000 の平方根は 2.236068 です.
平方根を求めたい数を入力してください: 123.456 ↓
解を求めるための初期値を入力してください: 10.0 ↓
123.456000 の平方根は 11.111076 です.
0430デフォルトの名無しさん
2008/11/08(土) 11:36:00そこまで計算式や判定法が分かってるなら、すぐに解けそうなものだけど。。。
#include <stdio.h>
#include <math.h>
int main(int argc, char *argv[])
{
static const double e = 1.0e-10;
double x0, x1, a;
printf("平方根を求めたい数を入力してください: ");
scanf("%lf", &a);
printf("解を求めるための初期値を入力してください: ");
scanf("%lf", &x0);
x1 = (x0 + a/x0)*0.5;
while (fabs(x1-x0) > e) {
x0 = x1;
x1 = (x0 + a/x0)*0.5;
}
printf("%f の平方根は %f です\n", a, x1);
return 0;
}
本当に有難う御座いました。
大変助かりました。
0432354 ◆zeyvxEAaZQ
2008/11/08(土) 15:07:01>>370
>>395
ありがとうございました!
>>370さんのやり方も試してみます。
>>395さん
「こうすると楽だよ」的な流れだと思います。他にもやりたい事はあるのですが、teki.hとel.hいうファイルが何なのかよくわかりません。消しても平気でしょうか?
0433354 ◆zeyvxEAaZQ
2008/11/08(土) 15:07:430434414
2008/11/08(土) 16:17:14>>425
今週の宿題は完了しました。次回はメッセージキューと共有メモリみたいです。
次次回がソケット関連みたいでした。また困ったら投稿させて頂きます。
疲れた。。寝ます。
0435デフォルトの名無しさん
2008/11/08(土) 17:02:52[2] 問題文(含コード&リンク):
キーボードから自分の学生番号を半角小文字整数で、氏名を半
角小文字のローマ字で、身長(cm)を実数で、体重(kg)を実数で入力し、
学生番号と氏名・身長・体重・身長(cm)+体重(kg)を表
示するプログラムを作成しなさい。
[3] 環境
[3.1] OS:XP
[3.2] VC 6.0等
[3.3] 言語: C
[4] 期限: ([2008年mm月11日11まで
[5] その他の制限:やってまもないです
少しやってみたんですがここで詰まっています
#include<stdio.h>
void main(void)
{
int x,y;
printf("学生番号を半角小文字整数で入力;\t");
scanf("%d",&x);
printf("10進数表示 ; DEC(x)=%d\n",x);
printf("氏名を入力する;\t");
}
0436435
2008/11/08(土) 17:04:0211月11日までです
0437デフォルトの名無しさん
2008/11/08(土) 17:11:44#include<stdio.h>
int main(void)
{
int x;
char s[1000];
double h, w;
printf("学生番号を半角小文字整数で入力;\t");
scanf("%d",&x);
printf("氏名を入力する;\t");
scanf("%s", s);
printf("身長を入力する;\t");
scanf("%lf", &h);
printf("体重を入力する;\t");
scanf("%lf", &w);
printf("学生番号: %d\n", x);
printf("氏名: %s\n", s);
printf("身長: %f\n", h);
printf("体重: %f\n", w);
printf("身長 + 体重: %f\n", h + w);
return 0;
}
0438デフォルトの名無しさん
2008/11/08(土) 17:32:54せめてBMI判定くらいはしてやれwwww
0439デフォルトの名無しさん
2008/11/08(土) 17:58:46単位の違うものを足すの?
0440デフォルトの名無しさん
2008/11/08(土) 18:31:03[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7973.txt
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:bcc
[3.3] 言語:C
[4] 期限:11/10
[5] その他の制限:おそらく実行例の関数にさえ対応していれば大丈夫だと思います
よく分からない問題だと思いますがよろしくお願いします
0441デフォルトの名無しさん
2008/11/08(土) 21:58:45[2] 問題文(含コード&リンク):
文字列str1の中身が半角から全角に切り替わる箇所にはその文字の前に16進数の{0x40}を
全角から半角に切り替わる箇所には16進数の{0x41}を挿入し
その結果をテキストtest1.txtに出力をするプログラムを作成しなさい。(結果の確認はバイナリエディタで行うように)
なお、文字列str1の文字コードはSJISとする。
※問題文では触れられておりませんが
文字列の1文字目が全角の場合は最初に{0x40}を
最後の文字が全角の場合は一番最後に{0x41}を付加しなければならないようです。
出力例:
挿入前の文字列str1:スレタイ C/C++の宿題を片付けます117代目
テキストに出力される文字列:{0x40}スレタイ {0x41}C/C++{0x40}の宿題を片付けます{0x41}117{0x40}代目{0x41}
リンク:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7974.txt
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:bcc
[3.3] 言語:C
[4] 期限:11/11
[5] その他の制限:
全角文字と半角文字を区別する箇所までは出来たのですが
文字列の中に16進数を挿入する過程で詰まってしまいました。
特に制限は無く、私が作った部分の改変をするのもおkですのでよろしくお願い致します。
0442デフォルトの名無しさん
2008/11/08(土) 22:04:34そもそも宿題なのか?
0443デフォルトの名無しさん
2008/11/08(土) 22:25:41ソースコート上では単純に文字として挿入するのではなく16進で挿入しなければならないようです
memcpyの使い方に関する宿題です(;´Д`)
0444デフォルトの名無しさん
2008/11/08(土) 23:00:20挿入してるのは ASCII だからべつにバイナリエディタでなくても確認できるな
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7975.txt
あ、test1.txt に出す部分作るの忘れたからそれはご自分で。最後の printf を fprintf に置き換えるだけだね
0445デフォルトの名無しさん
2008/11/08(土) 23:12:21ばっちりです!ありがとうございました
あとは自分で改変してみます
0446デフォルトの名無しさん
2008/11/09(日) 01:02:30ありがとうございます。
>>439
そういう適当な課題なんです
0447デフォルトの名無しさん
2008/11/09(日) 02:20:570448デフォルトの名無しさん
2008/11/09(日) 02:40:51[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7976.txt
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:bcc
[3.3] 言語:C
[4] 期限:11/12
[5] その他の制限:特になし
よろしくお願いします
0449デフォルトの名無しさん
2008/11/09(日) 02:52:06[2] 問題文
初期設定された任意の整数配列内のデータを,大きい順に並べ換えるプログラム
をつくりなさい。ただし,並べ換える部分を関数にして,配列とデータ数を引数として
渡しなさい。例として,次の10 個の整数を格納した配列に適用してみなさい。
static int dd[10] = { 27, 89, 45, 18, 55, 64, 92, 73, 34, 88 };
出力例:
ソート後 = 92 89 88 73 64 55 45 34 27 18
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語: C
[4] 期限: 2008年11月10日 24:00
[5] その他の制限:次のようなプロトタイプ宣言をもつ関数isort を定義しなさい。
void isort(int *, int);
できましたら、C言語の基本的な関数のみでお願いします。
0450デフォルトの名無しさん
2008/11/09(日) 03:15:08関数の名称その他の抽出って感じだろう
構造体を誤認識しないようにしつつ
0451450
2008/11/09(日) 03:16:42どのくらいまでやればいいんだろ
0452デフォルトの名無しさん
2008/11/09(日) 03:25:55void isort(int * ary, int nelem)
{
int i;
for ( i = 1; i < nelem; ++i ) {
int j;
int tmp = *(ary + i);
for ( j = i - 1; j >= 0 && *(ary + j) < tmp; --j ) {
*(ary + j + 1) = *(ary + j);
}
*(ary + j + 1) = tmp;
}
}
適当に作ってみた。
0453デフォルトの名無しさん
2008/11/09(日) 04:05:41シンプレックス法だね。でもコードにするのめんどい・・・
0454デフォルトの名無しさん
2008/11/09(日) 04:06:41途中までやってみた。
・ 基本的に改行を取り除くため1つの char 配列に読み込む
・ // は行単位の処理が必要なので読み込み時に処理
・ /* 〜 */ は未対処
・ void, int, char, float, double のいずれかとマッチするところを探す
→ データ型を省略した関数定義は取りこぼす
・マッチしたらそれぞれの直後が ' ' か '\t' か '\n' の条件に絞る
・ '(' が来るまでに ',' か ';' か ')' か '{' か '}' が来たら関数ではない
・以上の条件に合致したら、型名と関数名を出力
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7978.txt
0455デフォルトの名無しさん
2008/11/09(日) 04:16:44ありがとうございましt!
0456454
2008/11/09(日) 05:20:37short が抜けてたので改良を加えてみた。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7980.txt
検索の順序の関係上お手本とは順番は異なるが、いちおう関数は拾えている
0457354 ◆zeyvxEAaZQ
2008/11/09(日) 05:42:14[2] 問題文(含コード&リンク): 敵が一周回ったら再び中央へ移動して、波を描きながら画面外へ消える。これをクラスを使わないで作って欲しいです。
中央へ移動までは、>>395さんに作っていただきました。http://www.dotup.org/uploda/www.dotup.org20438.zip.html
最終的にこのような感じの動きです。http://www.dotup.org/uploda/www.dotup.org20441.bmp.html
あと、敵の当たり判定もお願いします。これがサンプルです。http://www.dotup.org/uploda/www.dotup.org20440.zip.html
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン: VC2005またはVC2008
[3.3] 言語: C++
[4] 期限: ([2008年11月9日22:00まで
[5] その他の制限: クラスについてどのようなものかまだ習っていなかったのに、曖昧な返事をしてしまって申し訳ございません。
プログラムに関しては、自機の表示と弾を出すのはできましたが、それ以降ができません。どうかお願いします。
0458デフォルトの名無しさん
2008/11/09(日) 05:43:08構造体はつかってもいいですか?
0459デフォルトの名無しさん
2008/11/09(日) 06:16:06[2] 問題文(含コード&リンク):数個のポイントを含むクラスポリゴンを定義しなさい。
(a) デストラクター・コピーコンストラクター・アサインメントオペレーターを作成し、クラスを定義しなさい。ディフォルトコンストラクターは空のポリゴンを作成すると仮定しなさい。
(b)Pointクラスがプライベートメンバー、また、(x,y)を返すコンストラクタPoint(int, int)を持つように変更しなさい。そうすることによってポリゴンクラスがコンパイルしなくなります。問題点を発見し、修正しなさい。
(一応骨組みは作ってみました。)
class Point {
public:
float x;
float y;}
class Polygon {
Point * points; //the points
int size; //number of points
public:
Polygon() {...};
Polygon(const Point * pts, int n) {...};
Point getPoint(int n)const {
//n番目のポイントを返す}
void setPoint(const Point& p, int n) {
//sets the nth point}
int getSize()const {
return size;}};
[3.1] OS: linux redhat
[3.2] コンパイラ名とバージョン: VC2005またはVC2008
[3.3] 言語: C++
[4] 期限: ([2008年11月11日22:00まで
[5] その他の制限:ポリゴンを作成するプログラムを作る課題を出されました。
日本の皆さまのお力をお借りしたく、投稿させて頂きます。
上の骨組みで作成することが、条件として出されました。
よろしくお願いいたします。
0460デフォルトの名無しさん
2008/11/09(日) 07:49:14[2] 問題文(含コード&リンク):
void Wa(int a,int b);
…2つの引数の和を計算し、結果を表示する(xとyの和)
int abs_Sa(int a, int b);
…2つの引数の差を計算し、その絶対値を返す(xとyの差の絶対値)
double Heikin(int a,int b, int c, int d int e);
…5つの引数の平均値を返す(num[5]の平均値)
このような演算を行う関数をそれぞれ定義し、下記のプログラムに処理を追加せよ
#include<stdio.h>
void Wa(int a,int b);
int abs_Sa(int a, int b);
double Heikin(int a,int b, int c, int d int e);
int main(void){
int k,x,y,num[5]={19,51,100,32,6};
double z;
printf("xを入力してください:")
scanf("%d",&x);
printf("yを入力してください:")
scanf("%d",&y);
/* これ以降に処理を追加する */
[3] 環境
[3.1] OS: Windows XP
[3.2] コンパイラ名とバージョン: Visual stdio 2005
[3.3] 言語: C
[4] 期限: 11/11 18:00
[5] その他の制限:
関数習いたてです。よろしくお願いします
0461デフォルトの名無しさん
2008/11/09(日) 08:35:36main 残り
printf("x + y = ");
Wa(x, y);
printf("\n");
k = abs_Sa(x, y);
printf("|x - y| = %d\n", k);
z = Heikin(num[0], num[1], num[2], num[3], num[4]);
printf("average of %d, %d, %d, %d, and %d = %f\n", num[0], num[1], num[2], num[3], num[4], z);
return 0;
関数
void Wa(int a, int b)
{
printf("%d", a + b);
}
int abs_Sa(int a, int b)
{
if (a >= b)
return a - b;
else
return b - a;
}
double Heikin(int a, int b, int c, int d, int e)
{
return (a + b + c + d + e) / 5.0;
}
0462デフォルトの名無しさん
2008/11/09(日) 09:35:58[2] 問題文(含コード&リンク):
長くなったので↓にアップします。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7981.txt
[3] 環境
[3.1] OS: Windows XP
[3.2] コンパイラ名とバージョン: VC2005またはVC2008
[3.3] 言語: c++
[4] 期限: 11月12日
[5] その他の制限:
for文、if文、配列等まで習いました。よろしく御願いします。
0463デフォルトの名無しさん
2008/11/09(日) 10:09:10[2] 問題文:
数値が何(バラバラ)行2列でかかれた複数のファイルがあり
それぞれのファイルを読み込み、表示させるプログラムを書きなさい。
何行かはファイルを開かないとわからないのでプログラムで行数をはかる。
[3] 環境
[3.1] OS:LINUX
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語:C
[4] 期限:2008年11月9日
0464460
2008/11/09(日) 10:10:41ありがとうございます、助かりました
0465デフォルトの名無しさん
2008/11/09(日) 10:58:28メインのループの部分だけ
int pos = 0;
for(i = 0; i < 20; i++) {
x = rnd();
if (x < 0.3) {
pos--;
printf("左に進みました。");
} else {
pos++;
printf("右に進みました。");
}
printf("現在位置 ");
if(pos > 0)
printf("右に %d ", pos);
else if(pos < 0)
printf("左に %d ", pos);
else if(pos > 0)
printf("原点");
printf("です。\n");
}
0466465
2008/11/09(日) 11:04:45double x;
int i, pos = 2;
char *place[] = {"盗賊", "湖", "入り口", "森", "宝"};
srand((unsigned int)time(NULL));
for(i = 0; i < 20; i++) {
x = rnd();
if (x < 0.3) {
pos--;
printf("左に進みました。");
} else {
pos++;
printf("右に進みました。");
}
if(pos >= 4){
printf("宝を見つけました。");
pos = 2;
} else if (pos <= 0){
printf("盗賊に会いました。");
pos = 2;
}
printf("現在位置 %s です。\n", place[pos]);
}
0467デフォルトの名無しさん
2008/11/09(日) 12:53:26ありがとうございました!
0468デフォルトの名無しさん
2008/11/09(日) 13:16:10[2] 問題文(含コード&リンク):
gyoretu[n][n]に格納された、n次の行列の逆行列を求め、出力するプログラムを作成せよ。
対角要素に0や0に近い要素があっても、正しく答えが求められるように工夫せよ。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: VC 6.0
[3.3] 言語: C
[4] 期限:明日
[5] その他の制限: なし
お願いいたします!!
0469デフォルトの名無しさん
2008/11/09(日) 13:18:27ファイル読んでその場で表示するだけなら行数とか考える必要ないんだけど
いったん全部読み込んだあとにまとめて表示するようにした方が良い?
#include <stdio.h>
#define MAX 256
int main(int argc, char **argv)
{
FILE *fp;
double a, b;
while(argc-- > 1){
fp = fopen(argv[argc], "r");
if(fp == NULL){
fprintf(stderr, "Cannot open %s\n", argv[argc]);
continue;
}
while(fscanf(fp, "%lf %lf", &a, &b) != EOF)
printf("%f %f\n", a, b);
fclose(fp);
}
return 0;
}
0470デフォルトの名無しさん
2008/11/09(日) 13:18:520471デフォルトの名無しさん
2008/11/09(日) 14:43:22返信遅れてすいません。
cinとcoutはやりました。
でも授業が難しいのでなかなか理解できないんですよね。。。
0472デフォルトの名無しさん
2008/11/09(日) 15:00:33[2] 問題文:以下に与えたデータ列をLZ78符合で圧縮し、画面に表示するプログラムを作成せよ。
データ列:ABCBCBCDEBCDABCD
コンソールアプリケーションで作成すること。
画面には最低限以下のものを出力すること。
【1】与えたデータ列
【2】作成した辞書の一覧
【3】符号化したデータ列
[3] 環境
[3.1] OS: WindousXP
[3.2] コンパイラ名とバージョン: VisualStudio2005
[3.3] 言語: C,C++どちらでも可
[4] 期限:2008年11月13日まで
[5] その他の制限: 標準ライブラリ可
よろしくお願いします。
0473デフォルトの名無しさん
2008/11/09(日) 15:13:53構造体は使っても大丈夫です。
0474デフォルトの名無しさん
2008/11/09(日) 16:17:50[2] 問題文(含コード&リンク):
入力した値までの素数を列挙させるプログラムを作成せよ。
例)整数を入力:5
2は素数です
3は素数です
5は素数です
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン: VisualStudio2005
[3.3] 言語:C/C++/どちらでも可
[4] 期限: 2008年11月12日まで
[5] その他の制限:for文まで。できるだけ簡潔に。
よろしくお願いします。
0475デフォルトの名無しさん
2008/11/09(日) 16:32:24なにも考えないDQNメソッドだけど
#include <stdio.h>
int main()
{
int i, j, n;
printf("整数を入力:");
scanf("%d", &n);
for(i = 2; i <= n; i++) {
for(j = 2; j < i; j++){
if (i % j == 0)
break;
}
if (j >= i)
printf("%d は素数です\n", i);
}
return 0;
}
0476学生
2008/11/09(日) 16:46:51よろしくお願いします
0477デフォルトの名無しさん
2008/11/09(日) 16:47:53ありがとうございます!
面倒だったようで申しわけないです
0478デフォルトの名無しさん
2008/11/09(日) 16:48:32#include <stdio.h>
main(){
printf("%d\n", 1000/13);
}
0479学生
2008/11/09(日) 16:48:35マイクロソフトビジュアルベーシックC++で作成
0480デフォルトの名無しさん
2008/11/09(日) 16:50:17>>476
#include <stdio.h>
int main(){
printf("%d\n", 1000/13);
return 0;
}
0481デフォルトの名無しさん
2008/11/09(日) 18:01:36C++です。VS2008で確認。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7982.txt
0482デフォルトの名無しさん
2008/11/09(日) 18:51:28[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7983xt
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:
[3.3] C
[4] 期限:11月10
[5] その他の制限:出来るだけ簡単に
よろしくおねがいします!!!
0483482
2008/11/09(日) 18:52:44http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7983.txt
0484デフォルトの名無しさん
2008/11/09(日) 19:11:25#include <stdio.h>
int main(int argc, char *argv[])
{
unsigned int i, n;
char str[21];
puts("符号なし32ビット整数を入力してください。");
scanf("%u", &n);
printf("%u が格納されている先頭アドレスは 0x%p です。\n", n, &n);
puts("20文字以内の文字列を入力してください。");
scanf("%s", str);
printf("%s が格納されている先頭アドレスは 0x%p です。\n", str, str);
for (i = 0; str[i] != '\0'; i++) {
printf("%c が格納されているアドレスは 0x%p です。\n", str[i], &str[i]);
}
return 0;
}
0486デフォルトの名無しさん
2008/11/09(日) 22:53:54[2] 問題文(含コード&リンク):遺伝的プログラムで木構造に新しいノードを追加しなさい。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:2008年11月11日まで
[5] その他の制限:
お願いします。
0487デフォルトの名無しさん
2008/11/09(日) 22:59:03遺伝的プログラムってだけ言われても困るぞwwwwwwww
他になんか情報はないのか
0488デフォルトの名無しさん
2008/11/09(日) 23:17:23例えばどういう情報があればいいですか?
0489デフォルトの名無しさん
2008/11/09(日) 23:22:37cで書けと?
0490デフォルトの名無しさん
2008/11/09(日) 23:23:59ありがとうございました。助かりました。
0491デフォルトの名無しさん
2008/11/10(月) 00:34:44[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7984.txt
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:bcc
[3.3] 言語:C
[4] 期限:11/11
[5] その他の制限:特になし
よろしくお願いします
0492デフォルトの名無しさん
2008/11/10(月) 00:43:01bccコンパイラを使っているんだ。
プログラムの実行時間測定に
#include <sys/time.h>
を参照したいんだがtime.hがどうも入ってないみたいなんだ。
標準搭載されてる関数で少数点以下まで実行時間を計れるものってないかな?
0493デフォルトの名無しさん
2008/11/10(月) 00:52:26じゃねーの?
0494デフォルトの名無しさん
2008/11/10(月) 00:59:37だと思うが、Linux使いなので詳しくはしらないが
struct timeb now;
int millisec;
ftime(&now);
millisec = now.millitm; /* これがミリ秒らしい */
こんな感じだと思う。
詳しくは、ググるかヘッダファイル読め。
0495493
2008/11/10(月) 01:01:04#include <time.h>
のclock()ね
0496デフォルトの名無しさん
2008/11/10(月) 01:02:14俺の探し方がアホなだけかもしれんが、#include <time.h>だと少数点以下まで測れる方法が見つからなかったんだorz
>>494
ありがとう
参考にする
0497デフォルトの名無しさん
2008/11/10(月) 01:04:32ΣΣclock!!
見落してた マジサンキュ やってみる
0498デフォルトの名無しさん
2008/11/10(月) 01:26:15C++でお願いします。
10日の18:00まででいいのでどうかお願いします!
0499デフォルトの名無しさん
2008/11/10(月) 01:27:58クラスを使うなと書いてあるが?
そこだけ関数?
0500デフォルトの名無しさん
2008/11/10(月) 01:33:51[2] 問題文
初期設定された任意の文字列の順序を,逆に並べ換えるプログラムをつくりなさ
い。ただし,並べ換える部分を関数にして,関数には文字列を引数として渡しなさい。
文字列の例としては,
char str[] = "My name is Tarou Tanaka";
のように自分の名前を用いてみなさい。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語: C
[4] 期限: 2008年11月12日 24:00
[5] その他の制限:
・次のようなプロトタイプ宣言をもつ関数reverse を定義すること。
void reverse(char *);
・引数で渡された文字列自身が逆順になること。
C言語の基本関数のみでよろしくお願いします。
0501デフォルトの名無しさん
2008/11/10(月) 01:37:34構造体はつかっていいらしいかららクラスと差し替えちゃえばいいんじゃね
0502デフォルトの名無しさん
2008/11/10(月) 01:57:40クラスは使わず、構造体でお願いします。
0503デフォルトの名無しさん
2008/11/10(月) 02:10:50ほんとうにいいんだな
構造体にコンストラクタとデストラクタとメンバ関数つけられるぞ?
0504デフォルトの名無しさん
2008/11/10(月) 02:11:50void reverse(char * s)
{
size_t len = strlen(s); /* 文字列の長さ */
size_t half_len = len / 2; /* 文字列の半分の長さ */
size_t i;
for ( i = 0; i < half_len; ++i ) {
char tmp = *((s + len - 1) - i);
*((s + len - 1) - i) = *(s + i);
*(s + i) = tmp;
}
}
こんなのでいいかな。
0505デフォルトの名無しさん
2008/11/10(月) 02:21:28[2] 問題文:
#include <stdio.h>
#define SIZE 10
int main(void)
{
FILE *infile;
int i, data[SIZE];
infile = fopen("sample61a.txt", "r");
if(infile == NULL) {
printf("入力ファイルを開くことができません\n");
return 0;
}
for(i = 0; i < SIZE; i ++ ) {
fscanf(infile, "%d", &data[i]);
}
for(i = 0; i < SIZE; i ++ ) {
printf(" %3d", data[i]);
}
printf("\n");
return 0;
}
0506デフォルトの名無しさん
2008/11/10(月) 02:21:58このプログラムを改造し、データの値を奇数と偶数に分けそれぞれ合計値・個数・平均値を出力せよ。
その際奇数データの数、偶数データの数がそれぞれゼロの場合は平均値を求めないようにせよ。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ:Microsoft Visual C++ 6.0
[3.3] 言語:C
[4] 期限:11月11日
締め切りが急ですみません。
さっぱりわからなくなってしまったので、良ければよろしくお願いします。
0507デフォルトの名無しさん
2008/11/10(月) 02:39:50ありがとう!
0508デフォルトの名無しさん
2008/11/10(月) 02:45:05#include <stdio.h>
#define SIZE 10
int main(void)
{
FILE *infile;
int i, data[SIZE], sum[2]={0}, num[2]={0};
char *str[2] = {"奇数", "偶数"};
infile = fopen("sample61a.txt", "r");
if(infile == NULL) {
printf("入力ファイルを開くことができません\n");
return 0;
}
for(i = 0; i < SIZE; i ++ ) {
fscanf(infile, "%d", &data[i]);
sum[data[i]%2] += data[i];
num[data[i]%2]++;
}
for(i = 0; i < SIZE; i ++ ) {
printf(" %3d", data[i]);
}
printf("\n");
for(i=1; i>=0; i--){
printf("%s:合計値%d, 個数%d個", str[i], sum[i], num[i]);
if(num[i] > 0) printf(", 平均値:%f", (float)sum[i] / (float)num[i]);
printf("\n");
}
return 0;
}
0509デフォルトの名無しさん
2008/11/10(月) 02:46:410510デフォルトの名無しさん
2008/11/10(月) 02:52:08[2] 問題文(含コード&リンク):
ITIMER_REAL, ITIMER_VIRTUAL, ITIMER_PROF タイマーを用いて、プロセスのプロセッサ利用状況を測定するソフトウェアを実装する。
出力には、実行の経過時間、プロセッサ時間、ユーザ空間時間、カーネル空間時間が含むこと。
詳細
(1)すべての時間はミリ秒の分解精度を持つこと
(2)1秒毎にsignalを発生させ、経過した秒数をカウントする
(3)再帰を用いたFibbonacci数を計算するプログラムを子プロセスとした実行結果をしめすこと
[3] 環境
[3.1] OS: Linux Kernel 2.6.x
[3.2] コンパイラ名とバージョン: gcc4.x
[3.3] 言語: C言語
[4] 期限: 2008年11月12日12:00
[5] その他の制限: sigactionやitimervalを用いて実装するのが今回の目的です。時間を計るものはできたのですが、ミリ秒単位の分解精度をどうやって出すのかがわかりません。よろしくお願いします。
0511デフォルトの名無しさん
2008/11/10(月) 02:54:37稚拙ながらもソースコードを示します。
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <signal.h>
#include <unistd.h>
#include <sys/time.h>
#include <sys/types.h>
#include <sys/wait.h>
int realSec = 0;
int profSec = 0;
int virtualSec = 0;
static void myHandler(int s) {
int errSave;
if (s == SIGALRM) realSec++;
else if (s == SIGVTALRM) virtualSec++;
else if (s == SIGPROF) profSec++;
}
static int setupInterrupt(void) {
struct sigaction act;
act.sa_handler = myHandler;
act.sa_flags = 0;
return (sigemptyset(&act.sa_mask) == sigaction(SIGALRM,&act, NULL) == sigaction(SIGVTALRM,&act, NULL) == sigaction(SIGPROF, &act, NULL) == 0) ? 1 : 0;
}
static int setupitimer(void) {
struct itimerval value;
value.it_interval.tv_sec = 1; value.it_interval.tv_usec = 0;
value.it_value = value.it_interval;
return (setitimer(ITIMER_PROF,&value, NULL) == setitimer(ITIMER_VIRTUAL,&value, NULL) == setitimer(ITIMER_REAL,&value, NULL) == 0)? 0: -1 ;
}
0512デフォルトの名無しさん
2008/11/10(月) 02:56:23int main(int argc, char** argv) {
pid_t child, retVal;
struct itimerval real, virtual, profile;
int status;
if (setupInterrupt()) {
perror("Failed to set up handler for SIGPROF"); return 1;
}
if (setupitimer() == -1) {
perror("Failed to set up the ITIMER_PROF intervaltimer");return 1;
}
if (argc < 2){
fprintf (stderr, "Usage:%s command\n", argv[0]);return 1;
}
if ((child = fork()) == -1) {
perror("Failed to fork"); return 1;
}
if (child == 0) { // child code
execvp(argv[1], &argv[1]);
perror("Child failed to execvp the command");
return 1;
} else { // parent code
while((retVal = waitpid(-1, &status, WNOHANG)) != child);
getitimer(ITIMER_REAL, &real);getitimer(ITIMER_PROF, &profile);getitimer(ITIMER_VIRTUAL, &virtual);
//ここも要修正
printf("real = %d.%ld", realSec, 1000000 - real.it_value.tv_usec);
printf(" virtual = %d.%ld", virtualSec, 1000000 - virtual.it_value.tv_usec);
printf(" profile = %d.%ld\n", profSec, 1000000 - profile.it_value.tv_usec);
}
}
よろしくお願いします。
0513デフォルトの名無しさん
2008/11/10(月) 03:19:23[2] 問題文:次のことを行うプログラムを,for文を用いて作成しなさい。
10個の要素をもつ整数配列dataを初期化して宣言する。
配列要素の中の最大値と最小値を出力しなさい。
なお,配列要素の値として,すべて負のものがあるデータも試してみること。
[3] 環境
[3.1] OS:Win
[3.2] コンパイラ名とバージョン:VC++ 6.0
[3.3] 言語:C言語
[4]期限:なし
初歩的な問題で申し訳ないですが、よろしくお願いします。
0514デフォルトの名無しさん
2008/11/10(月) 03:30:10#include <stdio.h>
#define SIZE 10
int main() {
//int data[SIZE] = {83,28,35,84,43,21,8,51,2,12};
int data[SIZE] = {-83,-28,-35,-84,-43,-21,-8,-51,-2,-12};
int min, max;
int i;
min = max = data[0];
for (i = 1; i < SIZE; i++) {
if (data[i] > max) {
max = data[i];
} else if (data[i] < min) {
min = data[i];
}
}
printf("min = %d, max = %d\n", min, max);
}
0515デフォルトの名無しさん
2008/11/10(月) 05:45:39はい、お願いします。
0516デフォルトの名無しさん
2008/11/10(月) 05:47:28>>503
クラス使わないで、構造体で作って動けば問題ないのでお願いします。
0517デフォルトの名無しさん
2008/11/10(月) 08:36:06[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7985.txt
[3] 環境:
[3.1] WindowsVista
[3.2] Borland C++Compiler
[3.3] C言語
[4] 期限: 2008年11月10日23:59まで
0518デフォルトの名無しさん
2008/11/10(月) 09:02:31ありがとうございます!
0519デフォルトの名無しさん
2008/11/10(月) 09:12:11#include <stdio.h>
void main(void){
int i,t;t=0;
for(i=1; i<=100; i++){if(i %3 == 0){printf("%d \n" ,i);t++;}}
printf("\n total %d\n",t);}
0520デフォルトの名無しさん
2008/11/10(月) 11:43:48どうでもいいところかもしれんが
return (sigemptyset(&act.sa_mask) == sigaction(SIGALRM,&act, NULL) == sigaction(SIGVTALRM,&act, NULL) == sigaction(SIGPROF, &act, NULL) == 0) ? 1 : 0;
これ、意図したとおりに動くの? A == B は A と B が等しかったら 1 を返すよ
一つでも 0 以外のを返したら、とやりたいんだったら && とか使うべし
0521デフォルトの名無しさん
2008/11/10(月) 13:44:10[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7986.txt
[3] 環境
[3.1] OS: UNIX
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 11月12日
[5] その他の制限: 特になし
よろしくお願いします。
0522デフォルトの名無しさん
2008/11/10(月) 14:06:25while(!isempty()) {
y = pop();
x = pop();
if (map[y][x] == ' ') {
map[y][x] = '*';
/*ここを適切に埋める(3) */
// up
push(x);
push(y - 1);
// down
push(x);
push(y + 1);
// left
push(x - 1);
push(y);
// right
push(x + 1);
push(y);
/*塗るたびにマップを表示する */
for(y = 0; y < 7; y++)
printf("%s\n", map[y]);
printf("\n");
}
}
0524デフォルトの名無しさん
2008/11/10(月) 14:28:40ありがとうございます!助かりました!
0525デフォルトの名無しさん
2008/11/10(月) 14:37:571年分ってのは、入力した年の1月から12月を表示すればよいのか
入力した月から翌年の同月-1 を表示すればよいのか
入力した月を含む前後6か月を表示すればよいのか
0526デフォルトの名無しさん
2008/11/10(月) 15:02:16カレンダーは >> 525 の返答次第
フィボナッチその1
#include <stdio.h>
int main()
{
int i, f0 = 0, f1 = 1, f2 = 1, num;
printf("num:");
scanf("%d", &num);
for(i = 0; i < num; i++){
printf("f[%d]:%d\n", i, f0);
f2 = f1 + f0;
f0 = f1;
f1 = f2;
}
return 0;
}
0527デフォルトの名無しさん
2008/11/10(月) 15:02:58フィボナッチその2
#include <stdio.h>
int main()
{
int i, f0 = 0, f1 = 1, f2 = 1, num;
printf("num:");
scanf("%d", &num);
i = 0;
while(i < num){
printf("f[%d]:%d\n", i, f0);
f2 = f1 + f0;
f0 = f1;
f1 = f2;
i++;
}
return 0;
}
0528デフォルトの名無しさん
2008/11/10(月) 15:03:33フィボナッチその3
#include <stdio.h>
int main()
{
int i, f0 = 0, f1 = 1, f2 = 1, num;
printf("num:");
scanf("%d", &num);
i = 0;
do{
printf("f[%d]:%d\n", i, f0);
f2 = f1 + f0;
f0 = f1;
f1 = f2;
i++;
} while(i < num);
return 0;
}
0529初心者
2008/11/10(月) 15:59:23[2] 問題文(含コード&リンク):
★下記の仕様を満たすプログラムをC言語で作成しなさい.
【仕様】日数計算プログラム
▼今日の日付と生年月日を入力すると,今日が生年月日から数えて何日目にあたるかを表示する.西暦・月・日をスペースで区切って入力する.
▼この場合,「うるう年」を考慮しなければならない.「うるう年」の条件は,
�@西暦が4で割り切れる.
�Aただし,西暦が100で割り切れる年は除く.
�Bただし,西暦が400で割り切れる年は含める.
▼「今日は、あなたが生まれた日から数えて〜日目です。」と表示する.
▼計算式は,(西暦1年1月1日から今日までの日数)−(西暦1年1月1日から生年月日までの日数)を使えばよい.
▼生年月日が今日の日付より後になっているときは,「生年月日が今日の日付より後になっています!」とエラーメッセージを表示する.
▼最低限,次の関数を使うこと.
�@main関数(これは当たり前ですが)
�A入力された値が計算に適切な値かをチェックする関数(4月31日などありえない日付を入れると,「年月日が正しい範囲にありません」と表示する)
�B日付を計算する関数
▼日付の入力やメッセージの表示はmain関数で行うこと(ポインタに関する課題なので参照渡しを使うこと).
[3] 環境
[3.1] OS: Windows xp
[3.2] コンパイラ名とバージョン: 分からないです。
[3.3] 言語: C言語
[4] 期限: 今週中ぐらい
[5] その他の制限: 繰り返し文、条件判断文、ポインタを使ってお願いします。
初心者なので、初心者にも分かるようなプログラムをお願いします。
0530デフォルトの名無しさん
2008/11/10(月) 16:09:07ぜひ、教えてください!
今、XPでvisualを使ってます。
『課題』
円周率πの値を近似式
π≒4Σ(←n=0から100で)(ー1)^n×(2n+1)^(−1)×{(0.5)^(2n+1)+(3)^(ー2nー1)}
を用いて、小数第8位まで正しい値(3.14159265)を出力し、
そのπの値を用いて入力された数値εに大して、次の不等式を満たす最小の自然数Nを求めるプログラムを作れ。
|(π^2/6)-Σ(←k=1からN)k^(-2)|<ε
0531デフォルトの名無しさん
2008/11/10(月) 16:32:390532デフォルトの名無しさん
2008/11/10(月) 16:45:16こんなんでいい?
#include <stdio.h>
#include <math.h>
int main (void)
{
int i;
double pi, sum, eps;
sum = 0.0;
for(i=0; i<=100; i++){
pi = 4.0 * (sum += pow(-1, i) / (2*i + 1) * (pow(0.5, 2*i+1) + pow(3, -2*i-1)));
}
printf("π≒%.8f\n", pi);
printf("ε:");
scanf("%lf", &eps);
i = 1; sum = 0.0;
while(fabs(pi*pi/6 - (sum += pow(i, -2))) >= eps)
i++;
printf("N = %d\n", i);
return(0);
}
0533デフォルトの名無しさん
2008/11/10(月) 17:06:14期限は今日中で良いのでお願いします!
0534デフォルトの名無しさん
2008/11/10(月) 17:48:20かわいいな
[2] 問題文:
プログラム1を改良し、データをファイルから読み込みつつ小さい順にソートして格納するプログラムを作成せよ、。
手順を以下に示す。
1.cell構造体へのポインタとして、struct cell *new、*start、*p1、*p2;の4つを準備し、それぞれNULLで初期化する。
2.データファイルからデータ数を読み込む。
3.データを1つ読み込み、cell構造体を作成してnewにセットした後、その構造体に格納。
・はじめてのデータであれば、ポインタstartとp1をnewにセット。
・2つ目のデータであれば、p2をnewにセットし、p1が示すリスト要素(構造体)の次に追加接続する。
ただし、2つ目のデータが1つ目のデータよりも小さい場合には、p1とp2の指す構造体内のデータを入れ替える。
もしくはリスト要素(構造体)自体の位置を入れ替えポインタをセットし直す必要があることに注意。
・3つ目以降のデータであればリスト先頭から順に走査を行う。この際、p1、及びp2をそれぞれ1つずつリスト内の次の要素に進めてゆく。
。読み込まれたデータが、リスト先頭要素(構造体)の持つ値より小さい場合には、新規作成された構造体newをリスト先頭に追加し、ポインタstartをnewにセットする。
。リスト途中で、p1には読み込まれたデータより小さい値、p2には読み込まれたデータより大きい値となる場所が見つかれば、この間に新規作成された構造体newを挿入する。
。リスト最後尾まで読み込まれたデータより大きい値が見つからなければ、新規作成された構造体newを最後尾に追加する。
4.3をデータ入力数だけ繰り返す。
5.全てのデータを読み込み終えたら、リスト先頭から順にデータを出力する。
num-data.txt
5
23
43
67
14
9
#include<stdio.h>
struct cell{
int data;
struct cell *next; };
int main(void){
int num;
struct cell *new, *start, *ptr;
new = NULL;
start = NULL;
ptr = NULL;
while(1){
scanf("%d",&num);
if(num == -1){ break; }
new= (struct cell *)malloc(sizeof(start));
if(new == NULL){ fprintf(stderr,"Error!:malloc short(struct cell).\n"); }
new->data = num;
new->next = NULL;
if(ptr == NULL){
start = new;
ptr = new;
}else{
ptr->next=new;
ptr = new; } }
ptr = start;
while(ptr != NULL){
printf("%d\n",ptr->data);
ptr=ptr->next; }
return 0;}
[3] 環境 [3.1] OS: Linux[3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C
[4] 期限:2008年11月21日17:00まで
0537デフォルトの名無しさん
2008/11/10(月) 18:18:32http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7988.txt
参照渡しをする合理的理由がみあたらないので抜きで作った。
どっか適当に変えてくれ
0538374
2008/11/10(月) 19:36:44カレンダーは入力した年の1月から12月を表示するものでよかったです。
>>526-528
助かります。本当にありがとうございます
0539525
2008/11/10(月) 20:03:17http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7989.txt
0541デフォルトの名無しさん
2008/11/10(月) 21:12:16#include<stdio.h>
#include<stdlib.h>
struct cell {
int data;
struct cell *next;
};
int main(void){
int num;
struct cell *new, *start, *p1, *p2;
new = start = p1 = p2 = NULL;
while (1) {
scanf("%d", &num);
if (num == -1) break;
new = (struct cell *) malloc(sizeof(start));
if (new == NULL) { return 1; }
new->data = num;
new->next = NULL;
for(p1=start,p2=NULL; (p1) && new->data > p1->data; p2=p1, p1=p1->next);
if(p2){
p2->next = new;
new->next = p1;
}else{
new->next = start;
start = new;
}
}
for (p1=start; (p1); p1=p1->next) { printf("%d\n", p1->data); }
return 0;
}
0542デフォルトの名無しさん
2008/11/10(月) 22:01:28[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7991.txt
[3] 環境
[3.1] OS: Unix
[3.2] コンパイラ名とバージョン: gcc(versionは不明
[3.3] 言語: C
[4] 期限: 2008年11月13日(木曜日)12:00まで
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
・ポインタをメインに使用してください
よろしくお願いします
0543デフォルトの名無しさん
2008/11/10(月) 23:11:51[2] 問題文(含コード&リンク)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7992.txt
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 2008年11月12日
[5] その他の制限:
よろしくお願いいたします。
0544デフォルトの名無しさん
2008/11/10(月) 23:14:37malloc は ok なの?
最大長とか単語数は別プログラムで調べるんだったらいいけど、
一度にやるんだったら必ず必要だよ
0545デフォルトの名無しさん
2008/11/10(月) 23:22:34printf("学籍番号:%d 氏名:%s\n",
p->id, p->name);
○○○ //pに次の構造体のポインタを代入
↑↑↑
ここを p = p->next とやるだけでとりあえず動くものはできるけど・・・
List3 は点数を取り込んでないよね。点数を取り込むようにしたいの?
読み込むデータのサンプルはないの?
0546デフォルトの名無しさん
2008/11/10(月) 23:25:53ツッコミどころが多すぎるんだが・・・
とりあえず
- char *dict[999], *input[50]
+ char dict[999][100], input[50][100]
として、適当に文字列を格納する領域を確保しておくこと。
勘違いだと思うけど
- for(i = 0; scanf("%s",input[i]) != '\n'; i++);
+ for(i = 0; scanf("%s",input[i]) == 1; i++);
添字が逆
- judge = compare( dict[j], input[k]);
+ judge = compare( dict[k], input[j]);
それから、そもそも input[j] に入っているのは標準入力から得た一行だから、単語ごとに分割する処理が必要
0547デフォルトの名無しさん
2008/11/10(月) 23:36:49[2] 問題文(含コード&リンク):
10 個の要素をもつ整数配列data を初期化して宣言する。
配列の隣り合った添え字のデータ同士の差(data[i] – data[i-1])を調べる。
その値が,最も大きなものを探し,データの差がい
くつなのか,添え字の何番と何番との間の差なのか出力しなさい。
最大のものが複数あったときには,添え字の最も大きなものを出力すること。
例えば,data[10]={-6,4,7,-3,-1,9,5,-5,4,6}
で初期化したときには,4 と5 の間の10 が最大となる。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:VC++ 6.0
[3.3] 言語:C言語
[4] 期限:11/14
[5] その他の制限:特になし
よろしくお願い致します。
0548デフォルトの名無しさん
2008/11/10(月) 23:45:026,7番目の間の10が最大値になる?
0549デフォルトの名無しさん
2008/11/10(月) 23:46:40素直に書いてみた
差の絶対値じゃなくて差の比較だけでいいんだよね?
#include<stdio.h>
#define N 10
int main(){
int data[N]={-6,4,7,-3,-1,9,5,-5,4,6};
int*max_diff = data;
int*it;
for(it=data+1;it!=data+N-1;++it)
if(1[max_diff]-0[max_diff] <= 1[it]-0[it])
max_diff = it;
printf("%dと%dの間の差%dが最大\n",
max_diff-data,max_diff-data+1,1[max_diff]-0[max_diff]);
return 0;
}
0550デフォルトの名無しさん
2008/11/11(火) 00:50:44[2] 問題文(含コード&リンク):
一次元配列を用いて5人分の得点を100点満点で入力し、平均値を画面およびファイルに書き出すプログラムを作成しなさい。
書き出し用ファイル名はave.txtとする。
[3] 環境:
[3.1] Windows Vista
[3.2] Borland C++
[3.3] C言語
[4] 期限: 11月11日12:00
昼すぎ提出なので時間があまりないですが、どなたかお願いします。
0551 ◆8w4FYxc7TQ
2008/11/11(火) 00:52:24[2] 問題文(含コード&リンク):
三つの数字a,b,cを入力したとき、大きい順に出力するプログラムを作成せよ。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:VC++ 9.0
[3.3] 言語:C++
[4] 期限:11/12
[5] その他の制限:
この問題で使えそうなものは、if、もしくはswitchしか習っていないので、それでお願いします。
自分でif文を使って組み立てると、どうしても思い通りに並べてくれません…
どうかよろしくお願いします。
0552デフォルトの名無しさん
2008/11/11(火) 01:11:20[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7993.txt
[3] 環境
[3.1] OS: (Windows vista)
[3.2] コンパイラ VisualStudio2005
[3.3] 言語: C言語
[4] 期限: 2008年11月13日15:00まで
[5] その他の制限: (C言語検定2級程度の途中まで習ってます)
すいません、お願いします
0553デフォルトの名無しさん
2008/11/11(火) 01:17:330554デフォルトの名無しさん
2008/11/11(火) 01:25:42はい、差の比較のみです。
言葉が足りなくてすみません。
ありがとうございました!
0555521
2008/11/11(火) 01:34:59ありがとうございます。
誰か、もう一つの課題のほうもお願いいたします。
0556デフォルトの名無しさん
2008/11/11(火) 01:46:23#include <stdio.h>
int main(void)
{
int i, score, sum=0;
FILE *fp;
for(i=1; i<=5; i++){
printf("%d人目:", i);
scanf("%d", &score);
sum += score;
}
printf("平均値:%f\n", (double)sum / 5.0);
if((fp = fopen("ave.txt", "w")) == NULL){
printf("ファイルが開けません\n");
return 1;
}
fprintf(fp, "平均値:%f\n", (double)sum / 5.0);
fclose(fp);
return 0;
}
0557デフォルトの名無しさん
2008/11/11(火) 01:48:54#include <stdio.h>
int main(void)
{
int i, score[5], sum=0;
FILE *fp;
for(i=0; i<5; i++){
printf("%d人目:", i+1);
scanf("%d", &score[i]);
sum += score[i];
}
printf("平均値:%f\n", (double)sum / 5.0);
if((fp = fopen("ave.txt", "w")) == NULL){
printf("ファイルが開けません\n");
return 1;
}
fprintf(fp, "平均値:%f\n", (double)sum / 5.0);
fclose(fp);
return 0;
}
0558デフォルトの名無しさん
2008/11/11(火) 01:57:47if(a < b){
tmp = a;
a = b;
b = tmp;
}
if(a < c){
tmp = a;
a = c;
c = tmp;
}
if(b < c){
tmp = b;
b = c;
c = tmp;
}
0559デフォルトの名無しさん
2008/11/11(火) 02:18:50お礼おくれて申し訳ありません。
助かりました。ありがとうございます。
0560デフォルトの名無しさん
2008/11/11(火) 02:33:03ありがとうございます助かりました!
一次元配列使うんです、まぎらわしくてすいません。
二度もありがとうございました。
0561デフォルトの名無しさん
2008/11/11(火) 02:39:302番はちょっと余計なこともしてるけど
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7994.c
0562デフォルトの名無しさん
2008/11/11(火) 03:37:42rewind(stdin)なんて標準以外の使い方すんなカス
0563デフォルトの名無しさん
2008/11/11(火) 03:49:35[2] 問題文
0〜9の数字のみからなる文字列を引数として受け取り、
同じ数字並びの整数を返す関数ascii2int()を作り、動作を
確認せよ。ただし、非負の整数のみ考える。
[3.1] OS:linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語: c
[4] 期限: 11月15日
0564デフォルトの名無しさん
2008/11/11(火) 03:56:49[2] 問題文(含コード&リンク):ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7996.txt
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:VC 6.0
[3.3] 言語:C
[4] 期限:2008/11/12
[5] その他の制限:なし
すいませんが、よろしくお願いします!
0565デフォルトの名無しさん
2008/11/11(火) 06:51:39これで許してくださいorz
scanf("%*[^\n]\n");
0566デフォルトの名無しさん
2008/11/11(火) 06:59:11#include<stdio.h>
int ascii2int(const char* str){
int r=0;
while(*str){
r*=10;
r+=*str-'0';
str++;
}
return r;
}
int main(){
char* a = "12345";
printf("%d\n",ascii2int(a));
}
0567デフォルトの名無しさん
2008/11/11(火) 07:36:20なんかへたくそでごめん。。
#include<stdio.h>
#define N 100
int n,cnt=0,c[N],b[N];
void solve(int a_top,int b_top,int c_top){
if(a_top>n && b_top==0){
int i;
for(i=0;i<n;i++)printf("%d",c[i]);
printf("\n"); cnt++;
}
if(a_top<=n){
b[b_top++] = a_top++;//a->b
solve(a_top,b_top,c_top);
b[--b_top] = --a_top;//b->a
}
if(b_top>0){
c[c_top++]=b[--b_top];//b->c
solve(a_top,b_top,c_top);
b[b_top++]=c[--c_top];//c->b
}
}
int main(){
printf("n:"); scanf("%d",&n);
if(n>0) solve(1,0,0);
printf("%d\n",cnt);
}
0568デフォルトの名無しさん
2008/11/11(火) 07:40:51ありがとうございます!
やってみます!
0569デフォルトの名無しさん
2008/11/11(火) 08:52:572回に分けて。
#include<stdio.h>
#define STACKSIZE 100
typedef struct _Point{
int x,y;
}point;
static int sp = 0;
static point stack[STACKSIZE];
void push(point p){
[sp++] = p;
}
point pop(void){
return stack[--sp];
}
int isempty(void){
return sp == 0;
}
0570デフォルトの名無しさん
2008/11/11(火) 08:54:32int main(void){
char map[7][11] = {
"**********",
"* * *",
"* *****",
"* ** * *",
"* * *",
"* * * *",
"**********",
};
point p;
int x,y;
p.x=2; p.y=1; push(p);
while(!isempty()){
p=pop(); x=p.x; y=p.y;
if (map[y][x] == ' '){
map[y][x] = '*';
p.x=x; p.y=y-1; push(p); // up
p.x=x; p.y=y+1; push(p); // down
p.x=x-1; p.y=y; push(p); // left
p.x=x+1; p.y=y; push(p); // right
for(y = 0; y < 7; y++) printf("%s\n", map[y]);
printf("\n");
}
}
return 0;
}
0572デフォルトの名無しさん
2008/11/11(火) 10:08:37[2] 1. define文を使ってN以下の素数を全て求めよ
2. 関数 f(t)=t^5-t の区間 [0,2] での値を 0.1 刻みで表示するプログラムを作れ
[3]
[3.1] OS : Linux
[3.2] ?
[3.3] 言語 : C
[4] 期限: 11/12
[5] その他の制限:初歩の初歩です。難しすぎるのはよく分かりません
どなたかよろしくお願いします
0573デフォルトの名無しさん
2008/11/11(火) 11:06:09#include<stdio.h>
#define N 100
int main(){
int s[N],i,j;
for(i=0;i<N;i++) s[i]=1;
s[0] = s[1] = 0;
for(i=2;i<N;i++){
if(!s[i]) continue;
for(j=i+i;j<N;j+=i){
s[j]=0;
}
}
for(i=0;i<N;i++){
if(s[i]) printf("%d\n",i);
}
}
0574デフォルトの名無しさん
2008/11/11(火) 11:14:17define文を使うって、#define N 100 ← これだけでいいのかww
0575デフォルトの名無しさん
2008/11/11(火) 11:15:350576デフォルトの名無しさん
2008/11/11(火) 11:58:52たぶん確実に違うisemptyのどこが駄目でしょうか?あとpush,popもおかしかったら教えてください。
void push(int x){
if(sp == 100){
printf("stack is fill.\n");
}
else{
stack[sp]=x;
sp++;
}
}
int pop(void){
if(sp == 0){
printf("stack is empty.\n");
}
else{
sp--;
return(stack[sp]);
}
}
int isempty(void)
{
if(sp ==100)
printf("1");
if(sp ==0)
printf ("0");
}
0577522
2008/11/11(火) 12:03:42void push(int val)
{
stack[sp++] = val;
}
int pop(void)
{
return stack[sp-- - 1];
}
int isempty(void)
{
/*スタックが空なら1、空でないなら0を返す関数 */
return sp == 0 ? 1 : 0;
}
0578デフォルトの名無しさん
2008/11/11(火) 12:08:04は普通だけど、
return stack[sp-- - 1];
って書き方がすごくきもく見えるw
0579デフォルトの名無しさん
2008/11/11(火) 12:13:05だよなぁ常考
0581デフォルトの名無しさん
2008/11/11(火) 12:59:00論理式?1:0;とかif(論理式!=0)とかif(論理式==0)
って書き方が好きじゃない。冗長な感じがして。
0582デフォルトの名無しさん
2008/11/11(火) 13:01:580583デフォルトの名無しさん
2008/11/11(火) 13:03:560584デフォルトの名無しさん
2008/11/11(火) 14:01:00[2] 問題文(含コード&リンク):
以下のプログラムを英文清書プログラムに書き換えよ。
元のプログラム
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7997.c
条件
・文の先頭は大文字、それ以外は小文字。
・アルファベット以外の文字は変換しなくてよい。
・改行、スペース、タブにより単語の区切りとする。また文末は改行コードではなくピリオド"."で判定する。
・\endまたは\ENDを挿入するとそのプログラムを終わるようにする。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 2008/11/12 23:59まで
[5] その他の制限: 特にないです。
すみませんが、よろしくお願いします。
0585デフォルトの名無しさん
2008/11/11(火) 14:34:130586デフォルトの名無しさん
2008/11/11(火) 15:28:24ピリオド検索はstrstrで ポインタアドレスの差を文字列長にもしてげへへへ
0587デフォルトの名無しさん
2008/11/11(火) 16:00:13[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8000.c
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限: 11/18
[5] その他の制限: 特になし
全く分かりません。宜しくお願いします
0588デフォルトの名無しさん
2008/11/11(火) 16:12:52うそつけw
考える気がないだろw
0589デフォルトの名無しさん
2008/11/11(火) 17:34:320590デフォルトの名無しさん
2008/11/11(火) 17:36:250591デフォルトの名無しさん
2008/11/11(火) 18:18:38ありがとうございます
0592デフォルトの名無しさん
2008/11/11(火) 18:19:28超めんどくさい!cの単方向リスト嫌い!
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8001.txt
0593576
2008/11/11(火) 18:22:40ありがとうございます。>>522と合わせてプログラムにしてみたんだが何もマップされないんです。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8002.txt
自宅のubuntuのgcc(おそらくでやってるんですが環境のせいですか?変なところあったら指摘お願いします。
0594デフォルトの名無しさん
2008/11/11(火) 18:24:580595デフォルトの名無しさん
2008/11/11(火) 18:25:430596デフォルトの名無しさん
2008/11/11(火) 18:28:380597デフォルトの名無しさん
2008/11/11(火) 18:49:43遅れましたが、解答ありがとうございました。
0600デフォルトの名無しさん
2008/11/11(火) 20:20:46[2] 問題文(含コード&リンク):
(1) 単項式を入力された順に出力されるように変更する
(2)入力した単項式を次数の大きい順にするに出力されるように変更する
ソースは以下を参考にしてください、たらない変数は任意で増やしてけっこうです
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8003.txt
(1)と(2)は別解答
[3] 環境
[3.1] OS: Win
[3.2] コンパイラ名とバージョン: 任意
[3.3] 言語: C
[4] 期限: 2008年11月14日13:30まで
期限が迫ってるのでお願いします
0601デフォルトの名無しさん
2008/11/11(火) 20:28:180602デフォルトの名無しさん
2008/11/11(火) 20:32:57前スレあたりで載せたんですがスルーだったようで自力でやろうとしたけど無理だったので再度^^;
最終期限がすぐであせってます
0603576
2008/11/11(火) 20:35:35みなさまありがとうございました。明日も生きていけそうです。
0604デフォルトの名無しさん
2008/11/11(火) 20:37:29[2] 問題文:
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8004.txt
[3] 環境
[3.1] OS:Linux
[3.2] cc
[3.3] C
[4] 期限:2008年11月12日15:00まで
[5] その他の制限:問題文中に出てくる、frequency.c を利用せよ、とありますので、
なるべくそれを基盤にするようにお願いします。
↓途中まで考えてみたものです。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8005.txt
0605デフォルトの名無しさん
2008/11/11(火) 20:45:381問目
freqency.c の出力部分を以下のように修正
for(i = 0; i < 26; i++) { /* 結果出力 */
while(alpha[i]-- > 0)
printf("*");
printf("\n");
}
0606605
2008/11/11(火) 20:54:39char c;
int i, j, alpha[26], max = 0;
for(i = 0; i < 26; i++) /* 配列のクリア */
alpha[i] = 0;
c = getchar();
while(c != '\n') {
if (c >= 'a' && c <= 'z') { /* 英小文字の処理 */
alpha[c - 'a'] += 1;
if (alpha[c - 'a'] > max)
max = alpha[c - 'a'];
} else {
if (c >= 'A' && c <= 'Z') { /* 英大文字の処理 */
alpha[c - 'A'] += 1;
if (alpha[c - 'A'] > max)
max = alpha[c - 'A'];
}
}
c = getchar();
}
for(i = 0; i < max; i++) {
for(j = 0; j < 26; j++) { /* 結果出力 */
if (alpha[j] >= max - i)
printf("* ");
else
printf(" ");
}
printf("\n");
}
for(j = 0; j < 26; j++) /* 結果出力 */
printf("%c ", j + 'a');
printf("\n");
0607デフォルトの名無しさん
2008/11/11(火) 20:59:530608デフォルトの名無しさん
2008/11/11(火) 21:09:56[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク): 問1、ユークリッドの法則を使ってn(n≦100)個の正整数の最大公約数を求めるプログラムを作れ
なお、最終的にはgcd(最大公約数を求める整数の羅列)=結果と画面上に表示するようにすること
問2、n個(n≦100以下)の正整数の最小公倍数を求めよ。
表示方法は先ほどの問いと一緒
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:11/13
[5] その他の制限: int gcd(int x, int y)の関数を使用してください
あと、なるべく2つずつ比べるようにして、必ず大きい正数が変数xに入るようにしてください
0609デフォルトの名無しさん
2008/11/11(火) 21:15:18ボールの初速とか角度は風の影響が全く無いときに当たるようにすればいいの?
それとも投げたら絶対当たるように作るの?
0610デフォルトの名無しさん
2008/11/11(火) 21:18:17[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8006.txt
�@2次元平面上の点を表す構造体 Point 型を定義して,その点に関する計算を行うプログラムを作成したい.
以下のプログラムを基にして完成せよ.
構造体 Point型は,double型の X座標と Y座標のメンバをもつ.
構造体 Point型を使用して,原点からの距離を求める関数 length_vector_pを作成する.
ただし,「構造体ポインタ変数」を利用すること.
構造体 Point型を使用して,平面の点を表示する関数 print_v_pを作成する.
ただし,「構造体ポインタ変数」を利用すること.
�A2次元平面上の点を表す構造体 Point 型を定義して,その点に関する計算を行うプログラムを作成したい.
以下のプログラムを基にして完成せよ.
構造体 Point型は,double型の X座標と Y座標のメンバをもつ.
構造体 Point型を使用して,平面の点を表示する関数 print_v_p2を作成する.
ただし,「構造体ポインタ変数」を利用すること.
構造体 Point型を使用して,平面の点を代入する関数 input_point_pを作成する.
ただし,「構造体ポインタ変数」を利用すること.
構造体ポインタ変数に対して,動的にメモリ領域を確保する. malloc を利用する.
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: visual stadio2008
[3.3] 言語: C
[4] 期限: 2008年11月13日
0611デフォルトの名無しさん
2008/11/11(火) 21:21:25前者でお願いします
0612デフォルトの名無しさん
2008/11/11(火) 21:25:52とりあえず(1)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8007.txt
0613デフォルトの名無しさん
2008/11/11(火) 21:52:31n 個の正数は a[] に入力されているとして。
#include <stdio.h>
int gcd(int x, int y)
{
int r;
if (x < y) {
int t = x; x = y; y = t;
}
do {
r = x % y; x = y; y = r;
} while (r != 0);
return x;
}
int main(int argc, char *argv[])
{
int a[] = { 121, 11, 14641, 1331};
int n = 4;
int i, g;
g = a[0];
printf("gcd(%d", a[0]);
for (i = 1; i < n; i++) {
printf(", %d", a[i]);
g = gcd(g, a[i]);
}
printf(") = %d\n", g);
return 0;
}
0614デフォルトの名無しさん
2008/11/11(火) 21:57:28[2] 問題文(含コード&リンク):
5つの数値を入力し(繰り返し入力)し、最大値を表示する。
[3] 環境
[3.1] OS: Windowsvista
[3.2] VC 6.0等
[3.3] 言語: C
[4] 期限: 今日までなのでよろしくお願いします
[5] その他の制限:繰り返し文しかならってないです。
0615デフォルトの名無しさん
2008/11/11(火) 21:59:13>>614
#include<stdio.h>
int sori(int x, int y)
{
if( x>=y ) return(x);
return(y);
}
int main(void)
{ int a,b,c,d,e,max;
while ( scanf("%d%d%d%d%d",&a,&b,&c,&d,&e)==5) {
max=a;
max=sori(max,b);
max=b;
max=sori(max,c);
max=c;
max=sori(max,d);
max=d;
max=sori(max,e);
printf("%d %d %d %d %d",a,b,c,d,e);
printf("max=%d\n",max);
}
return (0);
}
0616デフォルトの名無しさん
2008/11/11(火) 22:00:00>>615
エラーメッセージ
エラー E2209 kadai6-1.cpp 1: インクルードファイル 'stdio.h' をオープンできない
エラー E2268 kadai6-1.cpp 9: 未定義の関数 'scanf' を呼び出した(関数 main() )
エラー E2268 kadai6-1.cpp 18: 未定義の関数 'printf' を呼び出した(関数 main()
上記のようなプログラムを自分で作ったのですが、
上に記したようなエラーメッセージが表示されてしまいました。
これ以上わかりません。どうかよろしくお願いします。
0617デフォルトの名無しさん
2008/11/11(火) 22:09:48Linux だとちゃんとコンパイルできるから、ワークスペース作ってないとかの問題じゃないの?
以下の行を削除すれば、一応目的は達成できるぞ
max=b;
max=c;
max=d;
0618デフォルトの名無しさん
2008/11/11(火) 22:17:17試してみます。どうもありがとうございました。
0619デフォルトの名無しさん
2008/11/11(火) 22:23:31「配列または、ポインタでない変数に添字が使われました」って怒られたんですが
どう直せばいいでしょうか?
0620デフォルトの名無しさん
2008/11/11(火) 22:24:070621デフォルトの名無しさん
2008/11/11(火) 22:25:410622デフォルトの名無しさん
2008/11/11(火) 22:28:280623619
2008/11/11(火) 22:29:25ありがとう!
0624デフォルトの名無しさん
2008/11/11(火) 22:30:240625デフォルトの名無しさん
2008/11/11(火) 22:33:020626604
2008/11/11(火) 22:36:08素早い対応ありがとうございます。
すいません、問題文のとおりプログラムは1つだけなんです。
つまり、freqency.cを拡張して、横に伸びるグラフと縦に伸びるグラフを
同時に表示したいのです・・・。
605の方を別に作って試してみましたが、縦のグラフは表示できました。
(上の方で1つずつ空白分がずれるのは仕様でしょうか?)
604は、元のプログラムの出力部の変更のみで表示できました。
が、605と一緒にしなければならないので、どうにか605の大文字と小文字の処理を604と
同じくしてできないかと困っています。
よろしければ検討をお願いしたいです。
0627デフォルトの名無しさん
2008/11/11(火) 22:38:57http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8008.txt
違う人だけど。
0628デフォルトの名無しさん
2008/11/11(火) 22:42:40http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8009.txt
0629デフォルトの名無しさん
2008/11/11(火) 22:51:200630お願いします
2008/11/11(火) 23:23:42[2] 問題文(含コード&リンク):
複素数a,bを標準入力から入力し、それぞれの絶対値を求め、2つの複素数の和、差、積、商を求め
標準出力に出力するプログラムを作りたい。これらを求める関数として、複素数の絶対値を求める関数
および和、差、積、商を求める関数が
double cabs(struct mycomplex)
struct mycomplex wa(struct mycomplex,struct mycomplex)
struct mycomplex sa(struct mycomplex,struct mycomplex)
struct mycomplex seki(struct mycomplex,struct mycomplex)
struct mycomplex shou(struct mycomplex,struct mycomplex)
として作ることにした。これらの絶対値、和、差、積と商を求める関数を解答せよ
なおこの構造体は予めCの処理系には用意されているが、それを利用せず独立に考えよ。
[3] 環境
[3.1] OS: Windows
[3.2]
[3.3] 言語: C
[4] 期限: 11月16日まで
[5] その他の制限:構造体の問題です 問題文に沿ってお願いします。
0631604,626
2008/11/11(火) 23:23:58一部重複箇所(横グラフが2つ出ました)がありましたので、それを修正した上で
実行したところ、結果が得られました。
>>628
こちらも正しい結果が得られました。
627さんのプログラムは使われた文字のみの出力、
628さんのプログラムは全てのアルファベットについての出力が確認できました。
もう一度しっかり目を通した上で使わせていただきたいと思います。
レスからわずか10分足らずでの迅速な対応、本当にありがとうございます。
0632お願いします
2008/11/11(火) 23:25:43#include<stdio.h>
#include<math.h>
struct mycomplex {double re;
double im;};
int main()
{struct mycomplex a,b;
struct mycomplex wa(struct mycomplex,struct mycomplex);
struct mycomplex sa(struct mycomplex,struct mycomplex);
struct mycomplex seki(struct mycomplex,struct mycomplex);
struct mycomplex shou(struct mycomplex,struct mycomplex);
double cabs(struct mycomplex);
struct mycomplex cinput(void);
void cprint(struct mycomplex);
a=cinput(); b=cinput();
cprint(wa(a,b)); cprint(sa(a,b)); cprint(seki(a,b)); cprint(shou(a,b));
printf("絶対値 cabs(a)=%f\n",carbs(a)); printf("絶対値 cabs(b)=%f\n",cabs(b));}
struct mycomplex cinput(void)
{struct mycomplex z;
scanf("%f %f",&z.re,&z.im);
return z;}
void cprint(struct mycomplex z)
{ printf("複素数 = %f + i*%f\n",z.re,z.im);}
0633大輔
2008/11/12(水) 00:18:51[2] 問題文(含コード&リンク):下に示すような九九の表を表示するプログラムを作成しなさい
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:VC 6.0
[3.3] 言語:C++
[4] 期限:2008年11月14日15:00まで
[5] その他の制限:printf,scanf,if,switch,程度の関数しか習っていません。for文の入れ子(二重のforループ)を使う。フォーマットをそろえるには、書式指定文字列(変換仕様)を利用。
1 2 3 4 5 6 7 8 9
1 1 2 3 4 5 6 7 8 9
2 2 4 6 8 10 12 14 16 18
3 3 6 9 12 15 18 21 24 27
4 4 8 12 16 20 24 28 32 36
5 5 10 15 20 25 30 35 40 45
6 6 12 18 24 30 36 42 48 54
7 7 14 21 28 35 42 49 56 63
8 8 16 24 32 40 48 56 64 72
9 9 18 27 36 45 54 63 72 81
0634デフォルトの名無しさん
2008/11/12(水) 00:26:39#include <stdio.h>
main()
{
int i, j;
for(i = 0; i < 10; i++) {
for(j = 0; j < 10; j++)
if (i == 0)
if (j == 0)
printf(" ");
else
printf("%2d ", j);
else if (j == 0)
printf("%d ", i);
else
printf("%2d ", i * j);
printf("\n");
}
}
0635デフォルトの名無しさん
2008/11/12(水) 00:35:49void main(){
printf(" ");
for(i=0; i<10; i++){
printf(" %2d", i);
}
printf("\n");
for(i=1; i<10; i++){
printf("%d", i);
for(j=0; j<10; j++){
printf(" %2d", i*j)
}
printf("\n");
}
}
0637デフォルトの名無しさん
2008/11/12(水) 00:39:11void main(){
printf(" ");
for(i=1; i<10; i++) printf(" %2d", i);
printf("\n");
for(i=1; i<10; i++){
printf("%d", i);
for(j=1; j<10; j++) printf(" %2d", i*j)
printf("\n");
}
}
0638デフォルトの名無しさん
2008/11/12(水) 00:41:400639デフォルトの名無しさん
2008/11/12(水) 00:47:29[2] 改行を含む文字を受け取るにはどうすればいいんでしょうか?getを使えばスペースを含む文字を変数に書き込めるのは分かったんですが、改行を含む文字を書き込む方法が分かりません。
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン: ごめんよく分からない。でも使っているのはMicrosoftからダウンロードしたVisual C++
[3.3] 言語: C++
[4] 期限2008/11/15
[5] その他の制限: 無し
0640デフォルトの名無しさん
2008/11/12(水) 00:48:35getsのこといってんだろうか・・・・・・・・
fgetsを使えばいんじゃね?
0641デフォルトの名無しさん
2008/11/12(水) 01:23:17[2] 問題文(含コード&リンク):指定したファイルを読み込み開放番地法でのハッシュ表を生成し、
(i) 線形探査法
(ii) 二重分散法
に基づいた探索関数を作成せよ。
(i),(ii)の探索関数を用いて任意の値
(a) 表中に存在するキー 100個
(b) 表中に存在しないキー 100個
について連続で探索し、総探査回数、総実行時間を記録する。(一部略)
[3] 環境
[3.1] OS: Linux
[3.2] gcc
[3.3] 言語: C
[4] 期限: 11月12日21時迄
http://www1.axfc.net/uploader/He/so/157773 (pass: jik1)
↑中身は問題原文、指定されたファイル、自分で作成したプログラムソースです
対象ファイルの中身が文字列なので探索にstrcmpを用いようとしたのですが、実行時にエラーが出てしまってどうすればいいかわからない状態です
よろしくお願いします
0642デフォルトの名無しさん
2008/11/12(水) 01:29:27[2] 問題文:5人の学生の3教科の点数(0~100点)をランダムに表示させる。
それぞれの合計点を計算し、合計点の高い順に順位をつける。
[3] 環境
[3.1] WindowsXP
[3.2] gcc 3.4
[3.3] C
[4] 期限:なし
どなたかおねがいします…orz
0643デフォルトの名無しさん
2008/11/12(水) 02:06:34http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8011.c
0644デフォルトの名無しさん
2008/11/12(水) 02:08:180645デフォルトの名無しさん
2008/11/12(水) 02:29:43ありがとうございます
聞きたいんですが、a[]にn個の整数が入ってるとしてって所なんですけど、どうやって定義したんですか?
0646デフォルトの名無しさん
2008/11/12(水) 04:48:09int a[] = { 121, 11, 14641, 1331};
0647デフォルトの名無しさん
2008/11/12(水) 05:36:33[2] 問題文(含コード&リンク):
S=1+2+・・・n<100
を満たす最大の自然数nとSを出力するプログラムを作成してください。
for文とwhile文を用いたのをそれぞれ作成すること。
考え方:ループを用いて1から順に自然数を足して行き、
和が100を段階で計算を打ち切るようにプログラムする
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: (gcc バージョンは最新
[3.3] 言語: C
[4] 期限: 今日
[5] その他の制限:変数とハローワールドとscanf、条件文しかならってないはず
期限が近い・・・よろしくお願いします
0648デフォルトの名無しさん
2008/11/12(水) 06:06:08#include <stdio.h>
main()
{
int S = 0, n;
for(n = 1; S + n < 100; n++){
S += n;
}
n--; // 足しすぎたので 1 引く
printf("n:%d S:%d\n", n, S);
S = 0;
n = 1;
while(S + n < 100){
S += n;
n++;
}
n--;
printf("n:%d S:%d\n", n, S);
}
0649デフォルトの名無しさん
2008/11/12(水) 06:14:44なるほど・・・条件にS<100だから105しかでてこなかったのか俺・・・。
ありがとうございまいした、勉強になりました
0650デフォルトの名無しさん
2008/11/12(水) 08:00:09[2] 問題文(含コード&リンク):
ブレゼンハムのアルゴリズムを用いて、ウインドウ内に線分を描画するプログラムを作成しなさい。
仕様1(マウスの左ボタンと右ボタンを使用する。候補線の表示は無し。)
マウスの左ボタンクリック 線分の始点座標の指定
マウスの右ボタンクリック 線分の終点座標の指定及び線分の描画
[3] 環境
[3.1] OS:vista
[3.2] コンパイラ名とバージョン:VC++ 2008
[3.3] 言語: C
[4] 期限: 2008年11月12日まで
[5] その他の制限: ライブラリの点を描画するAPI関数を使って線分を引くこと。直線を引くAPI関数を使ってはならない。
Cは簡単なものしかやったことなくて全く分かりません
誰か助けてくださいお願いします……
0651デフォルトの名無しさん
2008/11/12(水) 08:16:500652デフォルトの名無しさん
2008/11/12(水) 08:29:43�@
/* (x,y)-平面の点を座標で表す構造体 */
struct Point {
double x;
double y;
};
/* 原点からの長さを求める関数 */
double length_vector_p(struct Point *p)
{
return sqrt(p->x*p->x + p->y*p->y);
}
/* 平面の点を表示する関数 */
void print_v_p(struct Point *p)
{
printf("%f %f\n", p->x, p->y);
}
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(&p); /* print_v_pを使用して,座標の表示 */
printf("The length of vector: %f\n", length_vector_p(&p) );
return 0;
}
0653デフォルトの名無しさん
2008/11/12(水) 08:32:46struct Point {
double x;
double y;
};
void input_point_p(struct Point *p){
printf("X:");
scanf("%lf", &p->x);
printf("Y:");
scanf("%lf", &p->y);
}
void print_v_p2(struct Point *p){
printf("%f %f\n", p->x, p->y);
}
int main(void){
struct Point *p; /* 構造体ポインタ変数 p */
int num, i;
printf("Input number of vector: ");
scanf("%d", &num);
for (i=0; i< num; i++) {
p = malloc(sizeof(struct Point)); /* malloc を使って領域確保 */
if( p == NULL ) {
printf( "memory cannot alloc!\n" );
exit( 1 );
}
input_point_p(p); /* 関数を使って要素を代入 */
print_v_p2(p); /* 関数を使って要素の表示 */
free(p); /* メモリの解放 */
}
return 0;
}
0654デフォルトの名無しさん
2008/11/12(水) 08:38:01期限は12日じゃなくて19日まででした……
0655デフォルトの名無しさん
2008/11/12(水) 10:13:51ありがとうございます!
0656デフォルトの名無しさん
2008/11/12(水) 11:27:53ライブラリって何の?
専用のをつかってるならそれもうp
0657デフォルトの名無しさん
2008/11/12(水) 13:21:110659デフォルトの名無しさん
2008/11/12(水) 13:24:12[2] 問題文(含コード&リンク)
マイナスの値が入力されるまで繰り返し整数値を入力し最大、最小を求める。
初期化で最大値には最小の値を、最小値には最大の値を設定しておく。
繰り返しにはwhile文を使用する。
[3] 環境
[3.1] OS:Windows XP
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 2008年 11月14日 18時
[5] その他の制限: 特になし
よろしくお願いします
0660デフォルトの名無しさん
2008/11/12(水) 13:40:57渡されたプリントに書いてあったまんまなんで、自分でも良くわかりません……
授業ではC言語はおろかPCにすら触ってません
0661デフォルトの名無しさん
2008/11/12(水) 13:59:59単に授業を聞いてなかったとかサボってたとかじゃなくて?
何の前説もなしにそのプリントをぽんと渡されただけなら行く学校を間違えたな
たぶん、説明はあったのに理解できなくてスルーしただけだろうけど
0662デフォルトの名無しさん
2008/11/12(水) 14:05:51#include <stdio.h>
int main (void)
{
int n, min=32767, max=0;
while(1){
scanf("%d", &n);
if(n<0)
break;
if(n > max)
max = n;
if(n < min)
min = n;
}
printf("min = %d, max = %d\n", min, max);
return 0;
}
0663デフォルトの名無しさん
2008/11/12(水) 14:11:44' ' とか '■' とか '○' マルチバイト文字を扱うのが面倒
' ' とか '*' とか 'o' でよかったらそんなにかからないけど
0664デフォルトの名無しさん
2008/11/12(水) 14:47:40>>662 + 初期値可変入力
#include <stdio.h>
int main( void )
{
int i, n;
int imin, imax;
int nmin, nmax;
printf( "最小値の最大を入力してください>" );
scanf( "%d" , &imin ); /* 数値の入力 */
printf( "最大値の最小を入力してください>" );
scanf( "%d" , &imax ); /* 数値の入力 */
nmin=imin;
nmax=imax;
while (1) {
printf( "数値を入力してください>" );
scanf( "%d" , &n ); /* 数値の入力 */
if ( n < 0 ) /* 終了 */
{ printf( "終了\n" );break;}
if ( n < imin ) /* 最小値 */
{ nmin= n;}
if ( imax < n ) /* 最大値 */
{ nmax= n;}
}
printf(" 最小:%d\n", nmin);
printf(" 最大:%d\n", nmax);
}
0665デフォルトの名無しさん
2008/11/12(水) 14:54:11授業が元々コンピュータでの画像の描画方法についてなんです
今までプログラムなんて一切なしでアルゴリズム?みたなのを学んでて
いきなりレポートの概要渡されました
授業は毎回出てますし、ノートも取ってます
それに居眠りとか出来る状況じゃないので
説明はあったんですが、それまでの知識じゃ全く理解できませんでした
0666デフォルトの名無しさん
2008/11/12(水) 15:03:29ヒントだけとかでもいいので・・・orz
0667デフォルトの名無しさん
2008/11/12(水) 15:39:48調べたい整数の数を
を選べるようにするにはどうすればいいの?
0668639
2008/11/12(水) 15:46:44あ、すいません。
getsの間違いでした。
fgets…使ってみたんですが、エラーが出ました。
今作っているソースは
#include<stdio.h>
#include<iostream>
#include<string>
using namespace std;
int main(){
char filename[20], time[100], data[1000000];
FILE *fp;
cout<<"CPUtime?"<<endl;
gets(time);
cout<<"data?"<<endl;
gets(data);
fp = fopen("file.txt","w");
fprintf(fp,"%s\n",time);
fprintf(fp,"%s",data);
fclose(fp);
}
で、本当は「file.txt」ってなってるファイル名を、キーボードから受け取るようにして(filenameとは宣言したものの…)
dataに、
「 0 1.99400005840289e-007 -1.99400005840289e-007 9.89100023673223e-014 2.63400000595493e-012
1e-011 1.99400005840289e-007 -1.99400005840289e-007 9.89000006022811e-014 2.63400000595493e-012
2e-011 1.99400005840289e-007 -1.99400005840289e-007 9.89100023673223e-014 2.63400000595493e-012
4.000015229e-011 1.99400005840289e-007 -1.99400005840289e-007 9.89299991211411e-014 2.63400000595493e-012
…」みたいな改行を含んだ文字をコピーして実行画面(コマンドプロンプト)に貼り付けてテキストファイルを作りたいんですがよく分かりません。
0669デフォルトの名無しさん
2008/11/12(水) 15:48:54調べたい整数をユーザに入力させたい、ってとこか?
それならこんなかんじ。
int main(int argc, char *argv[])
{
int *a;
int n, i, g;
printf("調べたい整数の数は?: ");
scanf("%d", &n);
a = malloc(n * sizeof(int));
for (i = 0; i < n; i++) {
printf("%d 個目の整数を入力してください: ", i+1);
scanf("%d", &a[i]);
}
g = a[0];
--- >>613 と同様 --
free(a);
return 0;
}
0670デフォルトの名無しさん
2008/11/12(水) 16:01:12解答あり
>>600の(2)できる方おねがいします
0671デフォルトの名無しさん
2008/11/12(水) 16:10:20それでお願いできますか?
0672デフォルトの名無しさん
2008/11/12(水) 16:14:23理解できなかったのならなぜ質問しなかったのだろう?
その感じだと実際に動作するコードを書くのではなく
アルゴリズムや疑似コードをレポートにして提出しろってことなのか?
0673デフォルトの名無しさん
2008/11/12(水) 16:19:45余計なお世話だけど、 time って関数があるから time という変数名は避けたほうがいいかも。
fp = fopen("file.txt", "w");
fprintf(fp, "%s\n", time);
while (fgets(data, sizeof(data), stdin) != NULL) {
fprintf(fp, "%s", data);
}
fclose(fp);
とすれば、Ctrl-D を入力するまで読み取り続けます
0674デフォルトの名無しさん
2008/11/12(水) 16:21:11よく考えたら、表示のときだけマルチバイト文字使って、内部データは
普通の int とか char とか好きなので行けるわ
もう一点確認だけど、どっちからどっちに球が飛んでいけばいいの?
0675デフォルトの名無しさん
2008/11/12(水) 16:22:19「俺の脅迫のおかげで家から出れなくした。俺の手柄だ!」
「昼間は市役所のパトロール隊を使う。夜は消防団を使う。」
「●指導●じゃない、パトロールを●お願い●してるだけだ。人権侵害行為は俺の責任じゃない!」
熊本隆談www
0676デフォルトの名無しさん
2008/11/12(水) 16:23:34: In function ‘main’:
:22: 警告: incompatible implicit declaration of built-in function ‘malloc’
:24:8: 警告: 不明なエスケープシーケンス '\$'
だそうです
0677デフォルトの名無しさん
2008/11/12(水) 16:29:14#include <stdlib.h> を追加。
それから
a = (int *)malloc(n * sizeof(int));
と、キャストしたほうがいいかも。
下のは知らん。日本語の文字列が正しく読まれてないのかもしれない。
適当に文字列を半角英数字のみにしてみて。
0678デフォルトの名無しさん
2008/11/12(水) 16:36:381.から100までの整数で3の倍数の整数の合計を求めるプログラムをFor文を利用して作ってください。
2.1の問題をForの変わりにWhile文で頼みます。
余裕があれば、
3.タクシー料金:最初の2kmまで650円 以後400mごとに90円としたとき、乗車距離(km)を入力し、
料金求める。
おねがいします。
0679デフォルトの名無しさん
2008/11/12(水) 16:41:59テストぐらい自分でやれ!
0680デフォルトの名無しさん
2008/11/12(水) 16:42:11/*1.*/
#include <stdio.h>
int main(void){
int i, sum = 0;
for(i = 1; i <= 100; i++){
if (i % 3 == 0) sum += i;
}
printf("合計は %d\n", sum);
}
/*2.*/
#include <stdio.h>
int main(void){
int i = 1, sum = 0;
while(i <= 100){
if (i % 3 == 0) sum += i;
i++;
}
printf("合計は %d\n", sum);
}
/*3.*/
#include <stdio.h>
int main(void){
double kyori;
int ryokin;
printf("乗車距離(km): ");
scanf("%lf", &kyori);
if (kyori < 2) ryokin = 650;
else ryokin = 650 + (kyori / 400) * 90;
printf("料金は %d円です。\n", ryokin);
}
0681639
2008/11/12(水) 16:43:13ありがとう!ありがとう!改行文字も出来ました。
でもCtrl-Dを入力せずに、貼り付けた文字の最後まで行ったら自動で終了するのは出来ないんでしょうか?
>>668に書いた数値データ、何百行もあるのですが、最後の行まで読み込んだら終了させたいです。
0682デフォルトの名無しさん
2008/11/12(水) 16:59:53出来ました!
マジでありがとうございます
0683デフォルトの名無しさん
2008/11/12(水) 17:02:22何をもって読み込みを終了するかが決められないからムリかな。
>>673 のコードでは、EOF (Ctrl-D) をもって終了としてるから、たとえば
echo "cputime\ndata1\ndata2" | ./a.out
などとすることは可能。
しかし一体何をしたいんだ?
その数値データはテキストファイルに保存されてるの?
それなら CPUtime だけを入力して、数値データはそのテキストファイルから読み取ればいいわけだけど。
0684デフォルトの名無しさん
2008/11/12(水) 17:09:50ラスト10min
ありがとう。たすかりました。
0685639
2008/11/12(水) 17:14:19<<しかし一体何をしたいんだ?
これ、大学の数値実験で出た何百行もの値(SPICEっていう電気回路のCADツールを使って出た値)で、この数値をコピーして、gnuplotでグラフを書きたいんだ。
�@SPICEからデータ(数値)をコピーして取り出す。
�Aテキストファイルに貼り付ける。
�B作成したテキストファイルからgnuplotでグラフを描く。
この一連の作業をプログラムで作りたかったんだ…。
一応数値データも要るので、gnuplotに直接書き込んで終了という訳にもいかず、テキストファイルも残したいんです。
0686デフォルトの名無しさん
2008/11/12(水) 17:29:19>>586さんのいうとおりisalphaとtoupperを使えばいいのはわかっているんですが、
どうやってそれをソースに書きかえればいいのかまったくわからないので困っています。
今日が締切なのでお願いします。
0687デフォルトの名無しさん
2008/11/12(水) 17:44:51亀ですが>>592の方ありがとうございました
嫌いと言いながらやってくれる優しさに惚れた
また明日結果報告させて頂きます
0688デフォルトの名無しさん
2008/11/12(水) 17:46:37「直行座標系X-Yにより定められている平面上で、0 < X,Y < 1の正方領域をX,Y方向にそれぞれ(n1 - 1)個、(n2 - 1)個に等分割して、その座標を出力する。」
自分で、以下のようなプログラムを作ってみました。
#include<stdio.h>
#define n1 7
#define n2 7
int main(){
double X[n1], Y[n2];
int i, j;
for(i = 0; i < n1; i++){
*(X + i) = ((1 / (n1 - 1)) * (double)i);
}
for(i = 0; i < n2; i++){
*(Y + i) = ((1 / (n2 - 1)) * (double)j);
}
for(i = 0; i < n1; i++){
for(j = 0; j < n2; j++){
printf("(%lf, %lf) ", *(X + i), *(Y + j));
}
printf("\n");
}
}
すると、(0.0000000, 0.0000000)の座標で埋め尽くされてしまいました…
玄人の皆様、お助け下さい…
0689デフォルトの名無しさん
2008/11/12(水) 17:53:04double にキャストする位置がおかしい。
- *(X + i) = ((1 / (n1 - 1)) * (double)i);
+ *(X + i) = (1.0 / (n1 - 1)) * i;
Y も同様。
0690デフォルトの名無しさん
2008/11/12(水) 17:53:461/(n1 -1) ← 分母分子ともに整数だと、整数の除算が行われるから
1.0/(n1 - 1) とか 1/(n1 - 1.0) とか、どっか double にしないと暗黙の型変換は起こらない
あと
*(Y + i) = ((1 / (n2 - 1)) * (double)j); ← i でループ回してるんだkら (double)j じゃなくて i だな
0691デフォルトの名無しさん
2008/11/12(水) 18:08:49どうもありがとうございます、そういうことなのですか(^^;
皆さんに教わらなければ、多分あと2日くらいは悩んでたと思います。
また質問させて頂く時もあるかと思いますので、その時はまたよろしくお願いします。
0692デフォルトの名無しさん
2008/11/12(水) 19:05:39[2] 問題文: 10個のデータをキーボードから適当に入力し(ランダムなデータ),1次元配列に格納する.
バブルソート法により,小さい順に並べ替えるプログラムを作成しなさい.
結果をソートの経過を全てprintfで表示すること.
[3] 環境
[3.1] OS:Windows Vista
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 2008年 11月19日 13時
[5] その他の制限: 関数やポインタはまだ習ってないです。よろしくお願いします。
0693デフォルトの名無しさん
2008/11/12(水) 20:29:20[2] 問題文(含コード&リンク):
0度から360度までのSin(x)の値を文字コード*を使ってグラフを表示するプログラムをC言語で作成せよ。
実行結果の例をアップローダーに貼り付けました。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8012.txt
[3] 環境
[3.1] OS: Windows XP
[3.2] コンパイラ名とバージョン: Microsoft Visual C++ 2005
[3.3] 言語: C
[4] 期限: 2008年11月13日
[5] その他の制限: ファイルの入出力まで習いました。
よろしくお願いします。
0694デフォルトの名無しさん
2008/11/12(水) 20:30:58まだ間に合うのかな
風向きとか、スキルとかまだ実装してないけど、イメージとしてこんな感じでよいの?
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8013.txt
0695デフォルトの名無しさん
2008/11/12(水) 20:35:13特に指定はされていませんので作りやすいもので結構です
0696694
2008/11/12(水) 20:56:48ちょっと改造して、いちおう2個のパラメータとるようにしてみたけど、
やっつけのきたねーコードだw
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8014.txt
0697デフォルトの名無しさん
2008/11/12(水) 21:24:45はい、大丈夫です
ありがとうございます!
0698デフォルトの名無しさん
2008/11/12(水) 21:48:47[2] wavファイル(音楽ファイル)を読み込んでFFTを施し、バンドパスフィルタをかけてIFFTし、そのwavファイルを出力せよ。(バンドパスの領域は任意)
[3] 環境
[3.1] OS: Windows
[3.2] 開発環境:VC++ 6.0
[3.3] 言語:C言語
[4]今月中
[5]制限なし
ただの授業なのですが、研究で使うレベルのプログラムなのでかなり難しいです↓
ただ原理としては簡単らしいのですが、wavを扱ったことがないのでチンプンカンプンです。
1週間ずっと考え続けても無理でした(ノД`)
どなたか手伝ってくれたら嬉しいです。
0699デフォルトの名無しさん
2008/11/12(水) 21:52:42>wavファイル(音楽ファイル)を読み込んでFFTを施し、バンドパスフィルタをかけてIFFTし、そのwavファイルを出力せよ。(バンドパスの領域は任意)
これだけで作れたらすごいわ
0700デフォルトの名無しさん
2008/11/12(水) 22:21:420701デフォルトの名無しさん
2008/11/12(水) 23:00:30(2)ですけどリスト構造に格納する際に、次数の大きい順にしておいて先頭から順に出力ということはなんとなく分かったのですがそこから進めない・・・
0702デフォルトの名無しさん
2008/11/12(水) 23:25:19どのあたりまでライブラリの使用を認められてるか書け
wavファイルの読み取りからやらされるのか?
0703デフォルトの名無しさん
2008/11/12(水) 23:38:30[2]組み合わせn Cm を計算する関数を作成しなさい.main関数にてキーボードから2つ?然数n,mを
読み込み後,作成した関数を呼び出しその動作を確認しなさい.
但し,以下の条件を満たすものを作成すること
�@2つの?然数は1回のscanfで読み込むこと.(データ区切りはスペース)
�Ascanfはmain関数側に実装すること.
�B入力はn mの並びにすること.
�C作成した関数側で「n>=mを満?しない時」,「n,mが?然数ではないとき」は n Cm =0とな
るようにしなさい.
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 2008年 11月中
[5] その他の制限:
�Cのいい作り方を思いつきません…
0704デフォルトの名無しさん
2008/11/12(水) 23:45:05if (n < m || n < 0 || m < 0) return 0;
ってするだけじゃないのか?
(自然数に0を含む感じになってます)
0705デフォルトの名無しさん
2008/11/13(木) 00:24:46∵ ∴ ∴∵∴ ∴
∴∵∴∵∴∵∴∵∴∵∴∵∴∴∵
∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵
∴∵∴∴∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵∴
∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵/ ⌒ヽ∴∵∴∵∴
∴∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵| | |∴∵∴∵
∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵∪ / ノ∴∵∴∵∴∵
.. ∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵| ||∵∴∵∴∵
.∴∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵∪∪∴∵∴∵∴∵
.∵∴∵∴∵∴∵∴∵:(・)∴∴.(・)∵∴∵∴∵∴∵∴∵∴∵∴∵∴
∵∴∵∴∵∴∵∴∵∴/ ○\∵∴∵∴∵∴∵∴∵∴∵∴
..∵∴∵∴∵∴∵∴∵/三 | 三ヽ∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵
. ∴∵∴∵∴∵∴∵ | __|__ │∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵ tanasinn
.∵∴∵∴∵∴∵∴∵| === │∵∴∵∴∵∴∵∴∵∴∵∴
.∵∴∵∴∵∴∵∴∵\___/∵∴∵∴∵∴∵∴∵∴∵∴
..∴∴∵/ ̄.. \∴∵∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵∴
∴∵∴/ ,. i ∵∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵
∴∵∴| /.| |.∵∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵
∵∴| | :| |.∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵∴
∴| | |::| |.∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵
∴| | |∵U∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵∴
| | |∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵
/ / / ∵∴∵∴∵∴∵∴∵∴∵ ∵
/ / / ∴∵∴∵∴ ∴
.しし’ ∵
0706639
2008/11/13(木) 01:23:09+ >>668 >>681 >>685
なんだけど、レスが無いので分からないorスルーになっているということだとは思いますが((´;ω;`))
最後に一つだけ質問お願いします。
>>673
の「Ctrl-Dを入力するまで読み取り続けます」なんですけど、「Ctrl+d(コントロールキー+d)」と入力しても「^d」と画面に出力されるだけで書き込みが終了しません。
「コントロール + D(大文字)」、「コントロール + マイナス + D」などなどあり得なさそうな入力も試しましたが、終了しませんでした。
僕は一体どうすれば?
アホな質問だったらごめんよぉ(´・ω・`)
0707デフォルトの名無しさん
2008/11/13(木) 01:24:48ctrl + z
にしてみろ
0708さそり
2008/11/13(木) 01:30:20[2] ファイルを読み込んで.hファイルに書き込むのが狙いなんですが
sample.txtテキストファイルの中身が
kina="mikan"+"momo"
shika="hidemaru"*100+"keiko"
と50行ぐらい続いていて左辺の値とダブルクオートくくりの
文字を抽出してsample.hに一文字取ったら改行して書き込んでいくのですが
どうしたらいいでしょうか??困っておりまして皆様のお力をお借り
したいと思っています。どうぞよろしくお願いします。
[3] 環境
[3.1] OS:ソラリス
[3.2
[3.3] 言語:C
[4] 期限:今週中
[5]
0709デフォルトの名無しさん
2008/11/13(木) 01:46:000710デフォルトの名無しさん
2008/11/13(木) 01:47:170711デフォルトの名無しさん
2008/11/13(木) 02:18:46すみません。。
これ以上どう詳しく書いたらいいのかわかりません(ノД`)
>>700
窓関数はなんでもいいです。
おそらくハミングが一番いいのかと思ったのですが…
>>702
やり方は自由です。
とにかく動いたらいいのでライブラリの制限はありません。
はい。。wavの読み取りからやらないといけません。
まずそこから躓いています。
wavファイルを一次元配列に格納することはできたのですが(たぶん…)、
それをどう処理すべきかがわかりません。
悪戦苦闘して調べまくったのですが、なかなかできず、ここに助けにもらいに来た次第です。
0712デフォルトの名無しさん
2008/11/13(木) 03:15:24[2]ユーザが調べたい整数n個の数の最小公倍数を求めよ
手順は、もし、ユーザが12と8と9と48のLCMを調べたい時
�@LCM(12,8)=24
�ALCM(LCM(12,8),9)=LCM(24,9)=72
�BLCM(LCM(12,8),9),48)=LCM(72,48)=144
といった形である
これを調べたい数を自由に変えることができ、尚且、ユーザが調べたい整数の個数でも対応出来るように作れ
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 今日の23時59分
[5] その他の制限:
お願いします
0713デフォルトの名無しさん
2008/11/13(木) 04:36:55http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8015.c
0714デフォルトの名無しさん
2008/11/13(木) 06:43:21その入力例に対する出力の例を書け
日本語そのまま取ると sample.h は
m
i
k
a
n
m
o
n
o
h
i
d
e
m
:
になるがよいのか?
0715デフォルトの名無しさん
2008/11/13(木) 08:40:37http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8016.txt
似たようなのは見つけたのですが・・・
0716デフォルトの名無しさん
2008/11/13(木) 10:50:18http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8017.c
一部余分なコードあり(コメントアウトで無効にしてある)
パスカルの三角形を使用しているため、階乗で求めるやり方ではない。
0717716
2008/11/13(木) 10:51:39もしていないんで、適当にnとmを受け継いだら結果を返す仕様に変更してちょっ。
0718587
2008/11/13(木) 11:01:08問題なく読み込めました
助かりました、有難うございます!
0719デフォルトの名無しさん
2008/11/13(木) 11:03:51http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8018.txt
0720デフォルトの名無しさん
2008/11/13(木) 12:01:00[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8020.txt
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン:VS2008
[3.3] 言語:C++
[4] 期限:2008年11月20日まで
よろしくお願いします。
0721デフォルトの名無しさん
2008/11/13(木) 12:01:07hhh.c: In function ‘main’:
hhh.c:29: 警告: ignoring return value of ‘realloc’, declared with attribute warn_unused_result
というエラーがでました……
0722デフォルトの名無しさん
2008/11/13(木) 12:11:27gcc -Wall (チェックが厳しいオプション) でコンパイルしても出て何もこないぞ
それにそれはエラーじゃなくて警告
0723デフォルトの名無しさん
2008/11/13(木) 12:32:33#include <stdio.h>
int main()
{
FILE *fp;
char *p, buf[256];
int lhs, in_quote;
fp = fopen("sample.txt", "r");
if (fp == NULL) {
printf("Cannot open sample.txt\n");
return 1;
}
while(fgets(buf, 256, fp) != NULL) {
lhs = 1;
in_quote = 0;
for(p = buf; *p != '\0'; p++)
if (*p == '=')
lhs = 0;
else if (*p == '"')
if (in_quote)
in_quote = 0;
else
in_quote = 1;
else if (lhs || in_quote)
printf("%c\n", *p);
}
}
0724デフォルトの名無しさん
2008/11/13(木) 12:35:530725デフォルトの名無しさん
2008/11/13(木) 12:37:180726デフォルトの名無しさん
2008/11/13(木) 13:23:00[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン:Visual C 2008
[3.3] 言語:C
[4] 期限:明日まで
七個の文字列の長さ(文字数)をカウントして、文字列とともに表示せよ。
ただし、ポインタを使用して処理すること
カウントの仕方がわかりません・・・
お願いします。
例
#include<stdio.h>
int main(){
char *name[] ={"Izumi","Kanto","Kudo","Sato","Sugawara","Matuda","Wada",NULL};
0727デフォルトの名無しさん
2008/11/13(木) 13:27:10#include<stdio.h>
int main(){
char *name[] ={"Izumi","Kanto","Kudo","Sato","Sugawara","Matuda","Wada",NULL};
char *p;
int i, n;
for(i = 0; i < 7; i++){
n = 0;
for(p = name[i]; *p != '\0'; p++)
n++;
printf("%s:%d\n", name[i], n);
}
return 0;
}
0728デフォルトの名無しさん
2008/11/13(木) 13:27:32>>722 じゃないが
先に進めないってどういうことだよ?
ロードモジュールはできているはずだ。
0730デフォルトの名無しさん
2008/11/13(木) 13:43:340731デフォルトの名無しさん
2008/11/13(木) 13:49:12ありがとうございます!
*p != '\0'が何を表してるのか教えてくれるとありがたいです!
0732デフォルトの名無しさん
2008/11/13(木) 13:53:03文字列の最後=¥0だから それをみている
0733727
2008/11/13(木) 13:54:39Cの標準的な約束事で、文字列の配列の最後の文字の次に '\0'(NULL文字)を置くことになっている。
*p != '\0' は、文字の終りに来ていない間繰り返すという意味
*p はポインタ p が指している値(文字)だっていうのはいいんだよね?
0734デフォルトの名無しさん
2008/11/13(木) 14:03:03丁寧な説明ありがとうございます!
'\0'はNULL文字のことなんですね!
やっとわかりました。
0735デフォルトの名無しさん
2008/11/13(木) 14:14:25それだけかよw
0736デフォルトの名無しさん
2008/11/13(木) 14:26:23たった今動きました
こちらの凡ミスだったようです。申し訳ございません
ですが、今度はinput >が限りなく続いて終わらないです……
というより、結果がでてもプログラムが終了しないのです
0737デフォルトの名無しさん
2008/11/13(木) 16:23:25[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8023.txt
[3] 環境
[3.1] OS:WindowsXP
[3.2] gccなど
[3.3] 言語:Cのみ
[4] 期限:11月17日まで
[5] その他の制限
特に無いですが、角度が45度から増大していく現象の原因が分かれば大丈夫です。
dtの値を小さくすることで誤差は小さくなりますが、ルンゲクッタ法としては
おかしい(精度的に)と思うので・・・。よろしくお願いします。
0738デフォルトの名無しさん
2008/11/13(木) 17:13:59g1=dt*q(X0,v);
f2=dt*f(X0+f1/2.0,v+g1/2.0);
g2=dt*q(X0+f1/2.0,v+g1/2.0);
f3=dt*f(X0+f2/2.0,v+g2/2.0);
g3=dt*q(X0+f2/2.0,v+g2/2.0);
f4=dt*f(X0+f3,v+g3);
g4=dt*q(X0+f3,v+g3);
X0+=(f1+ 2.0*f2 +2.0*f3+ f4)/6.0;
v+=(g1+ 2.0*g2+ 2.0*g3+ g4)/6.0;
0739デフォルトの名無しさん
2008/11/13(木) 17:14:34return -g*sin(X0)/l;
}
double f(double X0, double v){
return v;
}
0740デフォルトの名無しさん
2008/11/13(木) 18:58:45http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8025.c
最初に入力する数値の個数を決める仕様に変更。callocを使用。
0741デフォルトの名無しさん
2008/11/13(木) 19:00:03ttp://www.bohyoh.com/CandCPP/C/Library/calloc.html
> その領域は、すべてのビットが0で初期化される。
0742デフォルトの名無しさん
2008/11/13(木) 19:09:45もっと厳しくして見やがれ
0743デフォルトの名無しさん
2008/11/13(木) 19:26:38結果だけでよいなら領域確保必要すらないよな
main()
{
int l = 1, n;;
while(1){
printf("数値を入力してください:");
scanf("%d", &n);
if(n == 0)
break;
l = lcm(l, n);
}
printf("最小公倍数は %d です。\n", l);
}
↑lcm は >>740 と同じものを利用、'0' 入力で入力終了。
0744デフォルトの名無しさん
2008/11/13(木) 19:30:27ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8026.c
0745デフォルトの名無しさん
2008/11/13(木) 21:36:51もし数字以外、小数を入力した場合など、自然数に該当しないものが入力されたらって言うなら
文字列として厳密に判別する仕組みを取り込んで、条件をクリアしたらatoi()でint型に
代入するとか。
0746デフォルトの名無しさん
2008/11/13(木) 22:44:18お礼が遅れてすみません・・・
早い返答ありがとうございました
0747デフォルトの名無しさん
2008/11/13(木) 23:52:14未解決問題ってどれ?
0748デフォルトの名無しさん
2008/11/14(金) 00:17:13>>720
>>698
0749デフォルトの名無しさん
2008/11/14(金) 00:46:42>>692-693
0750デフォルトの名無しさん
2008/11/14(金) 01:13:30http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8028.c
0751さそり
2008/11/14(金) 01:16:07>>714
>>723
ご返信ありがとうございます。
テキストファイル読み込みをした後に.hファイルに
書式付で書き込むのですが.
たとえば
PIKA1="P_1"+"P_3"
CILA="L_SAM"*1000"ERIKA"
これが100行ぐらい続くファイルがあるとして
左辺の値とダブルクオートでくくられた文字を抽出して
.hファイルに書き込むのですが上記の場合だと
PIKA1,P_1,P_3
CILA,L_SAM,ERIKAをとりだして
P_MAN: PIKA
P_MAN: P_1
P_MAN: P_3
P_MAN: CILA
P_MAN: L_SAM
P_MAN: ERIKA
という形で.hファイルに出力させたいのです。
今非常に困っていましてどなたか助けてください。
どうぞよろしくお願いします。
なお左辺と右辺は必ず=で区切られています。
左辺の値はダブルクオートで区切られていない。
基本的に始まりのダブルクオートが見つかって、終わりのダブルクオート
が見つかった場合のくくり文字を抽出するようにする。
0752723
2008/11/14(金) 01:27:48P_MAN: ていうのがどっから湧いてきたのか不明だから無視したけど、
基本的には >>723 をちょこっと改造すればいける
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8029.txt
0753デフォルトの名無しさん
2008/11/14(金) 01:41:41#include<stdio.h>
#define ONELINE_MAX 1024
int xxx(FILE *fp_in, FILE *fp_out){
char oneline[ONELINE_MAX+1+1], word[ONELINE_MAX+1], quote[2];
int i, n;
while(fgets(oneline, sizeof(oneline), fp_in)){
for(i=0;;){
if(sscanf(&oneline[i], "%*[^\"]%n%1[\"]", &n, quote)==1) i+=n;
if(sscanf(&oneline[i], "\"%[^\"]%1[\"]%n", word, quote, &n)==2){
i+=n;
fprintf(fp_out, "P_MAN: %s\n", word);
}else if(sscanf(&oneline[i], "\"%1[\"]%n", quote, &n)==1){
i+=n;
}else{
break;
}
}
}
return 0;
}
int main(void){
xxx(stdin, stdout);
return 0;
}
0754デフォルトの名無しさん
2008/11/14(金) 02:09:06「その」授業でPCに触れてないだけでは。
0755デフォルトの名無しさん
2008/11/14(金) 03:01:01ヌル文字(\0)って0と同じ扱いですか?
0=\0っていうことですか?
0756デフォルトの名無しさん
2008/11/14(金) 03:05:490757デフォルトの名無しさん
2008/11/14(金) 03:24:43まぁコードを参照する値は0ですな。
0758デフォルトの名無しさん
2008/11/14(金) 03:52:41'\123' == (char)0123とか他の値でも成り立つ。
0759デフォルトの名無しさん
2008/11/14(金) 04:14:530760デフォルトの名無しさん
2008/11/14(金) 04:35:390761デフォルトの名無しさん
2008/11/14(金) 05:41:32そのときに作って頂いたプログラミングで数箇所訂正部分を言われたのでその訂正をお願いします。
その指摘箇所とは2行目の(int *, int *, int *);の部分と26行目の*in_val, int *odd_tally, int *even、
そして35行目のint *oddと40行目のint *evenです。
作って頂いた方はCプログラミングと言っていたのでそれが問題なのではないかと思っています。
今自分が受講しているクラスはC++なのでどなたかそれ用に作り変えて頂けないでしょうか。
一応前回の問題なども載せておきます。
[1] 授業単元:C++
[2] 問題文: ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7970.txt
[3] 環境
[3.1] OS:XP
[3.2] コンパイラ名とバージョン: Visualstudio 2005
[3.3] 言語:C++
[4] 期限:2008年11月14日
何分初心者でわからないことが多いのでお手数ですがお願いします。
0762デフォルトの名無しさん
2008/11/14(金) 06:49:37こうかな
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8030.txt
0763デフォルトの名無しさん
2008/11/14(金) 07:17:37お早い返信助かります。
自分ではいまいち分からないのですがこれで提出させて頂きます。
何度もありがとうございます。
0764デフォルトの名無しさん
2008/11/14(金) 07:18:59ポインタ私を参照渡しに変えてるよ
入出力の部分をもうちょっと c++ っぽくするとこうなる
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8031.txt
0765デフォルトの名無しさん
2008/11/14(金) 07:40:00わざわざありがとうございます。
後者のほうが自分にも分かりやすかったのでそちらを使わせて頂きます。
お忙しい中本当にありがとうございます。
0766デフォルトの名無しさん
2008/11/14(金) 10:43:47[2] 問題文(含コード&リンク):
キーボードから整数を入力し,それを配列に順に代入し,その後,和と平均を求めるプログラムを作りなさい
-整数の入力は負の数が入力されたとき終了
・配列は最大100個までの入力に対応できるようにする
[3] 環境 Visual C++
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン: C++コンパイラ,リンカ
[3.3] 言語: C言語
[4] 期限: 2008年11月17日(月)までお願いします。
[5] その他の制限: main関数,文末記号,エスケープシーケンス,printf関数
逐次処理(順次処理)、条件分岐(選択処理)if,if-else,switch、
繰り返し(反復処理)while,do-while,for、演算子の複合演算子(+=,-=,*=,/=,%=)
インクリメント(++)デクリメント(--)、scanf関数、アドレス演算子(&)は習いました。
お願いします。
0767デフォルトの名無しさん
2008/11/14(金) 10:50:28#include <stdio.h>
int main(void){
int i, n, sum, a[100];
i = 0;
do {
scanf("%d", &a[i]);
} while(a[i++] >= 0 && i < 100);
n = i;
sum = a[0];
for(i = 1; i < n; i++) sum += a[i];
printf("和: %d, 平均: %lg\n", sum, (double)sum / (double)n);
return 0;
}
0768デフォルトの名無しさん
2008/11/14(金) 10:59:48#include <stdio.h>
int main()
{
int i, sum = 0, num[100], n = 0;
double ave;
for(i = 0; i < 100; i++){
printf("整数を入力:");
scanf("%d", &num[i]);
if(num[i] < 0)
break;
n++;
}
for(i = 0; i < n; i++)
sum += num[i];
ave = (double) sum / n;
printf("合計:%d 平均:%f\n", sum, ave);
return 0;
}
0769デフォルトの名無しさん
2008/11/14(金) 11:06:44大変助かりました。
本当に有難う御座いました。
0770デフォルトの名無しさん
2008/11/14(金) 11:08:40大変助かりました。
本当に有難う御座いました。
0771デフォルトの名無しさん
2008/11/14(金) 11:27:13[2] 問題文(含コード&リンク):
・初項a0で公差dの等差数列の一般項anは an = an-1 + d で表すことができる
・a0とdを入力し,a0〜a10までの各項を配列a[0]〜a[10]に求め,それを下の実行結果例のように表示するプログラムを作りなさい
実行結果例 数字は右揃えでお願いします。
a[ 1] = 1
a[ 2] = 1
a[ 3] = 2
a[ 4] = 3
a[ 5] = 5
a[ 6] = 8
a[ 7] = 13
a[ 8] = 21
a[ 9] = 34
a[10] = 55
[3] 環境 Visual C++
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン: C++コンパイラ,リンカ
[3.3] 言語: C言語
[4] 期限: 2008年11月17日(月)までお願いします。
[5] その他の制限: main関数,文末記号,エスケープシーケンス,printf関数
逐次処理(順次処理)、条件分岐(選択処理)if,if-else,switch、
繰り返し(反復処理)while,do-while,for、演算子の複合演算子(+=,-=,*=,/=,%=)
インクリメント(++)デクリメント(--)、scanf関数、アドレス演算子(&)は習いました。
お願いします。
0772デフォルトの名無しさん
2008/11/14(金) 11:36:41その結果例、等差数列じゃなくてフィボナッチ数列だろw
実際はどっちをやりたいんだ?
↓ は等差数列
#include <stdio.h>
int main()
{
int i, d, a[11];
printf("初項:");
scanf("%d", &a[0]);
printf("公差:");
scanf("%d", &d);
for(i = 0; i <= 10; i++)
a[i + 1] = a[i] + d;
for(i = 0; i <= 10; i++)
printf("a[%d] = %d\n", i, a[i]);
}
0773デフォルトの名無しさん
2008/11/14(金) 11:39:45らしいので
printf("a[%d] = %d\n", i, a[i]);
より
printf("a[%2d] = %d\n", i, a[i]);
※ 実例の右辺 左揃えだけど… そっちも右に揃えるのかな?
0774デフォルトの名無しさん
2008/11/14(金) 11:42:47すいません、お手数ですが、フィボナッチ数列の方もお願いします。
0775デフォルトの名無しさん
2008/11/14(金) 11:44:26実例の右辺も右揃えでお願いします。
0776デフォルトの名無しさん
2008/11/14(金) 11:47:50[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8032.txt
[3] 環境
[3.1] WindowsXP
[3.2] VC 6.0
[3.3] C
[4] 期限: 2008.11.20
よろしくお願いします。
0777デフォルトの名無しさん
2008/11/14(金) 12:01:30右揃えにしたいところは %d → %2d (2桁の場合) や %3d (3桁の場合) にすれ
↓ フィボナッチ
#include <stdio.h>
int main()
{
int i, a[11];
a[1] = 1;
a[2] = 1;
for(i = 3; i <= 10; i++)
a[i] = a[i - 1] + a[i - 2];
for(i = 1; i <= 10; i++)
printf("a[%2d] = %3d\n", i, a[i]);
return 0;
}
0778デフォルトの名無しさん
2008/11/14(金) 12:05:24詳しく教えていただき本当に有難う御座いました。
大変助かりました。
0779デフォルトの名無しさん
2008/11/14(金) 13:14:16[2] 問題文(含コード&リンク):
・10個の整数を入力し,それを配列a[0]〜a[9]に入れ,その後,その中の最大値を求めて表示するプログラムを作りなさい
[3] 環境 Visual C++
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン: C++コンパイラ,リンカ
[3.3] 言語: C言語
[4] 期限: 2008年11月17日(月)までお願いします。
[5] その他の制限: main関数,文末記号,エスケープシーケンス,printf関数
逐次処理(順次処理)、条件分岐(選択処理)if,if-else,switch、
繰り返し(反復処理)while,do-while,for、演算子の複合演算子(+=,-=,*=,/=,%=)
インクリメント(++)デクリメント(--)、scanf関数、アドレス演算子(&)は習いました。
お願いします。
0780デフォルトの名無しさん
2008/11/14(金) 15:49:49int main(void)
{
int a[10], i, max;
for(i=0; i<10; i++)
scanf("%d", &a[i]);
max = a[0];
for(i=1; i<10; i++){
if(max < a[i])
max = a[i];
}
printf("max = %d\n", max);
return 0;
}
0781デフォルトの名無しさん
2008/11/14(金) 16:56:51[2] 問題文(含コード&リンク):http://hpgoda.eng.niigata-u.ac.jp/lecture2008/Cprogramming/6/6.html
一番下
[3] C
[3.1] OS:linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語: C言語
習ったもの
配列 if
[4] 期限:なるべく早くお願いします
0782デフォルトの名無しさん
2008/11/14(金) 17:00:161
2
3
4
5
3
7
5
6
のようなcsvデータの1〜5行目を読み合計を出します。
その後連続で、 2〜6、3〜7、4〜8・・・と
読み込んで合計を計算していくプログラムを教えてください。
よろしくお願いいたします。
0783639
2008/11/14(金) 17:02:30>>639
+ >>668 >>681 >>685
たびたびすいません。本当に最後の質問を。
以下のプログラムwhileの部分、Ctrl-Z を入力するまで読み取り続けるのを、
「Enterキーを入力するまで読み取り続ける」ようにするにはどうすればできますか?
#include<stdio.h>
#include<iostream>
#include<string>
using namespace std;
int main(){
char time[100], data[10000];
char filename[20];
FILE *fp, *plot;
cout<<"filename?"<<endl;
gets(filename);
cout<<"CPUtime?"<<endl;
gets(time);
cout<<"data?"<<endl;
gets(data);
/* fp = fopen(filename,"w");
fprintf(fp,"#%s\n",time);
fclose(fp);*/
fp = fopen(filename, "w");
fprintf(fp, "#%s\n", time);
fprintf(fp,"#%s",data);
while (fgets(data, sizeof(data), stdin) != NULL) {
fprintf(fp, "%s", data);
}
}
0785755
2008/11/14(金) 17:16:13数字の0と塗る文字を比較する部分で変な結果になったのでした。
0786デフォルトの名無しさん
2008/11/14(金) 18:12:50ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8033.txt
0787デフォルトの名無しさん
2008/11/14(金) 18:18:35CSVって言ってるけど、1行1個の数値だけならこんな感じか
#include <stdio.h>
main()
{
int a[5], n = 0, sum = 0;
while(scanf("%d", &a[n % 5]) == 1) {
sum += a[n % 5];
if (n >= 4) {
printf("sum (%d - %d) = %d\n", n - 4, n, sum);
sum -= a[(n - 4) % 5];
}
n++;
}
}
0788デフォルトの名無しさん
2008/11/14(金) 18:56:12782です。
これを1000万行ほど連続でやりたいんです。
0789デフォルトの名無しさん
2008/11/14(金) 18:59:510790デフォルトの名無しさん
2008/11/14(金) 19:02:58実際は256個のデータの連続計算なんですが、
ファイルサイズが10000行を超えたあたりで
エラーが出て計算できなくなってしまいます。
どうしたらいいでしょうか?
0791デフォルトの名無しさん
2008/11/14(金) 19:03:56[2] 問題文: キーボードから打ち込んだ数字が完全数で
あるか調べるプログラムを作る。
[3] 環境
[3.1] OS: Windows
[3.2] gcc
[3.3] 言語:C言語
[4] 期限: 11月15日12時まで
[5] その他の制限: 特になし
0792デフォルトの名無しさん
2008/11/14(金) 19:10:14OSはなに?
1000万?
0793デフォルトの名無しさん
2008/11/14(金) 19:21:38OSレベルの問題ってことはないの?
>>787 は領域の動的確保とかやってないから、
n が溢れる (21億くらい?) までは原理的に動作変わらないよ
$ yes 1 | ./add
sum (0 - 4) = 5
:
sum (120000000 - 120000004) = 5
:
まだ続いてる。
0794デフォルトの名無しさん
2008/11/14(金) 19:23:41[2] 入力された各行の先頭の単語だけを表示するプログラムを作れ。
[3] 環境
[3.1] OS:mac
[3.2] gcc
[3.3] c
[4] 期限: なし
[5] なし
お願いします
0795デフォルトの名無しさん
2008/11/14(金) 19:32:05「単語」にどういう文字が含まれていてよいかに依存するが、a-zA-Z0-9- に限定すればこんな感じ
#include <stdio.h>
int main()
{
char buf[256], str[256];
while(fgets(buf, 256, stdin) != EOF)
if(sscanf(buf, "%[a-zA-Z0-9-]", str) == 1)
printf("%s\n", str);
}
0796デフォルトの名無しさん
2008/11/14(金) 19:33:12区切り文字が不明
0797デフォルトの名無しさん
2008/11/14(金) 19:34:531行256要素のcsvなの?
じゃあプログラムも変わってくるね。
これが仕事の発注なら追加費用だね。
0798デフォルトの名無しさん
2008/11/14(金) 19:42:56#include <stdio.h>
int main()
{
int n, m, sum;
while(scanf("%d", &n) == 1) {
sum = 0;
for(m = n / 2; m > 0; m--)
if (n % m == 0)
sum += m;
if (sum == n)
printf("%d は完全数です。\n", n);
else
printf("%d は完全数でではありません。\n", n);
}
}
0799デフォルトの名無しさん
2008/11/14(金) 19:46:51テンプレ無視の質問だししょうがない
0800794
2008/11/14(金) 19:50:340801デフォルトの名無しさん
2008/11/14(金) 19:52:35[2] 実行画面で
fprintf(plot,"set xlabel\"time[sec]\"\n")
と表示される様に以下のプログラムを書き換える。
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン: 不明…一応MicrosoftからダウンロードしたVisual C++
[3.3] 言語: C++
[4] 期限 無し
[5] その他の制限: �@関数を使って。�AFILE *plotと宣言せずに。7行目の「r =」の右側の文字を全て"文字列"としてaに渡せるように)。
#include<stdio.h>
#include<iostream>
#include<string>
using namespace std;
int f(){
char r;
r = fprintf(plot,"set xlabel\"time[sec]\"\n");
return r;
}
int main(){
char a;
a = f();
cout<<a<<endl;
}
0802デフォルトの名無しさん
2008/11/14(金) 19:53:31ふつうは単語の直後のカンマとかピリオドとか落とすだろ?
0803デフォルトの名無しさん
2008/11/14(金) 19:59:21#include <stdio.h>
#include <iostream>
#include <string>
using namespace std;
char * f(){
char *r;
r = "fprintf(plot, \"set xlabel\\\"time[sec]\\\"\\n\")";
return r;
}
int main(){
char *a;
a = f();
cout << a << endl;
}
0804794
2008/11/14(金) 20:00:250806デフォルトの名無しさん
2008/11/14(金) 20:06:24Enterキーを入力≒改行を入力 だから、>>668との両立は基本的に無理。
ただ、termios や ncurses のようなものを使えば可能かもしれない。
ってかいい加減にスレチ。
0807teru
2008/11/14(金) 20:26:13例えば、迷路を抜けるプログラムを作り、
途中にある宝物を見つけなければクリアーできないとか、(これはフラグを使うことになる)
または、途中に各種イベントを配置しておき、
そこでの評価を点数化することで最後に総得点を競うといった応用が考えられます。
自由に考えることで、面白いプログラムを作成してみることができるはずだ。
1、プログラミング上の工夫(アルゴリズムが見えやすい、拡張性が高い、など)
2、コンテンツそのものの面白さ
簡単なゲームでいいです。
よろしくお願いします。
0808デフォルトの名無しさん
2008/11/14(金) 20:30:46>>1の書式を満たしてくれ
あとその文面は改造する元のプログラムがあるみたいだが?
0809デフォルトの名無しさん
2008/11/14(金) 20:58:570810703
2008/11/14(金) 21:22:28#include<stdio.h>
int fact(int n);
int fact1(int r);
int main(void)
{
int n,r,m,nCr;
printf("n r ->");
scanf("%d %d",&n,&r);
m=n-r;
if (n < m || n < 0 || m < 0)
return printf("nCr=0\n");
nCr=fact(n)/(fact1(r)*fact(m));
printf("nCr=%d\n",nCr);
return 0;
}
int fact(int n)
{
if(n==0) return 1;
else return n*fact(n-1);
}
int fact1(int r)
{
if(r==0) return 1;
else return r*fact1(r-1);
}
0811デフォルトの名無しさん
2008/11/14(金) 21:25:44>>744
0812デフォルトの名無しさん
2008/11/15(土) 00:12:42[2] 問題文(含コード&リンク):GPで画像を合成して再構成するときに45度ずつ回転して出力しなさい。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限: 2008年11月18日
[5] その他の制限:よろしくお願いします。
0813デフォルトの名無しさん
2008/11/15(土) 00:35:27階乗、漸化式、再帰、を使ったやり方かい・・・
余談だが、int型だと符号なしでも、12の階乗が限度。
対策として、分母の階乗を考慮して、乗数を減らすことも出来るが・・・
まぁ、階乗を使う必要がある問題ならそれで良いけど、パスカルの三角形は
より値が大きくなっても求められるが、それも限度はあるけど。
0814デフォルトの名無しさん
2008/11/15(土) 01:33:400815デフォルトの名無しさん
2008/11/15(土) 01:55:16死ね
0816デフォルトの名無しさん
2008/11/15(土) 02:33:31調べりゃソースはある
0817デフォルトの名無しさん
2008/11/15(土) 02:35:56おっと、死ねとはどうかと。あまりにも下衆過ぎやせんか?言葉を慎めよ
0818デフォルトの名無しさん
2008/11/15(土) 02:39:42[2] 問題文(含コード&リンク): 並列再帰を使ってハノイの塔問題を処理するプログラムを組め.
コード上で円盤の数も選択できるようにせよ.
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語:C
[4] 期限: 2008年11月17日 午後5時
[5] その他の制限: Cは一通り習っていますが,ライブラリはなるべく使わずにお願いします.
どなたかよろしくお願いします.
0819デフォルトの名無しさん
2008/11/15(土) 02:41:50書き込む内容によってはえらいことになるよ?
気をつけたほうがいいと思う。
0820デフォルトの名無しさん
2008/11/15(土) 02:44:14[2] 問題文: 入力したISBNコードが正しいか判断するプログラムを
作成せよ。(配列とfor文を使うこと)
[3] 環境
[3.1] OS: Windows
[3.2] gcc
[3.3] 言語:C言語
[4] 期限: 11月15日12時まで
[5] その他の制限: 特になし
0821820
2008/11/15(土) 02:51:400822デフォルトの名無しさん
2008/11/15(土) 02:52:23旧式と新式どっちだよ
0823デフォルトの名無しさん
2008/11/15(土) 02:54:37ハイフンやその間の数字の数、チェックデジットも?
0824デフォルトの名無しさん
2008/11/15(土) 02:56:26いや俺が280だから。
>>822
新式です。
0825デフォルトの名無しさん
2008/11/15(土) 02:58:17ハイフンを打ち込まず
4-793-2792-8
なら
479327928とそのまま打ち込む感じでお願いします。
0826デフォルトの名無しさん
2008/11/15(土) 04:28:25自己解決しました。
0827デフォルトの名無しさん
2008/11/15(土) 04:30:00勝手に人の振りしないでください
0828デフォルトの名無しさん
2008/11/15(土) 04:46:500829デフォルトの名無しさん
2008/11/15(土) 04:47:03単にチェックデジットがあってればいいだけ?
0830デフォルトの名無しさん
2008/11/15(土) 04:57:00通報して良い?本人じゃなくても、第三者にも偽者ってバレてるんだけど?
0831デフォルトの名無しさん
2008/11/15(土) 04:59:11末尾を算出するのは、その手前の数によるし・・・
問題は、ハイフンごとに分けられているそれぞれの数値も
範囲が決められているとか、この世に存在するものかどうか
何かデータベースを参照して正しいかを調べるのか?それが問題だ。
考えすぎかもしれんが。
0832デフォルトの名無しさん
2008/11/15(土) 05:17:254文字(出版者記号),4文字(書名記号),チェックディジットになるんだよな?
ちょっとやってみるわ.
0833デフォルトの名無しさん
2008/11/15(土) 07:20:340834デフォルトの名無しさん
2008/11/15(土) 10:37:10やりかたがよくわかりませんし、
今事情があって他人のPCを使っています。
情報漏洩したら面倒なのでやりたくないです。
0835デフォルトの名無しさん
2008/11/15(土) 10:47:320836デフォルトの名無しさん
2008/11/15(土) 11:24:010837デフォルトの名無しさん
2008/11/15(土) 11:25:280838デフォルトの名無しさん
2008/11/15(土) 11:54:12先頭3桁のチェックと末尾のチェックデジットのチェックのみ。
書式は >>825 のような13桁の数字のみを受け付ける。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8034.txt
0839デフォルトの名無しさん
2008/11/15(土) 11:55:06大変助かりました。
本当に有難う御座いました。
0840デフォルトの名無しさん
2008/11/15(土) 12:13:15[2] 問題文(含コード&リンク):
・配列を利用し,2008年の指定された月の1日が何曜日か表示するプログラムを作成せよ
-日=0,月=1,火=2,...,土=6と数値化して計算
・その数値によって何曜日かを表示する
-2008年1月1日が火曜日(=2)であることを利用する
-求める月の前の月前までの日数を加算し7で割った余りを考える
-各月の日数を以下のような形で配列に入れておく
days[ ]={0,31,29,...,31}
[3] 環境 Visual C++
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン: C++コンパイラ,リンカ
[3.3] 言語: C言語
[4] 期限: 2008年11月17日(月)までお願いします。
[5] その他の制限: main関数,文末記号,エスケープシーケンス,printf関数
逐次処理(順次処理)、条件分岐(選択処理)if,if-else,switch、
繰り返し(反復処理)while,do-while,for、演算子の複合演算子(+=,-=,*=,/=,%=)
インクリメント(++)デクリメント(--)、scanf関数、アドレス演算子(&)、キャスト演算子
配列の初期化は習いました。
お願いします。
0841デフォルトの名無しさん
2008/11/15(土) 12:24:18#include <stdio.h>
int main()
{
int y, m, q, h;
char *s[] = {"土", "日", "月", "火", "水", "木", "金"};
puts("西暦の年、月、日をスペース区切りで入れてください");
scanf("%d %d %d", &y, &m, &q);
h = (((q + ((m + 1)*26/10) + (y % 100) + ((y % 100)/4) +
((y / 100)/4) - 2*(y / 100)) % 7) + 7 ) % 7;
printf("%d年%d月%d日は%s曜日です\n", y, m, q, s[h]);
return 0;
}
0842デフォルトの名無しさん
2008/11/15(土) 12:28:160843デフォルトの名無しさん
2008/11/15(土) 13:12:50[2] 問題文(含コード&リンク):
複素数a,bを標準入力から入力し、それぞれの絶対値を求め、2つの複素数の和、差、積、商を求め
標準出力に出力するプログラムを作りたい。これらを求める関数として、複素数の絶対値を求める関数
および和、差、積、商を求める関数が
double cabs(struct mycomplex)
struct mycomplex wa(struct mycomplex,struct mycomplex)
struct mycomplex sa(struct mycomplex,struct mycomplex)
struct mycomplex seki(struct mycomplex,struct mycomplex)
struct mycomplex shou(struct mycomplex,struct mycomplex)
として作ることにした。これらの絶対値、和、差、積と商を求める関数を解答せよ
なおこの構造体は予めCの処理系には用意されているが、それを利用せず独立に考えよ。
[3] 環境
[3.1] OS: Windows
[3.2]
[3.3] 言語: C
[4] 期限: 11月16日まで
[5] その他の制限:構造体の問題です 問題文に沿ってお願いします。
0844デフォルトの名無しさん
2008/11/15(土) 13:18:37#include<stdio.h>
#include<math.h>
struct mycomplex {
double re;
double im;
};
int main()
{
struct mycomplex a,b;
struct mycomplex wa(struct mycomplex,struct mycomplex);
struct mycomplex sa(struct mycomplex,struct mycomplex);
struct mycomplex seki(struct mycomplex,struct mycomplex);
struct mycomplex shou(struct mycomplex,struct mycomplex);
double cabs(struct mycomplex);
struct mycomplex cinput(void);
void cprint(struct mycomplex);
a=cinput(); b=cinput();
cprint(wa(a,b)); cprint(sa(a,b)); cprint(seki(a,b)); cprint(shou(a,b));
printf("絶対値 cabs(a)=%f\n",carbs(a)); printf("絶対値 cabs(b)=%f\n",cabs(b));}
0845デフォルトの名無しさん
2008/11/15(土) 13:20:11struct mycomplex cinput(void)
{
struct mycomplex z;
scanf("%f %f",&z.re,&z.im);
return z;
}
void cprint(struct mycomplex z)
{
printf("複素数 = %f + i*%f\n",z.re,z.im);
}
誰かお願いします
0846デフォルトの名無しさん
2008/11/15(土) 14:11:56struct mycomplex wa(struct mycomplex a, struct mycomplex b)
{
struct mycomplex z = { a.re+b.re, a.im+b.im };
return z;
}
struct mycomplex sa(struct mycomplex a, struct mycomplex b)
{
struct mycomplex z = { a.re-b.re, a.im-b.im };
return z;
}
struct mycomplex seki(struct mycomplex a, struct mycomplex b)
{
struct mycomplex z = { a.re*b.re - a.im*b.im, a.re*b.im + a.im*b.re };
return z;
}
struct mycomplex shou(struct mycomplex a, struct mycomplex b)
{
struct mycomplex z = {
(a.re*b.re + a.im*b.im) / (b.re*b.re + b.im*b.im),
(a.im*b.re - a.re*b.im) / (b.re*b.re + b.im*b.im)
};
return z;
}
double cabs(struct mycomplex a)
{
return hypot(a.re, a.im);
}
0847デフォルトの名無しさん
2008/11/15(土) 17:18:06[1] 授業単元:応用プログラミング論
[2] 問題文(含コード&リンク):
ある任意の点X(a,b)、Y(c,d)を乱数で求め、
X,Yからなる線分に1辺が平行であり、四角形の中心とその線分との距離が30pixelになるような四角形を描写せよ。
四角形は20×40のものを使用。
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン:Visual C++ 2008
[3.3] 言語:C++
[4] 期限: 2008年11月18日13時まで
[5] その他の制限:とくになし。
0848デフォルトの名無しさん
2008/11/15(土) 17:43:410849デフォルトの名無しさん
2008/11/15(土) 17:49:460850デフォルトの名無しさん
2008/11/15(土) 18:03:00線分XYを一辺とするのかと思いこんでた。
X
┌─┐│
└─┘│
Y
こういうことね。
0851デフォルトの名無しさん
2008/11/15(土) 18:06:09└─┤
じゃないんだねww?
0852デフォルトの名無しさん
2008/11/15(土) 18:45:07ありがとうございます
[2] 問題文(含コード&リンク):
以下のようなプログラムを作成しなさい.
int型変数xを宣言し標準入力で適当な数値を代入する。
その変数xのアドレスを引数として、アドレスと値を表示する関数を作成せよ。
実行例
./a
? 5
変数xのアドレスは 0x00 です
変数xの値は 5 です
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名 Cygwin
[3.3] 言語:C
[4] 期限: 11月16日 17時まで
[5] その他の制限: 授業はまだまだ初歩レベルみたいです。
0854デフォルトの名無しさん
2008/11/15(土) 19:24:18#include<math.h>
struct mycomplex {
double re;
double im;
};
int main()
{
struct mycomplex a,b;
struct mycomplex wa(struct mycomplex,struct mycomplex);
struct mycomplex sa(struct mycomplex,struct mycomplex);
struct mycomplex seki(struct mycomplex,struct mycomplex);
struct mycomplex shou(struct mycomplex,struct mycomplex);
double cabs(struct mycomplex);
struct mycomplex cinput(void);
void cprint(struct mycomplex);
a=cinput(); b=cinput();
cprint(wa(a,b)); cprint(sa(a,b)); cprint(seki(a,b)); cprint(shou(a,b));
printf("絶対値 cabs(a)=%f\n",carbs(a)); printf("絶対値 cabs(b)=%f\n",cabs(b));
}
struct mycomplex cinput(void)
{
struct mycomplex z;
scanf("%f %f",&z.re,&z.im);
return z;
0855デフォルトの名無しさん
2008/11/15(土) 19:29:32struct mycomplex cinput(void) {
struct mycomplex z;
scanf("%f %f",&z.re,&z.im);
return z; }
void cprint(struct mycomplex z) {
printf("複素数 = %f + i*%f\n",z.re,z.im); }
struct mycomplex wa(struct mycomplex a, struct mycomplex b) {
struct mycomplex z = { a.re+b.re, a.im+b.im };
return z; }
struct mycomplex sa(struct mycomplex a, struct mycomplex b) {
struct mycomplex z = { a.re-b.re, a.im-b.im };
return z; }
struct mycomplex seki(struct mycomplex a, struct mycomplex b) {
struct mycomplex z = { a.re*b.re - a.im*b.im, a.re*b.im + a.im*b.re };
return z; }
struct mycomplex shou(struct mycomplex a, struct mycomplex b) {
struct mycomplex z = {
(a.re*b.re + a.im*b.im) / (b.re*b.re + b.im*b.im),
(a.im*b.re - a.re*b.im) / (b.re*b.re + b.im*b.im)
};
return z; }
double cabs(struct mycomplex a) {
return hypot(a.re, a.im); }
すいません、動かないんで何処が違うか教えてください
854の続きです
0856デフォルトの名無しさん
2008/11/15(土) 19:32:14#include<stdio.h>
void pp(int *x)
{
printf("変数xのアドレスは 0x%p です\n", x);
printf("変数xの値は %d です\n", *x);
}
int main(void)
{
int x;
fputs("? ", stdout);
scanf("%d", &x);
pp(&x);
return 0;
}
0857デフォルトの名無しさん
2008/11/15(土) 19:35:21見づらいし
インデントしなおすのもめんどくさいから
素直にろだにあげろカス
0858デフォルトの名無しさん
2008/11/15(土) 19:37:24carbs → acabs
0859デフォルトの名無しさん
2008/11/15(土) 19:49:51関数宣言を main の外へ出せ
0860デフォルトの名無しさん
2008/11/15(土) 20:07:38わからないので、8036でアップいましたので修正お願いします
ほかの方も教えてくれるとありがたいです
0861デフォルトの名無しさん
2008/11/15(土) 20:13:17二つの整数値を読み込んで、小さい方の数以上で大きい方の数以下の整数を全て加えた値を表示するプログラムを作りたいんです
整数1は37
整数2は28
28〜37までの全整数の和は325
for文は使わずにお願いします。
よろしくお願いしますm(_ _)m
0862デフォルトの名無しさん
2008/11/15(土) 20:19:13関数宣言を main 関数の外へ
scanf のフォーマットが違った。 %f -> %lf
main 関数の最後に return 0; を追加
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8037.txt
0863デフォルトの名無しさん
2008/11/15(土) 20:26:58別に関数宣言は問題ではないと思うが
標準ライブラリのcabs()と被るのでacabs()に名前変更
main()には、return 0;でもつけてね
cinput()内のscanf()は、%fではなくて%lfにする
shou()内の(b.re * b.re + b.im * b.im) != 0 を保証すべき
acabs()でhypot()呼んでいるので、必要に応じてリンクする
0864デフォルトの名無しさん
2008/11/15(土) 20:30:10#include <stdio.h>
#include <stdlib.h>
int f(int min, int max)
{
if (min == max)
return min;
else if (min < max)
return f (min, max - 1) + max;
else {
fprintf(stderr, "error!\n");
exit(1);
}
}
int main()
{
int max, min;
printf("min = ");
scanf("%d", &min);
printf("max = ");
scanf("%d", &max);
printf("%d\n", f(min, max));
return 0;
}
やってることはcだけど
0865デフォルトの名無しさん
2008/11/15(土) 20:44:22自分無知なんでそのやり方でやってみたんですけど、エラーがたくさん出てきました。すいません
0866デフォルトの名無しさん
2008/11/15(土) 20:49:38int f(int min, int max)
{
if (min == max)
return min;
else if (min < max)
return f (min, max - 1) + max;
else
return -1;
}
int main()
{
int max, min;
using std::cout; using std::cin;
using std::endl;
cout << "min = ";
cin >> min;
cout << "max = ";
cin >> max;
cout << f(min, max) << endl;
return 0;
}
んじゃこれ
0867デフォルトの名無しさん
2008/11/15(土) 20:53:45[2] 問題文(含コード&リンク):
Cstring型の変数にヘキサで表現された文字列16個が入っている。
これを8個のバイト変数に入れろ。
void hoge(voif)
{
BYTE data[8];
int i;
CSrting str;
str = "11223344556677aa";
// ここ作ってみて
for(i=0; i<8; i++){
printf("%d=0x%02x\n", data[i]);
}
}
[3] 環境
[3.1] OS: Windows2000
[3.2] コンパイラ名とバージョン: VC++6
[3.3] 言語: C++
[4] 期限: 月曜日まで
[5] その他の制限: 特に無し
0868867 ◆4XnS5OgSrI
2008/11/15(土) 20:59:24strcpy(cStr, str) して、2バイトづつ
BYTE atox(char data){
if ((data >= '0') && (data <= '9')) {
return (data - '0');
} else if ((data >= 'A') && (data <= 'F')) {
return (data - 'A' + 0x0a);
}
}
みたいな感じでいいんでしょうか?
0869デフォルトの名無しさん
2008/11/15(土) 21:04:09プログラムいただいたのはいいのですが、動かないです
エラーはエラー E2293 mycomplex.c 12: ) が必要
エラー E2451 mycomplex.c 21: 未定義のシンボル x(関数 main )
エラー E2451 mycomplex.c 21: 未定義のシンボル y(関数 main )
エラー E2451 mycomplex.c 21: 未定義のシンボル x(関数 main )
エラー E2451 mycomplex.c 21: 未定義のシンボル y(関数 main )
*** 5 errors in Compile ***
こんな感じで
0870デフォルトの名無しさん
2008/11/15(土) 21:08:08a と Aについてとか細かいとこはおいといて
そんな感じでもいけるけど
標準ライブラリの利用が認められるなら
strtolでもっとちゃっちゃかできるよ
0871867 ◆4XnS5OgSrI
2008/11/15(土) 21:18:05ああ、小文字忘れてたorz
標準関数でもCStringクラスを使ってもOKです。
strtolか。longって8バイトでしたっけ?そういや・・・。
じゃあ、char型の変数にコピーした後、strtolして
long_data = strtol(cStr);
for(i=0; i<8; i++){
data[i] = long_data & 0x000000FF;
long_data >>= 16;
}
って感じでしょうか?
0872デフォルトの名無しさん
2008/11/15(土) 21:48:50#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
int i;
char s[3] = "", str[] = "11223344556677aa";
unsigned char x[8];
for (i = 0; i < 8; ++i) {
strncpy(s, &str[i * 2], 2);
x[i] = strtol(s, NULL, 16);
}
for (i = 0; i < 8; ++i) {
printf("%x :", x[i]);
}
return 0;
}
まぁこういうこと言ってました
分かりやすいかはわかりませんが・・・・・
0873デフォルトの名無しさん
2008/11/15(土) 21:49:44無図杉∩(・ω・)∩
0874デフォルトの名無しさん
2008/11/15(土) 21:53:22ヒント: >>862 のプログラムにx も y も出てこない
0875デフォルトの名無しさん
2008/11/15(土) 21:54:07アップローダの8038にファイルあります 誰でもいいので、お願いします
0876デフォルトの名無しさん
2008/11/15(土) 21:56:10それは分かるんですが、出てきてないと
出てないのでまったく直す所が分かりません なぜ違うのか・・
0877デフォルトの名無しさん
2008/11/15(土) 21:56:310878デフォルトの名無しさん
2008/11/15(土) 22:01:34エラーが増えました・・
0879デフォルトの名無しさん
2008/11/15(土) 22:02:188038.c はふつうにコンパイルできてふつーに動くけど?何やってるの?
0880デフォルトの名無しさん
2008/11/15(土) 22:08:590881デフォルトの名無しさん
2008/11/15(土) 22:09:50このプログラムは動くのですかー コンパイラーがいけないのでしょうか
Cpad for Borland C++ Compilerなんてのを使ってC言語コンパイルしてるんですけど・・
ほかにいいコンパイラー知らないですか?
0882デフォルトの名無しさん
2008/11/15(土) 22:11:03コンパイラーについていいコンパイラーとは何かがわかりませんが、
コンパイルするとおかしくなるのでどうにかしたいです。
0883880
2008/11/15(土) 22:12:450884デフォルトの名無しさん
2008/11/15(土) 22:13:55ファイル名間違えてたりしない?w
0885デフォルトの名無しさん
2008/11/15(土) 22:17:00キューに入れる関数enqueue()、キューから取り出す関数dequeue()、キューが空かどうかを返す関数isempty()、キューが満杯かどうかを返す関数isfull() を作成。
isempty() はキューが空ならば1、そうでないならば0 を返す。
isfull() はキューが満杯ならば1、そうでないならば0 を返す。
51〜65行目をいじってるのですがisemptyがきちんと書けません。
enqueueされていない状態でdequeueするとqueue is emptyと出るのが理想なのですがdequeue 0になってしまいます。
どなたか助けてください。
0886デフォルトの名無しさん
2008/11/15(土) 22:18:210887デフォルトの名無しさん
2008/11/15(土) 22:20:500888デフォルトの名無しさん
2008/11/15(土) 22:27:27isempty を
return head == tail;
にしてみれ
isempty 関数の中で、head と QSIZE の両方を printf してみればすぐ気付くぞ
0889デフォルトの名無しさん
2008/11/15(土) 22:30:18動かないですね bccの設定でファイルはどこから参照されますか?
0890デフォルトの名無しさん
2008/11/15(土) 22:30:37if(isempty()){
〜〜〜
}else{
return val[head++];
}
}
0891デフォルトの名無しさん
2008/11/15(土) 22:31:260892デフォルトの名無しさん
2008/11/15(土) 22:32:46ありがとう。本当にありがとう。
0893デフォルトの名無しさん
2008/11/15(土) 22:34:28ただひとこと言っておくと、dequeue が dequeu になってないw
'd' でどんどん消していっても、tail が減るんじゃなくて head が増える一方だから、
やがて残りがなくなって enqueue できなくなるな
こんなんでええの?
0894デフォルトの名無しさん
2008/11/15(土) 22:57:31その問題を次の問で解決しろってことなんです。しばらく自力で考えてみます。
0895デフォルトの名無しさん
2008/11/15(土) 23:03:19やっぱ動かないんで、友達にコンパイルしてもらってもエラーで
エラーは、1>------ ビルド開始: プロジェクト: mycomplex, 構成: Debug Win32 ------
1>コンパイルしています...
1>mycomplex.cpp
1>c:\documents and settings\ユーザー\my documents\visual studio 2008\projects\mycomplex\mycomplex\mycomplex.cpp(2) : warning C4627: '#include <math.h>': プリコンパイル済みヘッダーの使用を検索中にスキップされました
1> ディレクティブを 'stdafx.h' に追加するか、プリコンパイル済みヘッダーをビルドし直します
1>c:\documents and settings\ユーザー\my documents\visual studio 2008\proje
こんなのが出たらしいですw
0896デフォルトの名無しさん
2008/11/15(土) 23:06:410897デフォルトの名無しさん
2008/11/15(土) 23:07:34プロジェクトの選択ミスってるみたいだぞ?
0898デフォルトの名無しさん
2008/11/15(土) 23:11:39Cpad for Borland C++ Compilerを使ってます
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
mycomplex.c:
エラー E2293 mycomplex.c 12: ) が必要
エラー E2451 mycomplex.c 21: 未定義のシンボル x(関数 main )
エラー E2451 mycomplex.c 21: 未定義のシンボル y(関数 main )
エラー E2451 mycomplex.c 21: 未定義のシンボル x(関数 main )
エラー E2451 mycomplex.c 21: 未定義のシンボル y(関数 main )
*** 5 errors in Compile ***
0899デフォルトの名無しさん
2008/11/15(土) 23:12:260900デフォルトの名無しさん
2008/11/15(土) 23:20:20まさかと思ってgrepかけてみたら
borland/bcc55/Include/math.h:111:#define cabs(z) (hypot ((z).x, (z).y))
やっぱりマクロだったか
だからあれだけacabs()に書き換えろといったのに
0901デフォルトの名無しさん
2008/11/15(土) 23:29:19入力で4っつも数値を打つみたいで・・・
0902デフォルトの名無しさん
2008/11/15(土) 23:33:210903デフォルトの名無しさん
2008/11/15(土) 23:36:120904デフォルトの名無しさん
2008/11/15(土) 23:45:42コンパイラがだめみたいです・・
0905デフォルトの名無しさん
2008/11/16(日) 00:02:43了解。ガンガレ
0907デフォルトの名無しさん
2008/11/16(日) 00:04:022つの複素数を入力するんだろ?自分で問題文すら読んでないのか?
0908デフォルトの名無しさん
2008/11/16(日) 01:34:30なんですが、またちょっといいですか^^;?
#define A 1
ってして、 scanf("%c",&m);
ってして、 if(m==1)
でちゃんと動きますか?
もしかして、Aって入力されたら、Aという#0041っていう数字と比較になっちゃいます?
0909デフォルトの名無しさん
2008/11/16(日) 01:35:40ならねーよwwwwww
0910デフォルトの名無しさん
2008/11/16(日) 01:36:53それくらい自分で試せよ
0911デフォルトの名無しさん
2008/11/16(日) 01:38:17[2] 問題文(含コード&リンク):
ブレゼンハムのアルゴリズムを用いて、ウインドウ内に線分を描画するプログラムを作成しなさい。
プログラム1(マウスの左ボタンを使用する。候補線の表示をする。)
マウス左クリック 線分の始点座標の指定、及び線分の描画開始
マウスの移動 始点から絶えず候補線を描画。
マウス左クリック 線分の終点座標の確定。線分の描画。
[3] 環境
[3.1] OS:XP
[3.2] コンパイラ名とバージョン:VC++ 2008
[3.3] 言語: C
[4] 期限: 2008年11月19日まで
[5] その他の制限:API関数を使って線分を引くこと。直線を引くAPI関数を使ってはならない。
2年の問題なんですが、C++じゃなくjavaを受けていたのでまったくわかりません。
よろしくお願いします。
0912デフォルトの名無しさん
2008/11/16(日) 01:41:08[5] その他の制限:API関数を使って線分を引くこと。直線を引くAPI関数を使ってはならないではなく
点を描画するAPI関数を使って線分を引くでした。すみません。
0913デフォルトの名無しさん
2008/11/16(日) 01:41:53ちょっとまっていww
こんがらがってきたww
0914デフォルトの名無しさん
2008/11/16(日) 01:44:12360°自由に引けた方が良いですか?
0 〜 45°の直線しか引けなくても良いですか?
0915デフォルトの名無しさん
2008/11/16(日) 01:45:42特に指定は無いので0〜45°で大丈夫です。
0916デフォルトの名無しさん
2008/11/16(日) 01:53:46scanf("%c",&m) ←A 入力
ってしても、name[m];じゃ使えないでした;ω;。
>>909-910 ありがとうございました
0917デフォルトの名無しさん
2008/11/16(日) 02:14:07name[m] に 'A' を取り込みたいんだったら scanf("%c", &name[m]);
0918デフォルトの名無しさん
2008/11/16(日) 02:17:01ブレゼンハム使うって時点で8分割しないとダメだろうしね。
360°分の座標変換は自前でがんばって。
0919デフォルトの名無しさん
2008/11/16(日) 02:32:27以下の�@、�A、�Bには何が入るのでしょうか?
#include <stdio.h>
#define _DEBUG_
#�@ _DEBUG_
#define DEBUG(x) fprintf(stderr,"%s\n",x)
#�A
#define DEBUG(x)
#�B
int main(){
DEBUG("test");
return 0;
}
0920デフォルトの名無しさん
2008/11/16(日) 02:34:17ifndef
else
endif
つかテンプレ使えよ
0922デフォルトの名無しさん
2008/11/16(日) 02:40:48順にifdef else endifな
これくらいで、templete<>は使わなくてもいいだろ
0923デフォルトの名無しさん
2008/11/16(日) 02:45:220924デフォルトの名無しさん
2008/11/16(日) 04:05:250925デフォルトの名無しさん
2008/11/16(日) 09:14:11[2] 問題文: http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8040.txt
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: VC2005
[3.3] 言語: C
[4] 期限: 2008年11月17日24時まで
[5] その他の制限: 配列添字演算子は使ってはいけない。
よろしくお願いします。
0926デフォルトの名無しさん
2008/11/16(日) 09:58:29先生の意図してることと違いそうだけど(多分これだと得点低い)
void sort( int *a, int num )
{
int temp = 0;
int i = 0;
int j = 0;
int *work = a;
/* 直接選択ソートだっけ? */
/* 先頭から順に見て行って、それより小さいのがあれば入れ替える */
/* []を使ってないだけでやってることは実質同じ */
for( i = 0; i < num; i++ ){
for( j = i; j < num; j++ ){
if( *( work + i ) > *( work + j ) ){
temp = *( work + i );
*( work + i ) = *( work + j );
*( work + j ) = temp;
}
}
}
}
0927デフォルトの名無しさん
2008/11/16(日) 10:16:53[2] 問題文:928のプログラムなんですが、strtok・atof・fputsの3つがないとできないのでしょうか?
長くなってもかまいませんので、もし上の3つを使わずにできるプログラムがあれば教えてください。
fprintf・fscanf・fgetsは大丈夫です。
またstrcpyも使わず(#include <stdio.h>・#include <stdlib.h>・#defineのみで)プログラムを作るとどんな感じになるか解説していただきたいのですが…
参照
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 2008年11月18日24時まで
[5] その他の制限: ちなみにAというファイルには
名前 年齢 身長 体重 性別
A 18 175.8 62.3 M
B 23 154.2 49.5 F
C 28 180.1 75.2 F
D 32 169.5 59.8 M
E 35 158.4 54.3 F
F 40 175.8 80.9 M
です。
プログラムの内容はAというデータファイルに入っている中身を読み込み「Aの中身を標準出力させる」かつ「男性のデータだけをBというデータファイルに書き込む」というプログラムです。よろしくお願い致します。
0928デフォルトの名無しさん
2008/11/16(日) 10:22:04#define MAX1 100 #define MAX2 100 #define MAX3 100
int main(void){
char name[MAX1][MAX2];
int age[MAX1];
double height[MAX1];
double weight[MAX1];
char sex[MAX1];
int x;
char s[MAX3];
char t[MAX3];
char NAME[MAX2];
int AGE;
double HEIGHT,WEIGHT;
char SEX;
char *fileA="A";
char *fileB="B";
FILE *fa,*fb;
if((fa=fopen(fileA,"r"))==NULL){
printf("File%s doesn't exist!!\n", fileA);
return 1;
}
if((fb=fopen(fileB,"w"))==NULL){
printf("File%s doesn't exist!!\n", fileB);
return 2;
}
0929デフォルトの名無しさん
2008/11/16(日) 10:23:01while(fgets(s,MAX3,fa)!=NULL){
printf("%s ",s);
strcpy(t,s);
strcpy(NAME,strtok(s," "));
AGE=atoi(strtok(NULL," "));
HEIGHT=atof(strtok(NULL," "));
WEIGHT=atof(strtok(NULL," "));
SEX=*strtok(NULL," ");
if(SEX=='M') fputs(t,fb);
strcpy(name[x],NAME);
age[x]=AGE;
height[x]=HEIGHT;
weight[x]=WEIGHT;
sex[x]=SEX;
x++;
}
fclose(fa);
fclose(fb);
return 0;
}
0930デフォルトの名無しさん
2008/11/16(日) 10:23:05>928のプログラムなんですが
どれ?
>またstrcpyも使わず(#include <stdio.h>・#include <stdlib.h>・#defineのみで)
自分で関数作ればいいじゃん
0931デフォルトの名無しさん
2008/11/16(日) 10:57:340932デフォルトの名無しさん
2008/11/16(日) 11:35:40sscanf は使えるの?
0933デフォルトの名無しさん
2008/11/16(日) 11:41:42趣旨とはややはずれるかもしれんが、fscanf でもこれだけできる。rewind が OK かどうかはあやしいが。
sscanf 使えたらもう少し短くなる
#include<stdio.h>
#define MAX2 100
#define MAX3 100
int main(void)
{
char s[MAX3], NAME[MAX2], SEX, *fileA = "A", *fileB = "B";
int x, AGE;
double HEIGHT, WEIGHT;
FILE *fa, *fb;
if ((fa = fopen(fileA, "r")) == NULL) {
printf("File%s doesn't exist!!\n", fileA);
return 1;
}
if ((fb = fopen(fileB, "w")) == NULL) {
printf("File%s doesn't exist!!\n", fileB);
return 2;
}
while(fgets(s, MAX3, fa) != NULL)
printf("%s", s);
rewind(fa);
while((x = fscanf(fa, "%s %d %lf %lf %c", NAME, &AGE, &HEIGHT, &WEIGHT, &SEX)) > 0){
if(x == 5)
if(SEX == 'M')
fprintf(fb, "%s %d %.1f %.1f %c\n", NAME, AGE, HEIGHT, WEIGHT, SEX);
}
fclose(fa);
fclose(fb);
return 0;
}
0934933
2008/11/16(日) 11:43:40sscanf を使った場合
while(fgets(s, MAX3, fa) != NULL) のループがこうなる
printf("%s", s);
if (sscanf(s, "%s %d %lf %lf %c", NAME, &AGE, &HEIGHT, &WEIGHT, &SEX) == 5)
if (SEX == 'M')
fprintf(fb, "%s %d %.1f %.1f %c\n", NAME, AGE, HEIGHT, WEIGHT, SEX);
0935デフォルトの名無しさん
2008/11/16(日) 13:33:12これって、先に--ty[0]をして、chrt[][]を見る順であってますか><?
0936デフォルトの名無しさん
2008/11/16(日) 13:49:250938デフォルトの名無しさん
2008/11/16(日) 15:44:39それって簡易とはいえ
Windowsアプリを一個作れって言ってるに等しいんだけど
なんのスケルトンもなしにやれってこと?
0939デフォルトの名無しさん
2008/11/16(日) 15:47:000940デフォルトの名無しさん
2008/11/16(日) 17:50:10[2] 問題文(含コード&リンク): 正の整数を読みこみその約数をすべて出力するプログラムを作成せよ。
約数が複数個ある場合はスペースで区切って出力する。
繰り返しの処理ができるようにし、0以下の数値を読み込むと終了するようにせよ
なお、約数が実在しない場合は約数はありませんと出力すること。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: visual basic c++
[5] その他の制限: for if while を習いました。
よろしくお願いします。
0941デフォルトの名無しさん
2008/11/16(日) 18:01:49真の約数について考えろってこと?
0942デフォルトの名無しさん
2008/11/16(日) 18:08:420943デフォルトの名無しさん
2008/11/16(日) 18:17:40約数をすべて(1とその数自身は除く数)でお願いします。
0944デフォルトの名無しさん
2008/11/16(日) 18:26:31#include <iostream>
int main()
{
int c, nonflag = 1;
std::cin >> c;
for (int i = 2; i < c; ++i) {
if (!(c % i)) {
printf("%d ", i);
nonflag = 0;
}
}
if (nonflag)
std::cout << "約数は1と自身以外ありません";
std::cout << std::endl;
return 0;
}
0945デフォルトの名無しさん
2008/11/16(日) 18:28:37#include <iostream>
using namespace std;
int main()
{
int i, n;
while((cin >> n ) > 0){
cout << n << "の約数";
for(i = 2; i <= n / 2; i++)
if(n % i == 0)
cout << ", " << i;
cout << endl;
}
}
0946デフォルトの名無しさん
2008/11/16(日) 21:29:16返信送れて大変申し訳ないです。
scanf printf を使っているレベルです。
0947デフォルトの名無しさん
2008/11/16(日) 21:30:52ちなみに最初は
#include<stdio.h>
main()
{
です
0948デフォルトの名無しさん
2008/11/16(日) 21:35:48#include <stdio.h>
int main()
{
int i, j , n;
while(1){
scanf("%d", &n);;
if(n <= 0)
break;
printf("%d 約数", n);
j = 0;
for(i = 2; i <= n / 2; i++)
if(n % i == 0){
printf("%d ", i);
j++;
}
if(j == 0)
printf("はありません。");
printf("\n");
}
}
0949デフォルトの名無しさん
2008/11/16(日) 21:38:23int main(int argc,char *argv[]) 、またint型の値を返すため
return 0; といった記述が標準的なんだとさ。強制ではなく
そうでなくても正常にコンパイルできる環境もあるが、
あくまでも世界的な標準に基づくのであれば、その記述が望ましい。
0950デフォルトの名無しさん
2008/11/16(日) 21:43:54上記のページの説明は、ISOより引用しての説明。
■ 根拠 ■
標準C §5.1.2.2.1 Program startup
標準C99 §5.1.2.2.1 Program startup
標準C++ §3.6.1 Main function
0951デフォルトの名無しさん
2008/11/16(日) 21:46:28個人的には、int main(void); という書き方に不満があります。私なら int main(); とします。でも、cdecl でも stdcall でも通用するようにしたいのでしょうけれども。
0952デフォルトの名無しさん
2008/11/16(日) 21:47:21すいません。
そのとおりです。
0953デフォルトの名無しさん
2008/11/16(日) 21:51:43さぁ。個人的な主観を言われても、それはあくまでも
世界的な標準スタイルだし、int main(); < セミコロンは違和感がある。
さらに、C++では int main() 引数がなければ何も書かないのが標準的だそうだよ。
0954デフォルトの名無しさん
2008/11/16(日) 22:00:10要するに、プログラムの開始、主体となる main 関数に対するもの。
それ以外の、独自で定義する関数は、とりわけプロトタイプ宣言では
voidを入れていないと、警告する環境はあるけどね。まぁ、人それぞれ環境も違うし
あくまでも、幅広い環境で通用する世界的な標準スタイルの記述の仕方。
0955デフォルトの名無しさん
2008/11/16(日) 22:04:23セミコロンはうかつでした。
>世界的な標準スタイルだし
本当ですか?規格でそういってるだけじゃないですか?規格のほうが変だった、という可能性はありませんか?
0956デフォルトの名無しさん
2008/11/16(日) 22:05:360957デフォルトの名無しさん
2008/11/16(日) 22:09:38まあ、別に従わなくてもいいよ。
ドコモAUのメールアドレスみたいに世界標準に従わない事例もたくさんある。
ただ、それが好ましく思われないことは知っておけばいいんじゃないかなー
正装すべき場面では正装しましょう。
0958デフォルトの名無しさん
2008/11/16(日) 22:10:43waitについてなんですが、wait(100000)とは何秒くらいなのでしょうか?
カッコ中の、時間の数字が、何の単位なのかがわからないので、教えてください。
0959デフォルトの名無しさん
2008/11/16(日) 22:12:51知るかよwwwwww
標準にそんな関数はない
でもきっとmsecだろ多分
0960デフォルトの名無しさん
2008/11/16(日) 22:14:470961デフォルトの名無しさん
2008/11/16(日) 22:15:37main()はあらゆる型・個数の引数を受け入れるという意味になる
0962デフォルトの名無しさん
2008/11/16(日) 22:16:06c でよく採用された実装では、呼び出され側のコードは、呼び出し側の引数の個数や種類に依存しない、というもの。....※
個々の関数は翻訳単位を別にとることが可能ですよね。無論、呼び出し側・呼び出され側の引数のチェックがあればそれにこしたことはないのですが。
で、main() についても呼び出し側でなんらかの仮定があり、それに対応して main() 記述側で記述するわけです。
※によりmain() 呼び出し側は main() の記述側で必要な引数がどうであれ、常に同じものがリンクされるといっていいと思います。
そうであれば、main(void) と書くのは、main() 呼び出し側の仮定と食い違う書き方をしているわけですね。この書き方はcdecl なら問題ありませんが、stdcall のことは考えていませんよね。
int main(void)
は、main() の呼び出し側に思いを馳せていない、という気がどうしてもしてしまいます。
0964デフォルトの名無しさん
2008/11/16(日) 22:17:33つーかそれくらいはぐぐれよ
0966958
2008/11/16(日) 22:21:44プログラムとは縁がほとんどないので、ググってみても、
正しいのかよくわかんなかったのでここで聞かせてもらいました。
msecだと100秒ですか・・・
0968デフォルトの名無しさん
2008/11/16(日) 22:38:20int main(void)
が「正装」なのでしょうか?理解に苦しみます。
これは現行規格の方がおかしいでしょうね。まあ出入り計算は微妙ですけれども
0969デフォルトの名無しさん
2008/11/16(日) 22:39:04お前がチームにいたらクビにする
0970デフォルトの名無しさん
2008/11/16(日) 22:41:06− 返却値の型 int をもち仮引数をもたない関数
int main(void) { /* ... */ }
− 二つの仮引数をもつ関数(仮引数は,これらが宣言された関数に対して局所的であるため,どのような名前を使用してもよいが,ここでは argc 及び argv とする。)
int main(int argc, char * argv[]) { /* ... */ }
− 上に掲げた二つの方法のいずれかと等価な方法
− 上に掲げた三つの方法のいずれでもない処理系定義の方法
int main()は「三つの方法」のいずれでもないので「処理系定義の方法」
つまり移植性がない、動かないコンパイラがあったとしても文句は言えない
一方int main(void)を弾くコンパイラは標準準拠してる限りあり得ないし、あったとしたら堂々と文句が言える
わざわざ移植性のない書き方をする理由がない
0971デフォルトの名無しさん
2008/11/16(日) 22:41:48そんなチームのリーダーには、近づかないほうが賢明というもの。
0972デフォルトの名無しさん
2008/11/16(日) 22:45:34最期の方は間違ってるだろ
0973デフォルトの名無しさん
2008/11/16(日) 22:45:42勝手に埋め込むキチガイ野郎が歓迎される職場なんてねえよ
0974デフォルトの名無しさん
2008/11/16(日) 22:47:45いや、意味を理解しろ。その場のルールがあるのに、
従わないと表明する奴は干されるだろ、JK
0975デフォルトの名無しさん
2008/11/16(日) 22:48:15規約を引用しその考え方を説明していただくのは結構ですし、私もそれは理解しています。けれども今は、引用していただいた規約の正当性/妥当性を問題にしているのですが。
0976デフォルトの名無しさん
2008/11/16(日) 22:49:18たしかにルールがあれば従いますが、「なにも考えずに従え」といわれても‥‥‥。
0977デフォルトの名無しさん
2008/11/16(日) 22:49:56それが出来ない限りお前が言ってるのはただの戯言だ
0978デフォルトの名無しさん
2008/11/16(日) 22:51:55ええ?とりあえずルールには従いますが、ルール自体を常に検討することも必要なのでしょうか?ルールの再検討は批判されるのですか?
私の職場では「業務改善」という標語がありますけれども、一般的ではないのでしょうか?
0979デフォルトの名無しさん
2008/11/16(日) 22:51:56規格って、C言語の規格じゃなくて、その int main については
標準的な記述の仕方であって、べつに強制じゃないんだが・・・
ただ、ひとつ言えるのは、それに従った記述であれば
幅広い環境で通用するということ。人それぞれ、独自の
開発環境はあることだし。ただ、言うまでもないが
void 型で宣言して return 0; ってのは、値を返さない関数では
不適切ではあるが。
0980デフォルトの名無しさん
2008/11/16(日) 22:53:21なんで整数の予約語がintなんだ、integerの方が正しいとか言ってるのと変わらん
何の意味もないし、正しいからって押し通そうとして#define integer intとかやったら迷惑だろ
0981デフォルトの名無しさん
2008/11/16(日) 22:53:36「こんなところでぶちぶちいうこと」が、すなわち変化を求める運動のひとつのつもりなのですが。
0982デフォルトの名無しさん
2008/11/16(日) 22:55:05世界的な規格なんだから世界中同時にやらないと意味がない
お前の職場だけでやってもそれはお前の職場のプログラムが規格から外れるだけだ
だから自分がそんなに正しいと思うならISOに乗り込んで来いよ、な?
0983デフォルトの名無しさん
2008/11/16(日) 22:55:40それはそうですが、
int main(void)
が「より幅広い環境で通用する」書き方かどうかは、とても微妙ですが、異論があるということです。
なお
void main()
の話ではありません。これは問題外であることは承知しております。
0984デフォルトの名無しさん
2008/11/16(日) 22:58:31現在のところ規約には従っています。
でも規約に対して批判もするな、ということですか?それって「全体主義」ではないのでしょうか?
本音はどうであれ、建前でも「批判をするな」というのは、ちょっと考えられない世界なのですが?
もしかしてあなたの世界はまだ太平洋戦争が終わっていないとか?
0985デフォルトの名無しさん
2008/11/16(日) 23:00:12べつに強制じゃなく、あくまでも世界的な標準規格を決めている
組織が提唱する標準スタイル。同じコンパイラでも、バージョンが違えば
その時代による風潮か、違うことも。ただ、最新のであれば、恐らく
int mainだろうがvoid mainだろうが、引数にvoidを書かなくても
適当に解釈してくれるでしょ。
ちなみに、ISO準拠の製品といえば、CDやらDVD、その他
安全基準もあるし、関与することに従っておいて損はない。
0986デフォルトの名無しさん
2008/11/16(日) 23:01:14ただいくら批判した所で標準が変わらない限りはint main()は標準非準拠であることに変わりはないし
int main()を使ったプログラムが標準を無視した移植性のないプログラムであることも変わりない
それが気にくわないならISO行けって言ってるだけだ
0987デフォルトの名無しさん
2008/11/16(日) 23:02:40void main()
はアウトでしょう。さすがに。
0988デフォルトの名無しさん
2008/11/16(日) 23:03:39まあそれはそうでしょうね。
0989デフォルトの名無しさん
2008/11/16(日) 23:04:41int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPervInstance, LPSTR lpszCmdLine, int nCmdShow)も
「上に掲げた三つの方法のいずれでもない処理系定義の方法」である点には何も変わりはない
0990デフォルトの名無しさん
2008/11/16(日) 23:07:08winmain() って pascal 修飾子をつけませんでしたっけ?昔の話だったかな?
0991デフォルトの名無しさん
2008/11/16(日) 23:11:53void main() と int main() に差がないのであれば、あるいは差がないと考えているのであれば、
それは大問題で、みずからの思考方法を再度検討する必要があるのではないでしょうか?
0992デフォルトの名無しさん
2008/11/16(日) 23:12:15うだうだ文句言わずにCなんか窓から外に投げ捨てて、
C++を使うというのはどうだろう?
0993デフォルトの名無しさん
2008/11/16(日) 23:15:52WINAPI が呼び出し規約部分をマクロで隠蔽しているぞなもし
0994デフォルトの名無しさん
2008/11/16(日) 23:18:050995デフォルトの名無しさん
2008/11/16(日) 23:22:57PASCALでもいい。
WINAPIもPASCALもWin32では#defineで__stdcallになるので同じこと。
int main()だけど、C99だと関数定義時に()だと引数がないことを表すという規定がある。
そこから>>970の3つ目、いずれかと等価な方法に当てはまるんじゃないかと思っている。
この解釈が正しいかどうか自信ないし、C89ではどうなのか知らないので、
結局Cではint main(void)と書いているけど。
6.7.5.3の中ほど
並びの中の唯一の項目がvoid型で名前の無い仮引数であるという特別な場合、関数が仮引数を持たないことを指定する。
(中略)
関数定義の一部である関数宣言子で識別子並びが空の場合、関数が仮引数を持たないことを指定する。
関数定義の一部で無い関数宣言子の識別子並びが空の場合、仮引数の個数および型の情報がないことを指定する。
0996デフォルトの名無しさん
2008/11/16(日) 23:25:43http://pc11.2ch.net/test/read.cgi/tech/1201153965/
こっちでやれ
0997デフォルトの名無しさん
2008/11/16(日) 23:27:510998デフォルトの名無しさん
2008/11/16(日) 23:39:000999デフォルトの名無しさん
2008/11/16(日) 23:41:38[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8043.txt
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン:Visual C++
[3.3] 言語:C++
[4] 期限:2008年11月18日10:40まで
よろしくお願いします。
1000デフォルトの名無しさん
2008/11/16(日) 23:45:50回答欲しいならスレ立てよろ
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。