C/C++の宿題を片付けます 76代目

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
あなたが解けないC言語/C++言語の宿題を片付けもらうスレッドです。気に入らない質問やその他や発言はスルーの方向で。
【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して
 投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。
【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):
[3] 環境
 [3.1] OS: (Windows/Linux/等々)
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
 [3.3] 言語: (C/C++/どちらでも可 のいずれか)
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)

【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
【C 関数検索 man on WWW】
http://www.linux.or.jp/JM/index.html

【前スレ】
C/C++の宿題を片付けます 75代目
http://pc8.2ch.net/test/read.cgi/tech/1161257941/
【過去スレ一覧】
http://makimo.to/cgi-bin/search/search.cgi?q=C%2B%2B%82%CC%8Fh%91%E8&andor=AND&sf=2&H=&view=table&D=tech&shw=2000
2デフォルトの名無しさん:2006/11/06(月) 10:12:39
ニダ
3デフォルトの名無しさん:2006/11/06(月) 11:07:32
気が早いよ
4デフォルトの名無しさん:2006/11/06(月) 20:56:11
前スレが落ちたのでage
5デフォルトの名無しさん:2006/11/06(月) 21:03:21
[1] プログラミング
[2] 整数 m と d をを入力し, m 月 d 日が 1 年の何日目にあたるかを表示するプログラムを作成せよ. 例えば, 2 と 1 を入力すると, "2 月 1 日は 1 年の 32 日目です" 等と表示するようにせよ.
閏年は考慮しなくてよい. また, 間違った月日 (例えば, m=13 や m= 4, d=31 等) が入力された場合には, 入力が間違っている旨を表示して終了するようにせよ.

※ m月d日 → 1月〜m-1月の日数の和を求め, それに d を足せばよい.
[3]
 [3.1] windowsXP sp2
 [3.2] cygwin
 [3.3] C
[4] 2006年 10月6日(今日中にアップロード)
[5] 配列って分野の宿題です。なるべく簡単な書き方でお願いします。
6デフォルトの名無しさん:2006/11/06(月) 21:07:14
>>5
閏年はどう扱う?
7デフォルトの名無しさん:2006/11/06(月) 21:07:46
>>6
4行目が読めないのか?
8デフォルトの名無しさん:2006/11/06(月) 21:08:43
このすれって監視されてる?
友達がばれたとか言ってたけど釣り?
9デフォルトの名無しさん:2006/11/06(月) 21:10:29
>>7
すまん。読めてなかった。吊ってくるorz
10デフォルトの名無しさん:2006/11/06(月) 21:11:56
>>8
利用させてもらうこともあるけど、
書き方とか定義する文字とか変えて絶対自分だって分からないようにしてる。
11デフォルトの名無しさん:2006/11/06(月) 21:17:16
>>5
#include<stdio.h>
#include<stdlib.h>

int main(void){
int day_list[]={0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int day_sum;
int m, d, i;

printf("Input date month day :");
scanf("%d %d", &m, &d);
if(m<1 || m>12 || d<1 || d>day_list[m]){
printf("\n入力が間違っています\n");
exit(1);
}

day_sum=d;
for(i=0;i<m;i++)
day_sum+=day_list[i];
printf("%d 月 %d 日は 1 年の %d 日目です\n", m, d, day_sum);

return 0;
}
12デフォルトの名無しさん:2006/11/06(月) 21:35:22
scanf
とか
printf

f
って何?
13デフォルトの名無しさん:2006/11/06(月) 21:39:16
>>12
宿題なのか?
f(ormat)
14デフォルトの名無しさん:2006/11/06(月) 21:40:18
formatのfじゃね?
15デフォルトの名無しさん:2006/11/06(月) 21:40:31
>>12
formatじゃね?
16デフォルトの名無しさん:2006/11/06(月) 21:44:27
友達が「すきゃんふ」「ぷりんとふ」って発音してくるから
最近は、本当は意味なんてないんじゃないかと思い始めてた
17デフォルトの名無しさん:2006/11/06(月) 21:48:40
とうふぷりん?
18デフォルトの名無しさん:2006/11/06(月) 21:54:05
>>16
意味なんてあるわけないじゃん
19デフォルトの名無しさん:2006/11/06(月) 21:58:01
Format = 書式指定 のこと。とマジレス。
char とかstrlen とか、Cの用語には読み方が分かれるものが多いね。
20C言語の問題くれよ(GUI無しで):2006/11/06(月) 21:58:47
>>16
<豆知識>
atof → あ、豆腐 → 豆腐は柔らかい → 固定されていない → 浮動小数点数に変換
間違っても ascii to float ではない
21デフォルトの名無しさん:2006/11/06(月) 22:16:37
オマエラもっとアホ知識をひけらかして下さい
22デフォルトの名無しさん:2006/11/06(月) 23:29:55
平均値と標準偏差を求める過程で出す「合計」の値を
表示させようとしたらそこだけバグるんだけど。
例えばm=sum/n が平均だとすると
mはちゃんとした数字出るけどsumはバグってる。
sumそのままprintしようとしちゃいけないんでしょうか。

これだけしか書かなくて分かるだろうか。
23デフォルトの名無しさん:2006/11/06(月) 23:32:10
>>22
わからん。テンプレ嫁。
まぁ書式指定子がどっかおかしいんだろうとは思うが。
24デフォルトの名無しさん:2006/11/06(月) 23:35:55
>>23 に同意
表示部分と変数宣言だけでも晒すべし
25デフォルトの名無しさん:2006/11/06(月) 23:43:16
>>20
そもそも固定小数点型なんてあったっけ?
26デフォルトの名無しさん:2006/11/06(月) 23:44:24
>>25
ネタにマジレスかこわるい
27デフォルトの名無しさん:2006/11/06(月) 23:45:28
>>25
整数型が狭義の固定小数点型
28デフォルトの名無しさん:2006/11/06(月) 23:46:35
>>26
>>25がマジレスだと思ってるのか?
29デフォルトの名無しさん:2006/11/06(月) 23:48:14
>>23
うまくいかないのがほんの一部だけで、全部晒すと効率悪いと思って
>>24


#include<limits.h><math.h><stdio.h>(全部)

int i,x[n];
double sum,m,s,v;

中略

for(sum=0.0,i=0;i<n;i++)
{
sum += x[i];
}

m=sum/n;

for(sum=0.0,i=0;i<n;i++)
{
sum += (x[i]-m)*(x[i]-m);
}
v=sum/n;
s=sqrt(v);

printf("合計%f\n",sum);
printf("平均%f\n",m);
printf("標準偏差%f\n",s);
return終わり

です
30デフォルトの名無しさん:2006/11/06(月) 23:54:29
再現できないバグは存在しないことになっている
31デフォルトの名無しさん:2006/11/06(月) 23:54:46
>>29
書いてあるとおりに動いているだけじゃないのか?
sum を上書きしてしまってるの忘れてるとかな
32デフォルトの名無しさん:2006/11/06(月) 23:55:02
>>29
sumがバグってるとはどのような状況か?
異常なものが表示されるのか、
表示されないのか、
暴走するのか?
はっきりさせろ。
33デフォルトの名無しさん:2006/11/06(月) 23:55:04
>>29
出来ればどうバグってるのか教えておくれ。
オレはてっきり出力が”あqwせdrftgyふじこ”になってるんだと
思ってたんだけど、違うっぽいし。

あとドットとか本でした見た事なかったよ。
34デフォルトの名無しさん:2006/11/07(火) 00:02:39
>>31
親切にありがとうございます。
気付きました。
35デフォルトの名無しさん:2006/11/07(火) 00:41:28
[1] 授業単元:情報処理
[2] 問題文(含コード&リンク):
オイラーの予想:
オイラー(Euler, 1707年-1783年)は、1769年頃に、
「a^5+b^5+c^5+d^5=e^5を満足する正の整数はない」という予想を立てた。
コンピュータを用いて、偉大な数学者であるオイラーの予想を覆せ。
また、このプログラムは多少時間がかかることが予想されるので、
効率よくプログラムを組むこと。そのため、すべてを計算すると大変なので、
a<b<c<d<e<200を仮定してよい。

ヒント:
カウンタ変数を5つ用意して5重ループを構成する。
ループ数が多くなるので計算量に注意されたい。
200^5程度の値になると、通常のint型の表現範囲を超えるので注意すること。
答えは、次のとおり
a=27,b=84,c=110,d=133,e=144
a^5=14348907,b^5=4182119424,c^5=16105100000,d^5=41615795893,e^5=61917364224
c^5,d^5,e^5は、int型の表現範囲を超えているので、注意してください。

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:Microsoft Visual C++ 6.0
 [3.3] 言語: C++
[4] 期限: 2006年11月7日まで
[5] その他の制限: この答え以外でも存在したら表示して欲しいです。
36デフォルトの名無しさん:2006/11/07(火) 00:49:32
この答えは自力で出したの?
意地悪で聞いてるわけじゃなくて,手元にある程度プログラムが出来てるのか確かめておきたい
37デフォルトの名無しさん:2006/11/07(火) 00:55:47
答えは与えられたものです。
このプログラムは出来ています。
他の答えをだすプログラムを知りたくて。
38デフォルトの名無しさん:2006/11/07(火) 00:58:05
他のも何も、見つかった時にそこで終わらずprintfでabcde表示して続行すればいいだけじゃないの?
単純に考えて・・・
39デフォルトの名無しさん:2006/11/07(火) 01:05:39
そうですよね。
ありがとうございます。
40デフォルトの名無しさん:2006/11/07(火) 01:40:13
a=54, b=168, c=220, d=266, e=288
ってのがあったけど200超えてるしな。
41デフォルトの名無しさん:2006/11/07(火) 01:51:37
>>11
ありがとうございました。
42デフォルトの名無しさん:2006/11/07(火) 01:57:39
[1] 授業単元: 数値解析
[2] 問題文(含コード&リンク):3元連立方程式をガウスザイデル法で解くプログラムを作成せよ
[3] 環境
 [3.1] OS: (Windows/Linux/等々) Windows
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) Microsoft Visual C++ 6.0
 [3.3] 言語: C
[4] 期限:水曜日まで
[5] その他の制限:

参考書にアルゴリズムは色々書いてあるけど
これをどうやってプログラムで書けばいいか分かりません・・・
43デフォルトの名無しさん:2006/11/07(火) 02:10:00
>>42
http://www.vector.co.jp/soft/dl/data/prog/se002453.html

この中のgseidel.c

というのはあまりにやっつけだろうか
44c不明な人:2006/11/07(火) 13:10:25
1] 授業単元:情報処理U
[2] 問題文(含コード&リンク):二つの整数n , r をキーボードから入力し,組合せの数nCrを画面表示するプログラムを作成
しなさい.ただし,組合せの数を求める関数のプロトタイプを「int combination(int, int)」,
整数値の階乗を求める関数のプロトタイプを「int kaijo(int)」としてプログラムすること. n や
r を大きくとるとオーバフローすることがあるが,本課題では考慮しなくてよい.
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:[2006年11月10日まで]
[5] その他の制限:なし

よろしくお願いします。。。
45デフォルトの名無しさん:2006/11/07(火) 13:15:45
>>44
前スレで見たよ、それ
46デフォルトの名無しさん:2006/11/07(火) 13:17:20
(x_a-x_b)(x_c-x_b)+(y_a-y_b)(y_c-y_b) / √(((x_a-x_b)^2+(y_a-y_b)^2)((x_c-x_b)^2+(y_c-y_b)^2))
をプログラムで書こうとして、

((x[i]-x[i+1])(x[i+2]-x[i+1])+(y[i]-y[i+1])(y[i+2]-y[i+1]))
/sqrt(((x[i]-x[i+1])^2+(y[i]-y[i+1])^2))*((x[i+2]-x[i+1])^2+(y[i+2]-y[i+1])^2)))
と書いてみたのですが、エラーばっかりです。
x[i+1]と言う表現はダメなんでしょうか?
どのように表現すればいいでしょうか?
また、^2という表現も使えないのでしょうか?
どのように記述すればよいでしょうか?
言語はcです
47c不明な人:2006/11/07(火) 13:19:40
もう1つです。よろしくお願いします。
1] 授業単元:情報処理U
[2] 問題文(含コード&リンク):x を-2.8 以上2.8 以下の範囲で0.02 ずつ変化させ, y = cos x 及びy = sin x の値を画面表
示するプログラムを作成しなさい.ただし, y = cos x 及びy = sin x は,次式に示す多項式
cosx=1-x^2/2!+x^4/4!-x^6/6!+x^8/8!-x^10/10!
sinx=x-x^3/3!+x^5/5!-x^7/7!+x^9/9!-x^11/11!
により計算すること.また,これらの計算を行う関数のプロトタイプをそれぞれ「double
mycos(double)」,「double mysin(double)」とし,課題1(↑の44の問題です。)で作成した「kaijo()」関数を利用す
ること.
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:[2006年11月10日まで]
[5] その他の制限:なし

改めてよろしくお願いしますm(__)m
48デフォルトの名無しさん:2006/11/07(火) 13:29:27
>>46
>・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。

配列宣言してないんじゃないのって気がするがな

そもそもそこで配列を使いたい理由がわからん
49c不明な人:2006/11/07(火) 13:30:12
>>47 すいません!0.02じゃなくて0.1でした。
>>45 それってどこですか?
50デフォルトの名無しさん:2006/11/07(火) 13:30:31
[1] 授業単元:
[2] 問題文(含コード&リンク): 引数で受け取った全角文字列を逆順に入れ替える
int reverse_string(char *str)を作成せよ。
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: Borland C++ Compiler 5.5 
 [3.3] 言語: C
[4] 期限:2006年11月8日

半角英数字はうまくいくのですが2バイト文字の場合がわかりません。
よろしくお願いします。
5150:2006/11/07(火) 13:31:48
#include <stdio.h>
int reverse_string(char *str)
{
char *p,tmp;
p=str;
for(;*p !='\0';p++);
for(;p-str>0;str++){
tmp=*(--p);
*p=*str;
*str=tmp;
}
return 0;
}
main(void)
{
char str[50]="C言語";
printf("reverse_string関数実行前\n%s\n",str);
printf("reverse_string関数実行後\n");
reverse_string(str);
printf("%s\n",str);
return 0;
}
52デフォルトの名無しさん:2006/11/07(火) 13:36:02
配列は 
#define M 4096
double x[M], y[M], z[M];
で確保してあります。

error C2064: 関数ポインタとして評価されない式を使って、関数を呼び出そうとしました。
error C2296: '^' : 不正な左オペランドです。
こんな感じです。

>そもそもそこで配列を使いたい理由がわからん
配列に連続した座標が入っているので。
一つずつ動かして判定したいのです。
53デフォルトの名無しさん:2006/11/07(火) 13:36:25
まずは、math.hのpow関数を勉強しようぜ
期限もまだあることだし
54デフォルトの名無しさん:2006/11/07(火) 13:40:51
>>52
error C2296: '^' : 不正な左オペランドです。  というエラーメッセージを見る

^2という表現は使えないのかな と気づく←ここまで出来てる

C 演算子でググる

^はxorに使われていることを知る

じゃあべき乗はどう表すのか疑問に思う

C べき乗でググる

math.hのpowを使うことが分かる

はぁ・・・
55デフォルトの名無しさん:2006/11/07(火) 13:44:11
c言語で英文を入力し,その英文の単語を全て出力するソースコードを作って頂きたいのですが
56デフォルトの名無しさん:2006/11/07(火) 13:46:04
5746:2006/11/07(火) 13:56:11
です。
ありがとうございます。
べき乗については解決いたしました。

(x[i]-x[i+1])
のみだとエラーは出ないのですが、

(x[i]-x[i+1])(x[i+2]-x[i+1])
と書くと
error C2064: 関数ポインタとして評価されない式を使って、関数を呼び出そうとしました。
となります。
なぜなんでしょうか???
58デフォルトの名無しさん:2006/11/07(火) 14:00:26
すいません初心者で(汗)
[1] cis english 2
[2] 問題文
英文を入力し,その英文の単語を全て出力するソースコード
[3] 環境
 [3.1] OS: WindowsXP
 [3.2]gcc
 [3.3] C
[4] 期限:2006年11月12日12:00まで
[5] その他の制限:なし
59デフォルトの名無しさん:2006/11/07(火) 14:02:19
>>58は重複した単語に関する指定ないし
.,!?;:"'取り除くだけで答えになってしまうんじゃないだろうか

出てきた単語は昇順に並べ替えるとか 指定ないの?
60デフォルトの名無しさん:2006/11/07(火) 14:05:24
[1] 授業単元:数値解析
[2] 問題文:
ガウスの消去法を用いたプログラムで微分方程式を解く
f(0)=0,f(pi/2)=1の条件でf''(x)+f(x)を解け

[3] 環境
 [3.1] OS:linux
 [3.2] コンパイラ名とバージョン: gcc 2.95
 [3.3] 言語: C言語
[4] 期限: レポート提出があるので可能なら今日、できれば明日まで
[5] その他の制限: 特にありません

現在
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2897.c
までプログラムが進んでいます

数値の入力の直後にセグメンテーション違反です。と表示され終了してしまいます
微分方程式を解くときの数値などは問題ないはずなのですが、
17行目のscanfのところで止まってしまいます。

このエラーをどうにかする方法はないでしょうか?力を貸して頂ければ幸いです
61デフォルトの名無しさん:2006/11/07(火) 14:06:15
>>57
釣り?
掛け算は*だべ。
6260:2006/11/07(火) 14:07:48
>>60
微分方程式が間違っていました
正しくはf''(x)+f(x)=0です
6346:2006/11/07(火) 14:09:02
>>61さん
すみませんでした・・・・アホすぎました。
ありがとうございます。
死んできます。
64デフォルトの名無しさん:2006/11/07(火) 14:10:31
>>63
いい意味でアメリカのラテン系移民の英語みたいなガッツを感じます。
65デフォルトの名無しさん:2006/11/07(火) 14:59:05
>>44
脳内コンパイラ
#include<stdio.h>
main() {
int kotae,n,r;
printf("nCrを計算するにゃん\n");
printf("nの値を入力するにゃん\n(n>=0にゃん)");
scanf("%d",&n);
if(n<0){
printf("死ねにゃん");
exit(1);
}
printf("rの値を入力するにゃん\n(0<=r<=nにゃん)\n");
scanf("%d",&r);
if(r>n||r<0){
printf("死ねにゃん");
exit(1);
}
printf("計算開始にゃん\n");
kotae = combination(n,r);
printf("答えは%dにゃん\a",kotae);
}

int kaijo(int x) {
if(x=1||x=0){return 1};
return x*kaijo(x-1);
}
int combination(int n, int r) {
int c;
c = kaijo(n)/(kaijo(r)*kaijo(n-r));
return c;
}
66デフォルトの名無しさん:2006/11/07(火) 15:06:41
脳内失敗

int kaijo(int x) {
if(x=0)
return 1;
return x*kaijo(x-1);
}
67デフォルトの名無しさん:2006/11/07(火) 15:07:24
いや、まだ失敗してるから
if ( x == 0 ) だろうが
68デフォルトの名無しさん:2006/11/07(火) 15:07:28
脳内大失敗
int kaijo(int x) {
if(x==0)
return 1;
return x*kaijo(x-1);
}
69デフォルトの名無しさん:2006/11/07(火) 15:31:33
#include <stdio.h>
#include <math.h>
main(){
double i,y1,y2;
for (i=-2.8;i<=2.8;i=i+0.02){

省略
指定された書式で思い思いに表示してください

}
}

double mycos(double x){
int n;
double y=0;
for(n=10;n>=2;n=n-4){
y=y-pow(x,n)/kaijo(n)+pow(x,n-2)/kaijo(n-2);
}
return y;
}

double mysin(double x){
int n;
double y=0;
for(n=11;n>=3;n=n-4){
y=y-pow(x,n)/kaijo(n)+pow(x,n-2)/kaijo(n-2);
}
return y;
}

展開式はアンロールしたよ その方が早いから(言い訳
70デフォルトの名無しさん:2006/11/07(火) 16:27:45
59さん、説明不足ですいません。書き出すだけで順番の指定はありません。重複した単語は@つにまとめる必要があるみたいです(>_<)
71デフォルトの名無しさん:2006/11/07(火) 16:28:26
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
#include <stdio.h>
#include<string.h> 
int main(void)
{
int i;
char str_num[10] = "123456789";
char str_alpha[6] = "abcde";
for(i=0;i<10;i++){
strcpy(str_num, "123456789");  /* @ */
strncpy(str_num, str_alpha, i); /* A */  
printf("i=%d, str_num:\"%s\"\n", i, str_num); /* B */
}
return 0;
}
このプログラムの
@をstrcpy(str_alpha, "abcde");
Aをstrncpy(str_alpha, str_num, i);
Bをprintf("i=%d, str_alpha=\"%s\"\n", i, str_alpha);
とした場合の実行結果について説明し、strncpy()の動作について説明
しなさい。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: 分かりません
 [3.3] 言語: C
[4] 期限: 明日の朝まで
よろしくお願いします。
72デフォルトの名無しさん:2006/11/07(火) 16:44:00
コンパイラ名とバージョン: 分かりません

ちょwwww分かれwwwwww
7371:2006/11/07(火) 17:04:28
>>72
申し訳ないです。
コンパイラ名とバージョンは教えてもらってないです。
74デフォルトの名無しさん:2006/11/07(火) 17:09:23
>>71
kore.jikkou.sure.ba.ii.dake.jamaica!
75sage:2006/11/07(火) 17:21:14
1] 授業単元:プログラミング
[2] 問題文 番号と名前をメンバとする構造体を作成し、3件分のデータ表示を行うプログラムを作成せよ。
番号は3桁までとし、3桁を超える場合やすでに入力済みの数字が入力された場合はエラーを表示せよ。
 [3.1] OS:unix
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:[2006年11月9日まで]
[5] その他の制限:なし

特に番号の重複エラーの処理がよくわからないのでよろしくお願いします。
7671:2006/11/07(火) 17:24:41
>>74
もちろん実行したのですが、
/* @ */
/* A */  
/* B */
を変えることによって、なぜこの様な実行結果になったかを説明しないと
いけないのです。
なぜこの様な実行結果になったかが解らなくて。
77デフォルトの名無しさん:2006/11/07(火) 17:36:39
>>76
strcpy.to.strncpy.wo.google
78デフォルトの名無しさん:2006/11/07(火) 18:32:35
[1] 授業単元: 情報A
[2] 問題文(含コード&リンク): 数字を二つ入力したとき、その二つの数字の間の全ての数の和(シグマ計算)
を出力する(1と10を入力すると55、のような)プログラムをif と gotoを用いて2パターン以上作成せよ。
[3] 環境
 [3.1] OS: (Windows
 [3.2] コンパイラ名とバージョン: 初心者なもので何のことか…
 [3.3] 言語: C++
[4] 期限: ([今年11月10日まで]
[5] その他の制限:超初心者なのでなるべく単純な方法でお願いします。m(_ _ )m
79デフォルトの名無しさん:2006/11/07(火) 18:38:32
>>76
ヒント web: manpage of strcpy
80デフォルトの名無しさん:2006/11/07(火) 19:37:49
>>35
作ってはみたが、時間がかかりすぎる。
それでもいいなら、アップする
CPU600MHz → 推定12時間以上?アリエネ
枝狩りのアルゴリズム考えないとな
81デフォルトの名無しさん:2006/11/07(火) 19:38:53
>>78
#include <stdlib.h>
main(){
int s,m,n;
scanf("%d",&m);
scanf("%d",&n);
s=(m+n)*(abs(m-n)+1)/2;
printf("%d",s);
}
82デフォルトの名無しさん:2006/11/07(火) 19:42:30
>>78
1)
#define go int
#define gogo if(
#define toog )
#include<stdio.h>
go amain(){
    go gog,gg,tot=0;scanf("%d%d",&gog,&gg);
    goto to;gdg:++gog;goto to;togo:tot += gog;goto gdg;
    to:gogo gog <= gg toog goto togo;printf("%d\n",tot);
}
2)
#define go int
#define gogo if(
#define toog )
#include<stdio.h>

go og(go gg){gg/10&&og(gg/10);putchar(gg%10+48);}
go main(){
    go gog,gg,tot=0;scanf("%d%d",&gog,&gg);
    goto to;gdg:++gog;goto to;togo:tot += gog;goto gdg;
    to:gogo gog <= gg toog goto togo;
    og(tot);
}
8381:2006/11/07(火) 19:49:05
#include <stdio.h> ぬけてた
84デフォルトの名無しさん:2006/11/07(火) 19:50:53
>>81 さらに条件を満たすために最後に追記しては?
if(1) goto owari;
owari:
85デフォルトの名無しさん:2006/11/07(火) 20:01:54
>>84
先生がイラつくこと間違い無しの良解答だな
86デフォルトの名無しさん:2006/11/07(火) 20:11:45
goto文を使わせるなんてどういう教育してるんだか。
最近の教科書にはどんどん使いましょうとか書いてあるのか。
87デフォルトの名無しさん:2006/11/07(火) 20:12:20
IOCCC は anderson.c が最高傑作だと思う。
88デフォルトの名無しさん:2006/11/07(火) 20:19:26
>>58
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define BUF_SIZE 1024
typedef struct tag_word_list{
char *word_data;
struct tag_word_list *next;
}word_list;
void word_add(const char *one_word, word_list **start){
word_list *wl;
for(wl=*start;wl!=NULL;wl=wl->next)
if(strcmp(one_word, wl->word_data)==0) return;
wl=malloc(sizeof(word_list));
wl->word_data=strdup(one_word);
wl->next=*start;
*start=wl;
}
int main(void){
char one_word[BUF_SIZE], dummy[BUF_SIZE];
word_list *wl=NULL;
while(!feof(stdin)){
one_word[0]='\0';
if(fscanf(stdin, "%[a-zA-Z-]", one_word)==1) word_add(one_word, &wl);
fscanf(stdin, "%[^a-zA-Z-]", dummy);
}
for(;wl!=NULL;wl=wl->next)
printf("%s\n", wl->word_data);
return 0;
}
89デフォルトの名無しさん:2006/11/07(火) 20:31:37
[2] 問題文(含コード&リンク):
以下の様なプログラムを作りなさい。
・メイン関数の引数を用いてユーザ名とパスワードの前半部分を入力する。
・scanfを用いてパスワードの後半部分の入力を要求する。
・前半部分と後半部分を連結して1つのパスワードにする。
・前もって決めたパスワードと一致するか調べ、一致する場合には「OK, ユーザ名」のメッセージを
表示し、一致しない場合はパスワードの文字数を表示する。
以下、自分で考えてみたプログラムです。
#include<stdio.h>
#include<string.h>
#define MAX 20
int main(int argc, char *argv[]) /* ユーザ名をargv[1]としてパスワードの前半をargv[2]とします。*/
{char x[MAX], y[MAX], password[MAX]=abcd;
int i, k, flag=1;
scanf("%s", x);
y[MAX] = *strcat(argv[2], x);
k = strlen(strcat(argv[2], x));
for(i=0;i<=3;i++){
flag *= (y[i] == password[i]);}
if(flag == 1)
printf("OK, %s\n", argv[1]);
else
printf("パスワードの長さ:%d", k);}
ユーザ名はVVVでパスワードの前半はabで実行しパスワードの後半はcdを入力してみたのですが、
ちゃんとなりませんでした。どこをどのように訂正すれば良いのでしょうか?
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語: C
[4] 期限: 2006年11月8日18:00まで
[5] その他の制限: C言語を始めて4ヶ月程度なのであまり上級な知識は避けて頂けると助かります。
90デフォルトの名無しさん:2006/11/07(火) 20:34:42
>>35
#include <stdio.h>
#include <time.h>
void p(int i) { printf("%d ", i); fflush(stdout); }
int proc(void)
{
int a, b, c, d, e; double x, y, z, f[200];

for (e = 1; e < 200; e++)
f[e] = (double)e * e * e * e * e;
for (e = 1; e < 200; e++)
for (p(e), d = 1; d < e; d++)
for (c = 1; c < d && (z = f[c] + f[d]) < f[e]; c++)
for (b = 1; b < c && (y = f[b] + z) < f[e]; b++) {
for (a = 1; a < b && (x = f[a] + y) < f[e]; a++)
;
if (x == f[e])
return !printf("\na=%d b=%d c=%d d=%d e=%d\n",
a, b, c, d, e);
}
return printf("not found\n");
}
int main(void)
{
clock_t t = clock();
proc();
printf("%g\n", difftime(clock(), t) / CLOCKS_PER_SEC);
return 0;
}
91デフォルトの名無しさん:2006/11/07(火) 20:39:18
パスワードはパスワード用のライブラリ関数を使うべき
92デフォルトの名無しさん:2006/11/07(火) 20:42:01
[1] 授業単元: プログラミングI(C)
[2] 問題文(含コード&リンク): 引数で受け取った全角文字列を逆順に入れ替える
int reverse(char *str)を作成せよ。
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: VC 6.0
 [3.3] 言語: C
[4] 期限:明日まで
[5] その他の制限: インクルードはstdio.hのみでお願いします。

「C言語プログラミング」と文字列に入れたら「グンミラグロプ語言C」と出力されるようにお願いします。
93デフォルトの名無しさん:2006/11/07(火) 20:43:08
お願いします
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):ある商店でメロンを販売している。この商店では購入個数が増えると1個あたりの単価が安くなる。メロン1個の仕入価格は1000円である。またメロンの購入個数と単価の関係は以下のようになっている。
 5個未満:1個あたり2000円
10個未満:1個あたり1900円
15個未満:1個あたり1500円
20個未満:1個あたり1400円
20個以上:1個あたり1200円
客がn人買いにきたとして、格客の購入個数を入力し、それぞれの支払い価格と商店の総販売価格と総利益出力するプログラムを作成せよ。nはプログラム開始時に読み込むこと。
[3] 環境
 [3.1] OS:Windows
 [3.3] 言語:C++
[4] 期限:明日
94デフォルトの名無しさん:2006/11/07(火) 20:47:19
>>89
password[MAX]=abcd;

password[MAX]="abcd";

y[MAX] = *strcat(argv[2], x);

sprintf(y, "%s%s", argv[2], x);

for(i=0;i<=3;i++){
flag *= (y[i] == password[i]);}

flag=(strcmp(y, password)==0);
95デフォルトの名無しさん:2006/11/07(火) 20:59:06
>>89
return忘れてるぞ
96デフォルトの名無しさん:2006/11/07(火) 20:59:26
>>92
文字コードの指定はないのか?
内部で判別するの?
シフトJIS限定?
97デフォルトの名無しさん:2006/11/07(火) 21:03:46
>>92
>引数で受け取った全角文字列を逆順に入れ替える
>〜と出力されるように

どっちだ?
むしろ出力したら駄目なんじゃないかな?かな?
9892:2006/11/07(火) 21:04:37
文字コードの指定はありませんでした。
9989:2006/11/07(火) 21:17:45
レスありがとうございます。
>>94
あ、「"」つけるの忘れてました。

y[MAX] = *strcat(argv[2], x);

sprintf(y, "%s%s", argv[2], x);
についてですが、sprintfは、まだ習って無いです。strcatを使って出来ないですかね?
strcatにアスタリスクを付けなければ、うまくいきそうなのですが、
それだとコンパイルに通らないですし。

>>95
あ、リターンも忘れてました。
100デフォルトの名無しさん:2006/11/07(火) 21:21:46
(;´Д`)つ $man strcat
10192:2006/11/07(火) 21:21:48
#include <stdio.h>
int reverse(char *str)
{
char *p, tmp;
p = str;
for( ; *p != '\0' ; p++);
for( ; p-str > 0 ; str++){
tmp = *(--p);
*p = *str;
*str = tmp;
}
return 0;
}
main(void)
{
char str[30]="abcde";
printf("reverse関数実行前\n%s\n",str);
printf("reverse関数実行後\n");
reverse(str);
printf("%s",str);
return 0;
}

1バイト文字をreverse関数で逆順に並べ替えて、main関数で出力はできたのですが、
2バイト文字だと文字化けしてしまいます。
102デフォルトの名無しさん:2006/11/07(火) 21:23:27
ここが合ってるのかわからないのですが質問させていただきます。

今逆行列を求めるプログラムを作っていて
完全陰解法とSOR法では作り終えてるんですが
行列を増やすとそれほど精度が出ない(発散してしまう)ので困っています。
他に逆行列(n元一次方程式)を解く方法はないのでしょうか?
またよいサイトなどありましたら教えてください。
103!=94:2006/11/07(火) 21:24:40
>>99
> strcatにアスタリスクを付けなければ、うまくいきそうなのですが、
うん、strcatでもいけるんだな。
ただ、strcatは何を返すの?そして、*演算子は何をするもの?

char y[MAX];

と定義した変数yの型は何?配列とポインタ理解してる?
104デフォルトの名無しさん:2006/11/07(火) 21:30:18
>>92
int reverse(char *str)
{
char *p, tmp;
p = str;
for( ; *p != '\0' ; p++);
for( ; p-str > 0 ; str+=2){
tmp = *(--p,--p);
*p = *str;
*str = tmp;
tmp = *(p+1);
*(p+1) = *(str+1);
*(str+1) = tmp;
}
return 0;
}
10592:2006/11/07(火) 21:39:07
みなさんありがとうございました。
2バイト文字が正常に逆順に出力されました。

宿題ではないのですが、
もしこれが1バイト文字、2バイト文字が混合されていた場合はどうすればいいのでしょうか?
106デフォルトの名無しさん:2006/11/07(火) 21:41:17
cygwin
[1] 情報演習のスキルT
[2] 素数を求めるプログラム
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] cygwin
 [3.3] C
[4] 期限: 11月14日


お願いします。
107デフォルトの名無しさん:2006/11/07(火) 21:42:34
>>105
文字コードがわからなきゃムリ
108デフォルトの名無しさん:2006/11/07(火) 21:44:44
>>105
1) 固定長のwchar_tに変換して処理→単一の処理、変換の必要あり
2) 文字種(1バイト文字か2バイト文字か)を判別して処理→エンコードごとに処理が別、変換の必要なし
109デフォルトの名無しさん:2006/11/07(火) 21:45:48
文字コードの種類によって判別法は違う。
UNICODEは全部2バイトだから判別する必要なし
JISはエスケープシーケンスの切り替えを検出
シフトJISは2バイト文字の1バイト目かどうか調べる
EUCは最上位ビットを検査
110デフォルトの名無しさん:2006/11/07(火) 21:51:27
cygwin ってコンパイラなん
111デフォルトの名無しさん:2006/11/07(火) 21:53:32
>>106
#include <stdio.h>
int main()
{
char s[8]
puts("素数を入力してください");
gets(s);
return 0;
}
112再帰式:2006/11/07(火) 21:56:05
[1] 授業単元:非線形方程式の解(反復法)
[2] 問題文(含コード&リンク):x^3-2x+5=0の近似解を反復法により計算せよ。
  参考URL(反復法):http://ja.wikipedia.org/wiki/%E5%8F%8D%E5%BE%A9%E6%B3%95_(%E6%95%B0%E5%80%A4%E8%A8%88%E7%AE%97)
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:不明
 [3.3] 言語:C
[4] 期限:明日の午前中までにお願いいたします

@
#include <stdio.h>
#include <math.h>
#define g(x) (pow(x, 3)+2*x-5)/(2*pow(x, 2))
int main(void)
{ double e,f,x,x1;

e=pow(10,-7.0);
f=fabs(x1-x);
x1=1000;

while(f > e)
{ f=fabs(x1-x);
x=x1;
x1=g(x);
}

printf("解は%1.16lf\n",x1);
return 0;
}

113再帰式:2006/11/07(火) 21:57:49
A
#include <stdio.h>
#include <math.h>
int main(void)
{
double e,f,x,x1,Xn;

e=pow(10,-7.0);
f=fabs(x1-x);
x1=1000;

while(f > e)
{
Xn=(pow(x, 3)+2*x-5)/(2*pow(x, 2));
f=fabs(x1-x);
x=x1;
x1=Xn;
}

printf("解は%1.16lf\n",x1);
return 0;
}

@とAの違いはどこなのでしょうか?
できればAで実行して成功させたいのですが、どこがおかしいのか分かりません。
アドバイスお願いいたします。
114デフォルトの名無しさん:2006/11/07(火) 21:59:52
>>105 winXPなんだしS-JIS決め打ちで。
/*
  pが指すマルチバイト文字の長さを返す
  このへんはmbrlenとか使ったほうがいい気もするけど
  stdio.hしか使うなという条件を守るために使わない
*/
size_t mblen(const char*p){
    /* S-JIS決め打ち */
    return (*p&0x80) ? 2 : 1;
}
/*
 指定したメモリブロックをreverseする
*/
void memrev(char*str,size_t n){
    char*p = str+n;
    if(str == p)return;/*C言語のポインタの有効範囲の仕様を守るため*/
    for(;str < --p;++str){
        char c=*str;*str=*p;*p=c;
    }
}
/*
 マルチバイト文字を考慮したreverse
*/
void reverse(char*str){
    int len = 0;
    while(str[len]){
        int c = mblen(str+len);
        memrev(str+len,c);
        len+=c;
    }
    memrev(str,len);
}
115デフォルトの名無しさん:2006/11/07(火) 22:00:52
>>106
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int *sieve_of_eratosthenes(int upper) {
    int i, notprime, *integers = (int*)malloc(sizeof(int) * (upper + 1));
    for (i = 2; i <= upper; i++) integers[i] = 1;
    integers[0] = integers[1] = 0;
    for (i = 2; i <= upper / 2; i++) {
        notprime = i;
        while ((notprime += i) <= upper) integers[notprime] = 0;
    }
    return integers;
}
int is_prime(int n) {
    int *sieve = sieve_of_eratosthenes(n), ret = sieve[n];
    free(sieve);
    return ret;
}
int main(void) {
    int upper_num, *sieve, i;
    printf("MAX?:");
    scanf("%d", &upper_num);
    sieve = sieve_of_eratosthenes(upper_num);
    for (i = 2; i <= upper_num; i++)
        if (sieve[i]) printf("%4d", i);
    free(sieve);
}
116デフォルトの名無しさん:2006/11/07(火) 22:07:10
[1] 授業単元:
[2] 問題文(含コード&リンク):第1因数に含まれる第2因数と第3因数の間にある文字列を返す関数を作る(因数はすべて文字列)
[3] 環境
 [3.1] Linux
 [3.2] gcc 3.4
 [3.3] C
[4] 期限: 11/9
[5] その他の制限:特になし

117デフォルトの名無しさん:2006/11/07(火) 22:07:52
>>115
    for (i = 2; i <= upper / 2; i++) {
+        if (!integers[i]) continue;
        notprime = i;

これがないと篩になってないかと。
118デフォルトの名無しさん:2006/11/07(火) 22:10:47
>>115
なんで表示してるの?
11992:2006/11/07(火) 22:16:58
みなさんいろいろありがとうございました。
120デフォルトの名無しさん:2006/11/07(火) 22:20:01
>>93
#include<stdio.h>
int get_price(int number){
if(number<5) return 2000;
if(number<10) return 1900;
if(number<15) return 1500;
if(number<20) return 1400;
return 1200;
}
int main(void){
int i, n, m;
int total_price=0, total_profit=0;

printf("客の人数を入力してください ");
scanf("%d", &n);
for(i=0;i<n;i++){
printf("購入個数を入力してください ");
scanf("%d", &m);
total_price+=m*get_price(m);
total_profit+=m*(get_price(m)-1000);
printf("\n支払い価格 %d 円\n", m*get_price(m));
}
printf("\n総販売価格 %d 円\n総利益 %d 円\n", total_price, total_profit);
return 0;
}
121デフォルトの名無しさん:2006/11/07(火) 22:28:41
>>108-109
堅苦しいことを言えば、そもそもwchar_tはUnicodeと決まっているわけではないし、
文字集合がUnicodeでも、符号化にUTF-8やUTF-16を使っていれば、固定長とは限らないわけで。
122デフォルトの名無しさん:2006/11/07(火) 22:59:42
>>116
これはシンタックスエラーな問題文ですね
123デフォルトの名無しさん:2006/11/07(火) 22:59:58
>>99
y[0]='\0';
strcat(y, argv[2]);
strcat(y, x);
または
strcpy(y, argv[2]);
strcat(y, x);
124デフォルトの名無しさん:2006/11/07(火) 23:00:43
>>116
s/因数/引数/g
でいいのかな?
125デフォルトの名無しさん:2006/11/07(火) 23:05:19
>>124
というより、いろんな意味に取れるのが問題かと…

>>116 のやりたい事は何となく分かるんだけどね
コマンド
./a.out futongafuttonda uton utton
実行結果
gaf
ってところか
126デフォルトの名無しさん:2006/11/07(火) 23:09:09
>>125
>関数を作る
main も関数には違いないけど、多分題意とは違うとおもふ。
12780:2006/11/07(火) 23:30:05
>>90
めちゃはえー。こんなにも差がでるのか orz
128デフォルトの名無しさん:2006/11/07(火) 23:53:22
>>127
事前に200までの5乗を計算するだけでも現実的時間で終わるよ
129デフォルトの名無しさん:2006/11/07(火) 23:55:10
for文の重なりが把握できるのは3つまでな俺
130デフォルトの名無しさん:2006/11/07(火) 23:58:44
>>128
計算するアルゴリズムはほとんど一緒なんだが、
多倍長整数の計算が遅くて><

double で計算するなんて思いつきもしなかった…
131デフォルトの名無しさん:2006/11/08(水) 00:06:24
さすがFPUはんやで
132デフォルトの名無しさん:2006/11/08(水) 00:09:37
>>130
long long使ってもいいんじゃない?
>>35はVC++6.0だからわからんけど、最近のなら対応してる
133OS:2006/11/08(水) 00:16:50
[1] 授業単元: オペレーティングシステム
[2] 問題文(含コード&リンク):
第4回課題 セルオートマトンの動作推移を表現する。
・渋滞の様子をC++を使って表現する。
・空白セルと塗りつぶしセルの二つを用意し、塗りつぶしセルは、前が空白セルの場合は、進むことが出来るが、塗りつぶしセルの場合は、進むことが出来ない。(進行方向は左。)
・時間経過と共に、どのような推移をするのかを示す。(塗りつぶしセルがなくなった時点で終了。)
・結果表示は、別ウィンドウが望ましいが、コマンドライン上で構わない。
以下に、例を示す。

問題 □□■□■□が与えられるとする。
t=1 □■□■□□
t=2 ■□■□□□
t=3 □■□□□□
t=4 ■□□□□□
終了

[3] 環境
 [3.1] OS: windows
 [3.2] コンパイラ名とバージョン: VC6.0
 [3.3] 言語: C、C++ (出来ればC++が望ましい。)
[4] 期限: 2006年11月8日 23:59まで(出来れば23時まで。)
[5] その他の制限: 特になし
134OS:2006/11/08(水) 00:18:38
宜しくお願いします。
135 ◆rqrMes8uog :2006/11/08(水) 00:50:42
[1] 授業単元: C++プログラミング
[2] 問題文(含コード&リンク):
最初にあなたは 1 から 99 までの範囲で数を一つ頭に思い浮かべます.
推測値を提示し,その推測が当たっているかどうか,
当たっていなければより大きいか小さいかを繰り返し質問して,
あなたからの答に基づいて推測値を改善し,
最終的にあなたが思い浮かべた数を言い当てるプログラムを作成しなさい.

[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
 [3.3] 言語:C++
[4] 期限: 2006年11月8日(水)23:59まで
[5] その他の制限:
・質問への答え方では,「当たりなら0,もっと小さければ1,
  もっと大きければ2を入力してください」といったルールを示す。
 ・質問に対する想定外の答え方には警告を出す
 ・正しい数を当てるまでにかかった回数を数えて,その回数に応じたメッセージを出す.
 ・コンピューターからの最初の質問は「50ですか?もっと大きい?小さい?」とする。

以上です。C++を始めたばかりです。
>>133と期限がかぶってしまいまして、すいません。
どうか宜しくお願いします!
136デフォルトの名無しさん:2006/11/08(水) 01:10:29
>>132
VC6なら型名は__int64、printfの変換指定子は%I64dね。
137デフォルトの名無しさん:2006/11/08(水) 01:41:55
>>133
すまん、俺自身セルオートマトンをいまいち理解してないのだが、
これって塗りつぶしセルが時間に従って左側に移動しているだけであって、
空白セル云々は関係ないように見えるんだが(例を見る限り)
138デフォルトの名無しさん:2006/11/08(水) 01:43:16
139デフォルトの名無しさん:2006/11/08(水) 02:09:29
140デフォルトの名無しさん:2006/11/08(水) 02:32:07
>>82
鬼才だなwワロタww
141デフォルトの名無しさん:2006/11/08(水) 02:53:58
>>86はgotoは絶対に使ってはいけないと信じている雑魚プログラマ
142デフォルトの名無しさん:2006/11/08(水) 02:59:18
>>117
確かに。マイテンプレを修正しておく。
143デフォルトの名無しさん:2006/11/08(水) 02:59:50
144デフォルトの名無しさん:2006/11/08(水) 03:00:01
Cの文法にgotoがある限り使われても文句は言えんだろが
145デフォルトの名無しさん:2006/11/08(水) 03:06:06
俺は極力使わないが多重ループを抜けるための一手段ではあるな

そもそも機能を覚えさせようとしてるだけであって
推奨してるわけではないだろう

goto文の是非にあたってはここで議論すべきないようではないし
146 ◆rqrMes8uog :2006/11/08(水) 03:24:13
ありがとうございました。かなり助かりました。
147OS:2006/11/08(水) 04:49:05
>>133
おそらく、発展問題として、今後
□□■

□■□
となるが、
■□■

■■□
となる左側で止めてしまう場合があるのです。

この問題は、渋滞の研究に使うものなので、□は、動ける場所、■は、渋滞していて動けない場所というものです。
148OS:2006/11/08(水) 05:01:07
ですが、取りあえずは、セルが左側に移動するものを第一段階として作りたかったので、宜しく御願いします。

発展問題に、左側で止めた場合、n秒後に、止めが解除されるとしてプログラムを作れというものもあります。
nは、コマンドラインから入力。(入力方式は問わない。)

(例)
t=1 ■□■
t=2 ■■□
t=3 ■■□
t=4 ■■□
t=5 ■□□

この場合、n=2と指定します。■■□の状態で、2秒、膠着状態が続いてますので。

今、この場合のプログラムも考えてますが、どうも徹夜気味です。宜しくお願いします。
149デフォルトの名無しさん:2006/11/08(水) 11:51:13
[1]計算機プログラミング
[2]
● 2つの自然数を入力して、その間にある素数を表
示するプログラムを作成しましょう。
■ プロジェクト名:07prime ファイル名:07prime.c
■ 入力:整数(自然数)を2つ
■ 大小関係が逆でも対応できるようにすること。
■ 処理:2つの自然数の間で素数の場合、その数を表示
する
■ 素数:1と自分自身以外は割り切れない数
■ 出力:素数の値
■ 自分の学籍番号下4桁と下4桁+100で試してみよう
■ ソースコードを印刷し、自分の学籍番号下4桁と下4桁
+100の結果を記入して、提出しましょう
[3]WindowsXP
[4]11月13日
150115:2006/11/08(水) 12:12:35
isprimeは不要だった。

>>149
#include <stdio.h>
int main(void) {
    int i, j, min, max, temp;
    scanf("%d%d", &min, &max);
    if (min > max) {
        temp = min;
        min = max;
        max = temp;
    }
    for (i = min; i <= max; i++) {
        for (j = 2; j <= i; j++) if (i % j == 0) break;
        if (i == j) printf("%5d", i);
    }
    return 0;
}
151デフォルトの名無しさん:2006/11/08(水) 12:17:43
>>47 誰か教えてくれないでしょうか??(>>49に変更点が書いてあります。)
152デフォルトの名無しさん:2006/11/08(水) 12:33:05
>>151
画面表示までやるのか、表示はgnuplotに任せちゃっていいのか
153デフォルトの名無しさん:2006/11/08(水) 13:19:40
>>151
>>69

69は0.02になってるけどな
表示くらい自分でできるだろ
154デフォルトの名無しさん:2006/11/08(水) 15:30:08
[1] 授業単元: プログラミングC
[2] 問題文(含コード&リンク): 名前と5教科の点数(国語、数学、社会、理科、英語)と
基準点を入力して、基準点以上の該当科目と点数を表示する関数
void search(int *mark,int std)を作成せよ。
mark:点数配列 std:基準点
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:VC6.0
 [3.3] 言語: C
[4] 期限: 決まってないです。
[5] その他の制限: 現在、配列とポインタのところをやっています。

よろしくお願いします。
155デフォルトの名無しさん:2006/11/08(水) 15:39:02
その仕様通りに作るとおかしなことになるけど
それで間違いないの?
156154:2006/11/08(水) 16:00:35
〔名前「テストユーザー」
国語の点数:「40」
数学の点数:「50」
社会の点数:「60」
理科の点数:「70」
英語の点数:「80」
基準点:「60」
テストユーザーさんの60点以上の科目は〕
(社会の点数:60
理科の点数:70
英語の点数:80)

〔〕の処理をmain関数で、
「」をscanfでキーボードから入力し
()の部分をsearch関数内でやるのだと思うのですが
157デフォルトの名無しさん:2006/11/08(水) 16:13:17
[1] 授業単元:コンピュータプログラミングおよび演習
[2] 問題文(含コード&リンク):
   1、自然数n を一つ読み込み、n が2 でも3 でも割り切れない場合は「!」を、
   そうでない場合は「@」を画面に書き出すプログラムを作成せよ。
   2、自然数n を一つ読み込み、それに続いて画面に2, 4, 6, ... 2n を(都合n 個)
   画面に書き出すプログラムを作成せよ。
   3、自然数n を一つ読み込み、それを2 で何回割ると0 になるかを数え、その回
   数を画面に書き出すプログラムを作成せよ。なお、割り算において割り切れ
   ない場合は結果を切り捨てて整数にするものとする。
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン: (不明)
 [3.3] 言語: (C++)
[4] 期限: 明日の正午までには…

お願いいたします。授業内容が早すぎてまともにできません…
158デフォルトの名無しさん:2006/11/08(水) 16:16:11
こんなうんこみたいな課題が出てるのに
授業が早いなんて信じられない
159デフォルトの名無しさん:2006/11/08(水) 16:20:24
>>157
void func1(int n)
{
printf("%c\n",(n%2 != 0 && n%3 != 0) ? '!' : '@');
}

void func2(int n)
{
int i;
for(i = 2; i<=2*n; i*=2)
printf("%d,",i);
}

void func3(int n)
{
int c=0;
while((n>>c) != 0)c++;
printf("%d回\n",c);
}
160デフォルトの名無しさん:2006/11/08(水) 16:31:23
>>148
言いたいことは大体分かるんだが、どうにも例が怪しい。
t=4とt=5の間の遷移はおかしくないか?
そもそも147-148は誰に向けて言ってるの?
161デフォルトの名無しさん:2006/11/08(水) 16:33:48
>>154
#include <stdio.h>
#include <stdlib.h>
char subject[6][7] = {"国語","数学","社会","理科", "英語","基準点"};
void search(int *mark,int std)
{
int i;
for(i=0; i<5; i++)
if(mark[i] >= std)
printf("%sの点数:%d\n",subject[i],mark[i]);
}
int main(int argc, char *argv[])
{
int mark[6];
int i;
char name[64];
printf("名前:");
scanf("%s",name);
for(i=0; i<6; i++)
{
printf("%sの点数:",subject[i]);
scanf("%d",&mark[i]);
}
printf("%sさんの%d点以上の科目は\n",name,mark[5]);
search(mark, mark[5]);
return 0;
}
162デフォルトの名無しさん:2006/11/08(水) 16:37:34
>>157
訂正
void func2(int n)
{
int i;
for(i = 2; i<=2*n; i+=2)
printf("%d,",i);
}
163デフォルトの名無しさん:2006/11/08(水) 16:47:47
>>154
こんなんどうだべ?環境依存だけんども。
#include <stdio.h>
#define 科目数 5
char* kamoku[科目数] = {"国語", "数学", "社会", "理科", "英語"};
void search(int* mark, int std)
{
int i;
char* name = (char*) mark[5];
printf("名前 : %s\n", name);
for(i=0; i!=科目数; i++)
if(mark[i] >= std)
printf("%s : %d点\n", kamoku[i], mark[i]);
}
int main(void){
int i;
int mark[科目数+1];
char name[] = "与太郎";
for(i=0; i!=科目数; i++){
printf("%s 点数>", kamoku[i]); scanf("%d", &mark[i]);
}
mark[5] = (int) name;
search(mark, 50);
return 0;
}
164デフォルトの名無しさん:2006/11/08(水) 16:54:34
これはひどい
165デフォルトの名無しさん:2006/11/08(水) 16:56:26
チーズフォンデュ吹いた
166デフォルトの名無しさん:2006/11/08(水) 17:08:07
気持ち悪い、キモイじゃなくて気持ち悪い
167デフォルトの名無しさん:2006/11/08(水) 17:11:57
変数名にローマ字を使う人っていまだにいるんだなぁ
168デフォルトの名無しさん:2006/11/08(水) 17:13:28
>>167
業務プログラムを作ってごらん
ローマ字だらけのプログラムになるから
169デフォルトの名無しさん:2006/11/08(水) 17:25:16
俺もダメな奴に教えるときは
kaisuu
とか使うなあ
170デフォルトの名無しさん:2006/11/08(水) 17:32:35
普通、格好良さより読みやすさ重視だべさ。
VC++6.0で通るかは知らんが、こうしたっていいくらいだべ。

#define 科目数 5
#define 末尾 科目数
char* 科目名[科目数] = {"国語", "数学", "社会", "理科", "英語"};
void search(int* mark, int std)
{
int カウンタ;
char* 名前 = (char*) mark[末尾];
printf("名前 : %s\n", 名前);
for(カウンタ=0; カウンタ!=科目数; ++カウンタ)
if(mark[カウンタ] >= std)
printf("%s : %d点\n", 科目名[カウンタ], mark[カウンタ]);
}
171154:2006/11/08(水) 17:32:55
ありがとうございました。
おかげさまで完成できました。
>>163さんのは勉強に使わせていただきました。
172デフォルトの名無しさん:2006/11/08(水) 17:39:29
[1] 授業単元:プログラム演習
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2902.txt
[3] 環境
 [3.1] OS:Windows XP
 [3.2] コンパイラ名とバージョン:VC
 [3.3] 言語: C
[4] 期限:10日まで
[5] その他の制限:
173デフォルトの名無しさん:2006/11/08(水) 17:50:21
[1] 授業単元:画像処理演習
[2] 問題文(含コード&リンク):
jpg画像をファイルから読み込み、それを拡大縮小できるようにし、拡大(または縮小)した画像をjpgで保存するプログラムを作成せよ。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C
[4] 期限:2006/11/13
[5] その他の制限:


よろしくお願いします
174デフォルトの名無しさん:2006/11/08(水) 18:49:09
>>173
それは自分でデコードするのか?
それともlibjpegとか使っていいの?
175デフォルトの名無しさん:2006/11/08(水) 19:05:28
>>174
全部自力って・・・
176デフォルトの名無しさん:2006/11/08(水) 19:31:42
>>175
出来なくもないし画像処理演習
なんだからやっても何の不思議もない
177173:2006/11/08(水) 19:40:03
>>174
できれば全部自力でお願いします・・・
178デフォルトの名無しさん:2006/11/08(水) 19:45:00
>>177
http://www.amazon.co.jp/gp/product/4797330457
JPEGはこれをパクれ

JPEGのデコードやらせるくらいの演習だから、拡大縮小は自分でできるよな?
179デフォルトの名無しさん:2006/11/08(水) 19:45:21
>>177
できればとかじゃなくて宿題でどういう指示が出たかが問題なんじゃないの
教員が想定してないレベルの宿題を他人に作らせると後々ややこしくなるだけだぜ
180173:2006/11/08(水) 19:54:00
ごちゃごちゃうっせーな
完成品のプログラムを見てヒントもらいたいだけだ
拡大縮小処理もたぶんできてる
libjpeg使ってもいいから早くやって下さい
181デフォルトの名無しさん:2006/11/08(水) 19:58:24
>>180
http://www.amy.hi-ho.ne.jp/jbaba/jpeg11.htm
JPEG->DIBの完成品のプログラムあるよ
182デフォルトの名無しさん:2006/11/08(水) 20:00:15
>>47
#include <stdio.h>
int kaijo(int n) {
    if (!n) return 1;
    else return n * kaijo(n - 1);
}
double mycos(double x) {
    int i, s = -1;
    double r = 1, xn = x * x;
    for (i = 2; i <= 10; i += 2, xn *= x * x, s *= -1) {
        r += s * xn / kaijo(i);
    }
    return r;
}
double mysin(double x) {
    int i, s = -1;
    double r = x, xn = x * x * x;
    for (i = 3; i <= 11; i += 2, xn *= x * x, s *= -1) {
        r += s * xn / kaijo(i);
    }
    return r;
}
int main(void) {
    int i;
    printf("x cos sin\n");
    for (i = -28; i != 29; i++)
        printf("% .1f % .8f % .8f\n", i / 10., mycos(i / 10.), mysin(i / 10.));
}
183173:2006/11/08(水) 20:20:36
177と180は偽物です。
ライブラリ?は必要なら使ってもよいと思います。
画像の拡大縮小の仕方もわかりません。

>>181
リンク先のプログラムを見てみましたが、どう修正すればいいのかわかりません。

よろしくお願いします。
184デフォルトの名無しさん:2006/11/08(水) 20:58:11
[1] 授業単元: 画像処理
[2] 問題文(含コード&リンク):細線化しなさい
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:VS2005
 [3.3] 言語: VC++ MFC
[5] その他の制限:ゲットピクセルで8近傍を取得して、それの結果で注目点を白にするか黒にするかを決める。
8近傍はd[7]にGet8関数を使って取得。d[0]は注目点の右側でそこから反時計回りで1,2,3とかわっていく。
で、今Get8はできてます。for(n=0; n<=7; n++) d[i]=get8(n,i,j,CDC) で8近傍がdに格納されます。
画像は2値化画像です。
お願いします><
185デフォルトの名無しさん:2006/11/08(水) 21:00:28
>>172
こんなんでいいんかな。
void triangle(int data[][Y_SIZE][3], int x1, int y1, int x2, int y2,int x3, int y3){
float x,y;
float dx,dy=0.2;
dx = (float)(x2-x1)/(y2-y1)*dy;
for(x=x1,y=y1;y<=y2;y+=dy,x+=dx) memset(data[(int)x][(int)y],0,sizeof(int)*3);
dx = (float)(x3-x2)/(y3-y2)*dy;
for(x=x2,y=y2;y<=y3;y+=dy,x+=dx) memset(data[(int)x][(int)y],0,sizeof(int)*3);
dx = (float)(x3-x1)/(y3-y1)*dy;
for(x=x1,y=y1;y<=y3;y+=dy,x+=dx) memset(data[(int)x][(int)y],0,sizeof(int)*3);
}
186デフォルトの名無しさん:2006/11/08(水) 21:09:27
>>184
細線化の対象は黒ドットだけですか?
白も含みますか?
187デフォルトの名無しさん:2006/11/08(水) 21:13:34
>>186
黒だけでいいです。白地に黒い文字を書いてそれが細線化されるような感じでおねがいします。
188デフォルトの名無しさん:2006/11/08(水) 21:13:44
>>47
#include <stdio.h>
int kaijo(int i) { return (i>0 ? i * kaijo(i-1) : 1 ); }
double enujo(double x, int n) { return (n>0 ? x * enujo(x, n-1) : 1 ); }
double mycosR(double x, int i) { return (i>0 ? enujo(x,i+i-2)/kaijo(i+i-2) - mycosR(x,i-1) : 0); }
double mycos(double x) { return -mycosR(x,6); }
double mysinR(double x, int i) { return (i>0 ? enujo(x,i+i-1)/kaijo(i+i-1) - mysinR(x,i-1) : 0); }
double mysin(double x) { return -mysinR(x,6); }
main(void) {
double x;
for(x=-2.8;x<=2.8;x+=0.1) printf("%.8f %.8f\n",mycos(x),mysin(x));
}
その宿題の意図するところは再帰関数なんジャマイカ?
189デフォルトの名無しさん:2006/11/08(水) 21:20:39
>>47
ということは main関数も再帰化したほうがいいのか。

#include <stdio.h>
int kaijo(int i) { return i>0 ? i * kaijo(i-1) : 1 ; }
double enujo(double x, int n) { return n>0 ? x * enujo(x, n-1) : 1 ; }
double mycosR(double x, int i) { return i>0 ? enujo(x,i+i-2)/kaijo(i+i-2) - mycosR(x,i-1) : 0; }
double mycos(double x) { return -mycosR(x,6); }
double mysinR(double x, int i) { return i>0 ? enujo(x,i+i-1)/kaijo(i+i-1) - mysinR(x,i-1) : 0; }
double mysin(double x) { return -mysinR(x,6); }
int mainR(double x) { return x<=2.8 ? printf("%.8f %.8f\n",mycos(x),mysin(x)), mainR(x+0.2) : 1; }
main(void) { mainR(-2.8); }
190デフォルトの名無しさん:2006/11/08(水) 21:29:42
徹底してるな
191デフォルトの名無しさん:2006/11/08(水) 22:07:52
【質問テンプレ】
[1] 授業単元: ポインタ
[2] 問題文(含コード&リンク): 文字型配列の先頭アドレスを受け取り、文字列内の文字を昇順にソート
する関数void sort_ch()を作成せよ。

[3] 環境
 [3.1] OS: /Linux/
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
 [3.3] 言語: どちらでも可
[4] 期限: 今週いっぱい
[5] その他の制限: ポインタを習っています。
192デフォルトの名無しさん:2006/11/08(水) 22:16:14
>>191
バブルソートでよければ

void sort_ch( char *Input, int length )
{
int No;

for(No=0; No < length-1; No++ ){
if( Input[No] > Input[No+1] ){
swap( &Input[No], &Input[No+1] );
}
}

if(length > 2){
sort_ch( Input, length-1 );
}
}

void swap( char *i, char *j )
{
char Buff;

Buff = *i;
*i = *j;
*j = Buff;
}
193デフォルトの名無しさん:2006/11/08(水) 22:17:32
バブルソートってなんですか・・
194デフォルトの名無しさん:2006/11/08(水) 22:19:56
>>193
ググレカス
195デフォルトの名無しさん:2006/11/08(水) 22:21:43
なんですかと言われても、、>>192がバブルソートだよ。
つかググれ、その方が早いから。
196デフォルトの名無しさん:2006/11/08(水) 22:26:57
ソート法の一種
あんま早くないけど安定

これくらいの理解でいいんだろうか
197デフォルトの名無しさん:2006/11/08(水) 22:43:36
奴が求めてるポインタを使って答えようか
198OS:2006/11/08(水) 22:54:52
[1] 授業単元: オペレーティングシステム
[2] 問題文(含コード&リンク):
第4回課題 セルオートマトンの動作推移を表現する。
・渋滞の様子をC++を使って表現する。
・空白セルと塗りつぶしセルの二つを用意し、塗りつぶしセルは、前が空白セルの場合は、進むことが出来るが、塗りつぶしセルの場合は、進むことが出来ない。(進行方向は左。)
・時間経過と共に、どのような推移をするのかを示す。(塗りつぶしセルがなくなった時点で終了。)
・結果表示は、別ウィンドウが望ましいが、コマンドライン上で構わない。
以下に、例を示す。
問題 □□■□■□が与えられるとする。
t=1 □■□■□□
t=2 ■□■□□□
t=3 □■□□□□
t=4 ■□□□□□
終了
199OS:2006/11/08(水) 22:55:25
また、今後
□□■

□■□
となるが、
■□■

■■□
となる左側で止めてしまう場合があるのです。
この問題は、渋滞の研究に使うものなので、□は、動ける場所、■は、渋滞していて動けない場所というものです。
ですが、取りあえずは、セルが左側に移動するものを第一段階として作りたかったので、宜しく御願いします。
発展問題に、左側で止めた場合、n秒後に、止めが解除されるとしてプログラムを作れというものもあります。
nは、コマンドラインから入力。(入力方式は問わない。)
(例)
t=1 ■□■
t=2 ■■□
t=3 ■■□
t=4 ■■□
t=5 ■□□
この場合、n=2と指定します。■■□の状態で、2秒、膠着状態が続いてますので。
[3] 環境
 [3.1] OS: windows
 [3.2] コンパイラ名とバージョン: VC6.0
 [3.3] 言語: C、C++ (出来ればC++が望ましい。)
[4] 期限: 2006年11月9日 23:59まで(出来れば23時まで。)
[5] その他の制限: 特になし
200デフォルトの名無しさん:2006/11/08(水) 23:15:11
超初心者ですみません・・
本当に困っているので、助けてください・・・
解説的なものをつけていただけたら幸いです・・
【質問テンプレ】
[1] 授業単元: ポインタ
[2] 問題文(含コード&リンク): 名前(char),身長(double),体重(double)、視力(視力構造体)これらのデータをメンバとする
構造体を定義し、入力と表示を行うプログラムを作成しなさい。
入力件数は最大5件で、名前は19文字までの入力とし、範囲外だったのならば
エラーメッセージを表示し再入力させてください。名前に"END"が入力されたときは
入力終了とする。表示は身長で昇順にソートして出力。
また、身長、体重は小数点以下第一位までの表示とする。視力は小数点以下第三位までの表示とする。
出力の幅は、名前が19文字分、その他は5文字分で指定してください。
視力は右()、左()をメンバとする構造体でで扱ってください。
1件分の入力はinput_data()で、表示はdisplay_data()で、ソートはsort_data()でと処理を関数に分けて行ってください。
名前入力の最初に"END"が入力された場合は、"Input data is nothing!"と出力しなさい。
[3] 環境
 [3.1] OS: /Linux/
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
 [3.3] 言語: どちらでも可
[4] 期限: 今週いっぱい
[5] その他の制限: 構造体を習っています。
201デフォルトの名無しさん:2006/11/08(水) 23:16:53
[1] 授業単元:C言語講義
[2] 問題文(含コード&リンク):
#include <stdio.h>
#include <string.h>
#define MAX 10
int main(void)
{char a[MAX]="";
char b[MAX]="";
char c[MAX]="Hello";
strcpy(a, c);
strcpy(b, "Good Bye");
printf("%s,%s,%s\n", a, b, c);
return 0;}
このプログラムのbのサイズを1にして実行した時
なぜ実行結果がこのようになるか説明しなさい。

まず、お聞きしたいのが、bのサイズを1にするとは、
char b[MAX]=""; を char b[1]=""; とすれば良いのですよね?
この実行結果は ood Bye,Good Bye,Hello となりましたが、
なぜ、aにHelloではなくGoodbyeが入ってるのですか?
プログラム的にこのようになるのは、おかしい気がするのですが…。
また、なぜGoodbyeのGが消えているのでしょうか?
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 明日の朝9時まで
[5] その他の制限: なし
202デフォルトの名無しさん:2006/11/08(水) 23:19:16
>>201
説明が求められてるだけ、ですよね。
ならバッファオーバーランでググってみれば良いと思う。
203わからないんです。:2006/11/08(水) 23:25:56
OSがAIXで Oracle10を使用したC言語(ProC)について聞いてもよろしいですか?
簡単に言うと、子プロセスがsystem関数で実行したシェル内で別のシェルを実行した場合に戻り値が取得できないんですが。
Oracleにコネクトしないと取得できるのですが。
204デフォルトの名無しさん:2006/11/08(水) 23:28:52
205デフォルトの名無しさん:2006/11/08(水) 23:30:26
む、今アップローダー落ちてるか?
206デフォルトの名無しさん:2006/11/08(水) 23:30:49
>>191 再帰関数でよければ・・・

#include <stdio.h>
char *sort(char *c){return *(c+1)!=0?sort(c+1),(*c>*(c+1) ? *c^=*(c+1),*(c+1)^=*c,*c^=*(c+1):c),sort(c+1):c;}
void sort_ch(char *c){return sort(c);}

main (void) {
char s[32]="/tech/1162771475/";
sort_ch(s);
printf("%s\n",s);
}
207デフォルトの名無しさん:2006/11/08(水) 23:37:15
>>206 なんか、voidなのに間違えてreturnしてるけど、
それは問題文がvoid指定されていなければもっと簡略化できたのに
という怨念みたいなもの。
208デフォルトの名無しさん:2006/11/08(水) 23:38:40
[1] 授業単元:プロブラミング
[2] 問題文(含コード&リンク): sin(x)の値をマクローリン展開を用いて計算するプログラムを作成せよ。第20項まで求めることとする。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 11/11
[5] その他の制限:ヒントΣ[n=0→∞]{(-1)^n1}x^2n+1/(2n+1)! 単位はラジアン
209デフォルトの名無しさん:2006/11/08(水) 23:41:51
[1]C言語プログラミングB
[2]
今回はファイル入出力の応用で、
ファイルの簡単な暗号化及び複合化を行うプログラムを作成する。
暗号化は改行以外の文字のアスキーコードに1を足す
複合化はその逆の動作を行うこと
引数の2番目が暗号化と複合化のどちらかを決定、
3番目が入力ファイル名を示し、
4番目が出力ファイル名を示す
上記のようなプログラムを作成せよ

[3]OS:Linux コンパイラ:gcc3.4 言語:C
[4]明日
[5]関数・ポインタ・構造体・ファイル入出力まで学びました
210201:2006/11/08(水) 23:46:21
>>202
レスありがとうございます。
とりあえず、ぐぐってみましたが、自分と同じような例は、なかったです。

説明と言っても、そこまで詳しく説明しなくても問題ないです。
とりあえず、201で自分がした質問

>まず、お聞きしたいのが、bのサイズを1にするとは、
>char b[MAX]=""; を char b[1]=""; とすれば良いのですよね?
>この実行結果は ood Bye,Good Bye,Hello となりましたが、
>なぜ、aにHelloではなくGoodbyeが入ってるのですか?
>プログラム的にこのようになるのは、おかしい気がするのですが…。
>また、なぜGoodbyeのGが消えているのでしょうか?

の回答を頂ければ、それをヒントに自分で説明できそうです。
211デフォルトの名無しさん:2006/11/08(水) 23:48:21
>>210
printf("%p %p %p\n", a, b, c);
212201:2006/11/08(水) 23:52:08
>>211
レスありがとうございます。
実行しアドレスを調べてみましたが、全部バラバラでした。
このことから何かが読み取れそうですが、解らないです…。
213デフォルトの名無しさん:2006/11/09(木) 00:03:42
>>201
printf("%X %X %X\n",a,b,c);で各々のアドレスを調べてみよう
bのサイズがMAXの時、俺の環境だと
22FF60 22FF50 22FF40
となる
bのサイズが1のときは
22FF60 22FF5F 22FF40
これのダンプをちと書くと
b=MAX
      +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
22FF40 48 65 6C 6C 6F 00
22FF50 47 6F 6F 64 20 42 79 65 00
22FF60 48 65 6C 6C 6F 00
b=1
      +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
22FF40 48 65 6C 6C 6F 00
22FF50                                          47
22FF60 6F 6F 64 20 42 79 65 00

48 65 6C 6C 6F 00は"Hello"、47 6F 6F 64 20 42 79 65 00は"Good Bye"
なんか書くのが面倒になってきたけどようはstrcpy(b, "Good Bye");によって
aの一部が上書きされちまったってわけ

文字のおわりは00で判断するから
b = "Good Bye"
a = "ood Bye"
になるわけ
214デフォルトの名無しさん:2006/11/09(木) 00:04:54
[1] 授業単元:計算機化学
[2] 問題文(含コード&リンク):
//モンテカルロ法でパイを求める
#include<iostream>
#include<stdlib.h>
#include<time.h>
using namespace std;
int ()
{
double p,pai,x,y;
unsigned int k,n,count;
count=0;
cout<<"試行の回数"<<endl;
cin>>n;
srand((unsigned int)time(0));
for(k=0;k=n;k++)
//1以下の乱数を出す
x=(double)rand()/(double)RAND_MAX;
y=(double)rand()/(double)RAND_MAX;
if(x*x+y*y>1)continue;
else(count=count+1)
p=(double)count/n;
pai=p*4.0;
cout<<"paiの値は"<<pai;
return 0;
}
これで実行すると エラー E2040 2.cpp 6: 宣言が正しく終了していない
と、出るんですが6行目のどこを直せばいいのでしょうか。
くだらない質問かもしれませんが、よろしくお願いします。
[3]Windows XP 、Borland C++ 5.5.1 、C++
[4] 期限:無期限
215デフォルトの名無しさん:2006/11/09(木) 00:07:08
×文字のおわり
○文字列のおわり
216デフォルトの名無しさん:2006/11/09(木) 00:08:08
>>214
×int()
○int main()

なんだよこのミス
ありえねぇだろ
217214:2006/11/09(木) 00:18:44
>>216
ありがとうございます。
次のエラーに変わったんですけど、どう直したらいいでしょうか。
警告 W8060 2.cpp 14: おそらく不正な代入(関数 main() )
エラー E2033 2.cpp 18: continue の位置が誤っている(関数 main() )
エラー E2379 2.cpp 20: ステートメントにセミコロン(;)がない(関数 main() )

プログラムを勉強し始めたばかりで何もわからないので、ヒントだけでもお願いしますm(__)m
218デフォルトの名無しさん:2006/11/09(木) 00:25:21
>>217
あきらめる
219デフォルトの名無しさん:2006/11/09(木) 00:27:01
>>208
#include <stdio.h>
double d(double x, double n) {
    return n == 0 ? x : -x * x * d(x, n - 1) / (2 * n + 1) / (2 * n);
}
double mysin(double x) {
    int i;
    double r = 0.;
    for (i = 0; i < 20; i++) r += d(x, i);
    return r;
}
int main(void) {
    double i;
    for (i = 0.; i <= 3.1415926535898; i += 0.31415926535898) printf("%f\n", mysin(i));
}
220デフォルトの名無しさん:2006/11/09(木) 00:27:11
>>214
多分、計算機化学は計算機科学になおさないと
コンパイルエラーになるんじゃないか?
221デフォルトの名無しさん:2006/11/09(木) 00:40:48
>>214 かっことかせみころんとか、いろいろあるだろう、なぁおい。
222デフォルトの名無しさん:2006/11/09(木) 00:44:03
>>217
よく眺めるんだな
#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;
int main()
{
    double x, y;
    int n, count = 0;
    cout << "試行の回数" << endl;
    cin >> n;
    srand(static_cast<unsigned int>(time(0)));
    for (int i = 0; i < n; ++i) {
        x = (double)rand() / RAND_MAX;
        y = (double)rand() / RAND_MAX;
        if (x * x + y * y < 1) ++count;
    }
    cout << "piの値は" << count * 4.0 / n;
    return 0;
}
223デフォルトの名無しさん:2006/11/09(木) 00:52:42
#include <iostream>
#include <cmath>
using namespace std;
double monte_carlo(){return M_PI}
int main()
{
cout << "piの値は" << monte_carlo();
return 0;
}

モンテカルロ法ならこっちのほうが簡潔だぜ
224209:2006/11/09(木) 00:54:30
さっさと回答出してくださいよ屑ども
225デフォルトの名無しさん:2006/11/09(木) 00:56:05
>>223
モンテカルロ法でそこまで高速・高精度に計算するとはお前天才だな
226デフォルトの名無しさん:2006/11/09(木) 00:57:42
>>209
書いたけど、アップローダが死んでるぽいから、代わりのURLちょうだい。
227デフォルトの名無しさん:2006/11/09(木) 00:59:16
>>223
は?お前馬鹿だな!入力とらないとばれるだろ?
228214:2006/11/09(木) 01:27:26
>>220
計算機科学ではなく、計算機化学という授業名なんです。

>>221,222
プログラム作れました。
乱数を用いた例として授業で示されたものだったのですが
知識がないので、わからなくて質問させて頂きました。
ありがとうございましたm(__)m
229226:2006/11/09(木) 02:03:02
>>209
もう寝る。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, char *argv[]){
if( argc != 4 ) {printf("Usage : command [e|d] [infile] [outfile]\n") ;}
else {if( 0 == (strcmp(argv[1],"e")) ) {encode(argv[2], argv[3]) ; }
else if(0 == ( strcmp(argv[1],"d")) ) {decode(argv[2], argv[3]) ;}
else {printf("オプションの指定が間違っています。\n") ; }}
return(0) ;
}
int encode(char *iname, char *oname){
FILE *infp, *outfp ;
char c ;
if( NULL == (infp = fopen(iname,"r")) ) {fprintf(stderr,"ファイルのオープンに失敗しました。\n") ; exit(1) ;}
else {if( NULL == (outfp = fopen(oname, "w")) ) {fprintf(stderr,"ファイルのオープンに失敗しました。\n") ; exit(1) ;}
while( EOF != (c = getc(infp)) ) {putc((c=='\n'?c:c+1), outfp) ;}}
return(0) ;
}
int decode(char *iname, char *oname){
FILE *infp, *outfp ;
char c ;
if( NULL == (infp = fopen(iname,"r")) ) {fprintf(stderr,"ファイルのオープンに失敗しました。\n") ;exit(1) ;}
else {if( NULL == (outfp = fopen(oname, "w")) ) {fprintf(stderr,"ファイルのオープンに失敗しました。\n") ; exit(1) ;}
while( EOF != (c = getc(infp)) ) { putc((c=='\n'?c:c-1), outfp) ; }}
return(0) ;
}
230226:2006/11/09(木) 02:04:19
書き忘れてた。
コマンド名 e 入力ファイル 出力ファイルで暗号化
コマンド名 d 入力ファイル 出力ファイルで復号化ね。
やっつけだけど。
231デフォルトの名無しさん:2006/11/09(木) 02:07:48
>>116 これでおk?
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char *func(const char *a, const char *b, const char *c){
char *pb, *pc, *temp, *ret;
int i, keylen;

pb=strstr(a, b);
pc=strstr(a, c);
if(pb==NULL || pc==NULL)
return NULL;

keylen=strlen(b);
if(pb>pc){
temp=pb;pb=pc;pc=temp; // swap(pb, pc)
keylen=strlen(c);
}
if(keylen>=pc-pb) return NULL;
ret=malloc(pc-pb-keylen+1);
for(i=0;i<pc-pb-keylen;i++)
ret[i]=pb[keylen+i];
ret[i]='\0';
return ret;
}
int main(void){
printf("%s\n", func("futongafuttonda", "utton", "uton"));
return 0;
}
23260:2006/11/09(木) 02:45:18
自力でなんとかなりました
変数の初期化のループに誤りがあったようです
233デフォルトの名無しさん:2006/11/09(木) 10:45:59
>>200

#include<stdio.h> #include<string.h> #define MAX 5 typedef struct { double
l_eyesight; /*左視力*/ double r_eyesight; /*右視力*/} Eyesight; typedef struct
{char name[20]; /*名前*/ double height; /*身長*/ double weight; /*体重*/
Eyesight eyesight; /*視力*/ } Data; void input_data(Data *, int *); void
display_data(Data *, int *); void sort_data(Data *, int *); int main(){ int *i;
Data data[MAX], x; input_data(data, i); sort_data(data, i); display_data(data,
i); return 0; } /*入力処理*/ void input_data(Data *data, int *n){ char *name;
int i; *n = 0; for (i = 0; i < MAX; i++){ do{ printf("名前:"); scanf("%s",
name); if (strlen(name) > 19){ printf("名前が長すぎです\n"); } else {
strcpy(data[i].name, name); break; } }while(1); if ((strcmp(data[i].name, "END"
) == 0) | (strcmp(data[i].name, "end") == 0)){ if (i == 0){ printf
("Input data is nothing!"); exit(0); } else{ break; }} printf("身長:");
scanf("%lf", &data[i].height); printf("体重:"); scanf("%lf", &data[i].weight);
printf("視力(左):"); scanf("%lf", &data[i].eyesight.l_eyesight);
printf("視力(右):"); scanf("%lf", &data[i].eyesight.r_eyesight); } *n = i; }
/*ソート*/void sort_data(Data *data, int *n){int i, j;Data temp;for (i
= 0;i < *n - 1; i++)for (j = *n - 1; j > i; j--)if (data[j-1].height >
data[j].height){temp = data[j-1]; data[j-1] = data[j]; data[j] = temp; }}
/*表示*/void display_data(Data *data, int *n){int i;for (i = 0; i < *n; i++){
printf("名前:%-19s 身長:%6.1f 体重:%6.1f 視力(左):%6.3f 視力(右):%6.3f\n",
data->name, data->height, data->weight, data->eyesight.l_eyesight,
data->eyesight.l_eyesight); data += 1;} }

234デフォルトの名無しさん:2006/11/09(木) 10:48:08
>>208
やってることは219と一緒
課題の内容として「xが0近傍の方が誤差は少ない」ってことを学習するためにやってるなら必要ないけど
単純に精度出したい時はmysin内のコメント外してmynorm使ってください
mainは219と同じ物使うなり適当に
#include <math.h>
//#include <stdio.h>

double mynorm(double x){
/*xを-2π〜+2πにする*/
x=fmod(x,M_PI*2);
/*xを-π〜+πにする*/
if(x<-M_PI)x=x+M_PI*2;
else if(x>M_PI)x=x-M_PI*2;
/*xを-π/2〜+π/2にする*/
if(x>M_PI_2)x=M_PI-x;
else if(x<-1*M_PI_2)x=-M_PI-x;

return x;
}
double mysin(double x){

double x2=x*x,y=1;
int i;
//x=mynorm(x);
for(i=39;i>=3;i=i-2){
y=1-x2*y/(i*(i-1));
}
y=x*y;

return y;
}
235デフォルトの名無しさん:2006/11/09(木) 12:43:39
[1]C言語プログラミング
[2]
問4
引数に3つのファイル名を取ると、最初の二つのファイルを結合し、
3つめのファイルに保存するプログラムを作成せよ
-実行例-
% cat text01.txt
good morning!!
% cat text02.txt
good bye!!
% ./a-2 text01.txt text02.txt text03.txt
% cat text03.txt
good morning!!
good bye!!
[3]OS:Win/Linux コンパイラ:VC/gcc3.4 言語:C
[4]あと2時間ほどです;
[5]ポインタを終えてファイル入出力まで学びました
よろしくお願いします
236デフォルトの名無しさん:2006/11/09(木) 13:23:30
>>235
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char ** argv){if (argc < 4) return 1;char buf[1000];sprintf(buf, "/bin/cat '%s' '%s' > '%s'", argv[1], argv[2], argv[3]);return system(buf) >> 8;}
237デフォルトの名無しさん:2006/11/09(木) 15:59:24
>>235は前スレにも同じのあったな
238デフォルトの名無しさん:2006/11/09(木) 16:17:43
[1] 授業単元:Cプロ入門演習2
[2] 問題文(含コード&リンク):
キーボードから指定した範囲の素数の合計を求める関数を作成し、プログラムを完成させよ
プリントのほうには指定した範囲内の素数も表示されています
[3] 環境
 [3.1] OS: XPSP2
 [3.2] study C
 [3.3] C
[4] 明日まで
[5] その他の制限:引数、戻り値まで習いました
239デフォルトの名無しさん:2006/11/09(木) 16:27:53
>>238
このスレを素数で検索
240デフォルトの名無しさん:2006/11/09(木) 17:35:39
>>239
>>150のだと1が表示されないのですがどこを変えればいいんでしょうか

あともう一問お願いします
[2] 問題文(含コード&リンク):
5人の学生の点数を読み込み、得点の高い順に並び替え、右のような得点グラフを作成せよ。
得点グラフは「#」は10点、「*」は1点に相当する。
条件:並び替えを行う関数と、引数として得点を受け取り、得点に応じたグラフを書く関数を
作成してプログラムを完成させなさい


1人目 >> 54
2人目 >> 67
3人目 >> 75
4人目 >> 92
5人目 >> 33
----------------------------
         得点グラフ
----------------------------
第1位 (92点): #########**
第2位 (75点): #######*****
第3位 (67点): ######*******
第4位 (54点): #####****
第5位 (33点): ###***
241デフォルトの名無しさん:2006/11/09(木) 17:37:11
>>240
1も素数してあげたいけど、都合があってゴメン
242デフォルトの名無しさん:2006/11/09(木) 17:44:42
>>150のだと1が表示されないのですがどこを変えればいいんでしょうか

「素数の定義」を変える必要があります。
243デフォルトの名無しさん:2006/11/09(木) 18:17:29
>>240
素数(そすう)とは、1とその数自身以外に正の約数を持たない(つまり1とその数以外のどんな自然数によっても割り切れない)、1 より大きな自然数のことである。
244デフォルトの名無しさん:2006/11/09(木) 18:35:56
あれ、でもプリントには1がでてる・・・
間違いって事でいいのかな・・・
245デフォルトの名無しさん:2006/11/09(木) 18:50:08
ええい教師のせいにするな見苦しい
246デフォルトの名無しさん:2006/11/09(木) 18:55:07
1を素数と言うことにしてしまうと、素因数分解が発散してしまうので定義上、素数と認められない。
Ex. 6 = 3 * 2 * 1 * 1 * 1 * ....
247デフォルトの名無しさん:2006/11/09(木) 19:07:59
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
入力した文字列を反転するプログラムをポインタ変数を用いて作成せよ.
[実行例]
文字列を入力してください:japan
反転文字列は"napaj"です.

[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: VisualStudo.net2003
 [3.3] 言語: C
[4] 期限: 11月12日
[5] その他の制限: お願いします

248デフォルトの名無しさん:2006/11/09(木) 19:13:24
>>247

strrev(char* str, int n)
{
char* p;
for(p = str+n; p != str; p--)
putchar(*p);
}
249デフォルトの名無しさん:2006/11/09(木) 19:16:24
配列いじるなら

char* strrev(char* str, int n)
{
char* p;
for(p = str+n; p > str; p--,str++)
*str = *p;
}
250デフォルトの名無しさん:2006/11/09(木) 19:20:46
>>247
#include <stdio.h>
#include <string.h>
void reversePrint(const char * p) {if (* p != '\0') {reversePrint(p + 1); putchar(* p);}}
int main() {char buf[1000]; if (fgets(buf, sizeof(buf), stdin) != NULL) {* strchr(buf, '\n') = '\0'; reversePrint(buf);} return 0;}
251デフォルトの名無しさん:2006/11/09(木) 19:24:54
>>248
・戻り値の型がない
・無駄な引き数がある
・おまけに、文字列長-1を渡すと言う不思議な仕様になっている
・更に、最初の一文字が出力されない。
>>249
・戻り値を戻していない
・無駄な引き数がある
・おまけに、文字列長-1を渡すと言う不思議な仕様になっている

ダメすぎ
252デフォルトの名無しさん:2006/11/09(木) 19:25:04
能無しは書くなってやつだな
253デフォルトの名無しさん:2006/11/09(木) 19:27:26
>>251
>>249の問題はそういう次元の話じゃないだろう?
254デフォルトの名無しさん:2006/11/09(木) 19:30:05
>>252
ぶっちゃけここに宿題持ち込むようなクズの宿題がどうなろうとどうでもよくね
ここは能無しがクズの宿題利用して練習するスレだろ
255デフォルトの名無しさん:2006/11/09(木) 19:30:53
まぁおちつけ
256251:2006/11/09(木) 19:36:49
>>253
あ、ほんとだ。それどころじゃねぇや。

>>250
・再帰でやるか、再帰でw
・リダイレクトで改行のないテキスト食わせるとぬるぽ
・わざわざ4行にまとめなくていいよ……

奇を衒い過ぎw
257デフォルトの名無しさん:2006/11/09(木) 19:59:20
>・リダイレクトで改行のないテキスト食わせるとぬるぽ
どういう事?
別に問題無いように思えるけど。
258デフォルトの名無しさん:2006/11/09(木) 20:15:13
>>206
これでどうしてソーティングになるのかイマイチわからん。
259デフォルトの名無しさん:2006/11/09(木) 20:20:51
>>246
その式は全く発散してないけど?「発散」を普通と違う意味で使ってるの?

1 を素数とする場合に問題になるのは一意性。
1 を素数としない場合の素因数分解では「順番を除いて一意」という性質が成り立つ。
1 を素数とする場合は 「順番と1倍を除いて一意」という言い方をしないといけない。

ただ、一般の場合は後者のほうが使いやすく、例えば
負の数の素因数分解は「-1倍を除いて一意」という言い方になり、
実係数多項式の素因数分解は「定数倍を除いて一意」という言い方になる。
260デフォルトの名無しさん:2006/11/09(木) 20:28:01
[1] 授業単元: メディア基礎
[2] 問題文(含コード&リンク): 配列にデータを10個読み込み、次いで、その中
で最大のものを求め、その値を書き出すプログラムを
作成せよ。
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン: 知りません
 [3.3] 言語:C++
[4] 期限: 本日まで
[5] その他の制限: 特になし

お、お願いしますorz
261デフォルトの名無しさん:2006/11/09(木) 20:41:48
[1] 授業単元:情報処理U
[2] 問題文(含コード&リンク):2を底とするlogを計算するプログラムを作成しなさい。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:2006年11月10日まで
[5] その他の制限:なし

お願いします。
262デフォルトの名無しさん:2006/11/09(木) 20:50:21
>>261
#include <stdio.h>
#include <math.h>

main(){
double x,y;
scanf("%d",&x);
y=log(x)/log(2);
printf("%f",y);
}
263デフォルトの名無しさん:2006/11/09(木) 20:51:09
>>260
こんなんでどうだべか。
変数名も絶対に他の人と被らない様にしてある親切設計。
#include<iostream>
int main()
{
int hailine[10];
int mostdai = 0;
for(int i=0; i!=10; i++){
std::cout << "数値" << i << " >";
std::cin >> hailine[i];
if(mostdai < hailine[i])
mostdai = hailine[i];
}
std::cout << "最大は" << mostdai << std::endl;
return 0;
}
264260:2006/11/09(木) 21:03:44
>>263
std::cout std::endl
ってのはまだ習ってないんで、
入力するときに使う物をscanf
表示するときに使う物をprintf
にする場合どうしたらいいですかね?
265デフォルトの名無しさん:2006/11/09(木) 21:05:17
>>263
与えられる10個の数値が全て負のときには…
266260:2006/11/09(木) 21:12:31
>>265
アッー!!
267デフォルトの名無しさん:2006/11/09(木) 21:12:51
>>264
それもしかして、C++じゃなくてただのCだったりしないか?
268デフォルトの名無しさん:2006/11/09(木) 21:19:19
>>264
オラの裏を書くとは、オメさてはプロだな?
#include <cstdio>
int main()
{
int highretu[10];
int saibig = 0;
printf("負数は入力しちゃダメ\n");
for(int i=0; i!=10; i++)
scanf("%d", &highretu[i]);
if(saibig<highretu[i])
saibig<highretu[i];
}
printf("最大は%d\n", saibig);
return 0;
}
269デフォルトの名無しさん:2006/11/09(木) 21:22:46
>>268
if(saibig<highretu[i])
saibig<highretu[i];

if(i==0 || saibig<highretu[i])
saibig=highretu[i];
じゃね?
270デフォルトの名無しさん:2006/11/09(木) 21:43:12
[1] 授業単元: プログラミング演習U
[2] 問題文(含コード&リンク):
入力した文字列から指定した文字を検索するプログラムをポインタ変数を用いて作成せよ.
[実行例]
文字列を入力してください:Exercise
検索文字を入力してください:e

文字列"Exercise"に"e"は
3番目

[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン:visualstudio2003
 [3.3] 言語: C
[4] 期限: 11月11日
[5] その他の制限: よく考えたけど分かりませんでした。
         どなたかお願いします。
271デフォルトの名無しさん:2006/11/09(木) 21:47:01
1] 授業単元: プログラミング
[2] 問題文:
1.入力した文字列を反転するプログラムをポインタ変数を用いて作成せよ.
2.入力した文字列から指定した文字を検索するプログラムをポインタ変数を用いて作成せよ.
[実行例]
文字列を入力してください:Exercise
検索文字を入力してください:e
文字列"Exercise"に"e"は
3番目
8番目
にあります.

文字列を入力してください:Exercise
検索文字を入力してください:a
そんな文字は入っていない!
[3] 環境
[3.1] OS:Windowsxp
[3.3] 言語:C++
[4] 期限:明日の午前中

よろしくお願いします。
272デフォルトの名無しさん:2006/11/09(木) 21:50:11
>>270
>>271
なんでむちゃくちゃ似てるの?
273デフォルトの名無しさん:2006/11/09(木) 21:50:22
>>270
ポインタ使えばいいんだな

#include <stdio.h>
#include <string.h>
int main() {
char str[128], str2[128];
char *p;
printf("文字列を入力してください:");
scanf("%s\n", str);
printf("検索文字を入力してください:");
scanf("%s", str2);
p = strstr(str, str2);
printf("文字列\"%s\"に\"%s\"は\n%d番目", str, str2, p-str+1);

return 0;
}
274デフォルトの名無しさん:2006/11/09(木) 21:53:06
>>273
よっしゃおまいは正しいぞ!
ただちょっと天邪鬼さんだったな
275デフォルトの名無しさん:2006/11/09(木) 21:57:42
[1] 授業単元: Cプログラミング演習2
[2] 問題文(含コード&リンク):
5人の学生の点数を読み込み、得点の高い順に並び替え、右のような得点グラフを作成せよ。
得点グラフは「#」は10点、「*」は1点に相当する。
条件:並び替えを行う関数と、引数として得点を受け取り、得点に応じたグラフを書く関数を
作成してプログラムを完成させなさい


1人目 >> 54
2人目 >> 67
3人目 >> 75
4人目 >> 92
5人目 >> 33
----------------------------
         得点グラフ
----------------------------
第1位 (92点): #########**
第2位 (75点): #######*****
第3位 (67点): ######*******
第4位 (54点): #####****
第5位 (33点): ###***

[3] 環境
 [3.1] OS: XPSP2
 [3.3] C
[4] 明日まで
[5] その他の制限:引数、戻り値まで習いました
276デフォルトの名無しさん:2006/11/09(木) 21:59:10
似たような問題ばっかだしFAQ作ったら50%は解決しそうだなあと思ったが
万が一にもこいつらがFAQなんか読むわけが無いことに気がついた
277デフォルトの名無しさん:2006/11/09(木) 22:04:20
まとめサイトでもあればいいのに
278デフォルトの名無しさん:2006/11/09(木) 22:15:57
>>275
#include<stdio.h>
#include<stdlib.h>
int score_cmp(const void *a, const void *b){
const int *pa, *pb;
pa=a;pb=b;
return *pb-*pa;
}
int main(void){
int i, score[5];
for(i=0;i<5;i++){
printf("%d人目 >> ", i+1);
scanf("%d", &score[i]);
}
qsort(score, sizeof(score)/sizeof(score[0]), sizeof(score[0]), score_cmp);
printf("----------------------------\n");
printf("     得点グラフ    \n");
printf("----------------------------\n");
for(i=0;i<5;i++){
printf("第%d位 (%3d点): ", i+1, score[i]);
for(;score[i]>=10;score[i]-=10) printf("#");
for(;score[i]>0;score[i]--) printf("*");
printf("\n");
}
return 0;
}
279278:2006/11/09(木) 22:18:57
qsort(score, sizeof(score)/sizeof(score[0]), sizeof(score[0]), score_cmp);

qsort(score, 5, sizeof(int), score_cmp);
280デフォルトの名無しさん:2006/11/09(木) 22:23:37
>>219
もっと初心者向きになりませんか?
281デフォルトの名無しさん:2006/11/09(木) 22:25:56
>>278
まさかqsort使ってくるとは思わなかったぜ
282デフォルトの名無しさん:2006/11/09(木) 22:42:12
俺たちはシェフじゃないんだからもっと初心者向きになりませんかといわれても困るぜ
283278:2006/11/09(木) 22:45:11
>>278 を変更
qsort(score, sizeof(score)/sizeof(score[0]), sizeof(score[0]), score_cmp);

for(i=0;i<5-1;i++){
int j, temp;
for(j=i+1;j<5;j++){
if(score[i]<score[j]){
temp=score[i];
score[i]=score[j];
score[j]=temp;
}
}
}
284デフォルトの名無しさん:2006/11/09(木) 22:47:18
[1] 授業単元:応用プログラミング
[2] 問題文(含コード&リンク):
入力した文字列のアルファベットをカウントするプログラムをポインタ変数を用いて作成せよ.
[実行例]
文字列を入力してください:Programming2

アルファベットの数
A or a --> 1
G or g --> 2
I or i --> 1
M or m --> 2
N or n --> 1
O or o --> 1
P or p --> 1
R or r --> 2

[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: Visual Sudio.NET2003
 [3.3] 言語: C
[4] 期限: 2006年11月14日
[5] その他の制限: よろしくお願いします。

285デフォルトの名無しさん:2006/11/09(木) 22:49:28
>>280
>>234なんかもあるぞ
219が理解できなかったんなら多分無理な気はするが…
286デフォルトの名無しさん:2006/11/09(木) 23:10:02
>>280 こんなんどう?
#include<stdio.h>

double f_n_0(int n){ /* f(0) (=sin(0)) の n 回微分 */
if(n%4==1) return 1.0;
if(n%4==3) return -1.0;
return 0.0;
}

double f(double x){
double value, x_beki_n=1.0, n_kaijo=1.0;
int n;

value=f_n_0(0);
for(n=1;n<20;n++){
x_beki_n*=x;
n_kaijo*=n;
value+=f_n_0(n)*x_beki_n/n_kaijo;
}
return value;
}

int main(void){
double x;

for(x=0;x<3.141592*2;x+=3.141592/6)
printf("f(%f)=%f\n", x, f(x));
return 0;
}
287俺に任せろ:2006/11/09(木) 23:16:43
>>280
シェフの気まぐれプログラミング初心者風
mysineをこれに差し替えろ
オーバーフローしてもそれは仕様です
double mysin(double x){
return x-x*x*x/(3*2)+x*x*x*x*x/(5*4*3*2) -x*x*x*x*x*x*x/(7*6*5*4*3*2)+x*x*x*x*x*x*x*x*x/(9*8*7*6*5*4*3*2)
-x*x*x*x*x*x*x*x*x*x*x/(11*10*9*8*7*6*5*4*3*2)+x*x*x*x*x*x*x*x*x*x*x*x*x/(13*12*11*10*9*8*7*6*5*4*3*2)
-x*x*x*x*x*x*x*x*x*x*x*x*x*x*x/(15*14*13*12*11*10*9*8*7*6*5*4*3*2)
+x*x*x*x*x*x*x*x*x*x*x*x*x*x*x/(17*16*15*14*13*12*11*10*9*8*7*6*5*4*3*2)
-x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x/(19*18*17*16*15*14*13*12*11*10*9*8*7*6*5*4*3*2)
+x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x/(21*20*19*18*17*16*15*14*13*12*11*10*9*8*7*6*5*4*3*2)
-x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x/(23*22*21*20*19*18*17*16*15*14*13*12*11*10*9*8*7*6*5*4*3*2)
+x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x/(25*24*23*22*21*20*19*18*17*16*15*14*13*12*11*10*9*8*7*6*5*4*3*2)
-x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x/(27*26*25*24*23*22*21*20*19*18*17*16*15*14*13*12*11*10*9*8*7*6*5*4*3*2)
+x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x/(29*28*27*26*25*24*23*22*21*20*19*18*17*16*15*14*13*12*11*10*9*8*7*6*5*4*3*2)
-x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x/(31*30*29*28*27*26*25*24*23*22*21*20*19*18*17*16*15*14*13*12*11*10*9*8*7*6*5*4*3*2)
+x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x/(33*32*31*30*29*28*27*26*25*24*23*22*21*20*19*18*17*16*15*14*13*12*11*10*9*8*7*6*5*4*3*2)
-x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x/(35*34*33*32*31*30*29*28*27*26*25*24*23*22*21*20*19*18*17*16*15*14*13*12*11*10*9*8*7*6*5*4*3*2)
+x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x/(37*36*35*34*33*32*31*30*29*28*27*26*25*24*23*22*21*20*19*18*17*16*15*14*13*12*11*10*9*8*7*6*5*4*3*2)
-x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x/(39*38*37*36*35*34*33*32*31*30*29*28*27*26*25*24*23*22*21*20*19*18*17*16*15*14*13*12*11*10*9*8*7*6*5*4*3*2)
}
288デフォルトの名無しさん:2006/11/09(木) 23:21:13
なにそのコンパイラのバグ探しのためのようなコード
289デフォルトの名無しさん:2006/11/09(木) 23:26:41
>>287
ぐっジョブ!
290デフォルトの名無しさん:2006/11/09(木) 23:30:01
>>287
この解答を見てしまったときの教師の精神状態を想像して吹いた
291デフォルトの名無しさん:2006/11/09(木) 23:31:57
>>284
#include<stdio.h>
#include<ctype.h>

int main(void){
int count[26]={};
char buf[512], *p;
int i;

printf("文字列を入力してください:");
gets(buf);

for(p=buf;*p!='\0';p++){
if(isalpha(*p))
count[toupper(*p)-'A']++;
}

printf("\nアルファベットの数\n");
for(i=0;i<26;i++)
if(count[i]>0)
printf("%c or %c --> %d\n", 'A'+i, 'a'+i, count[i]);

return 0;
}
292デフォルトの名無しさん:2006/11/09(木) 23:34:49
一応、定石通りなんだろうケド・・・
293デフォルトの名無しさん:2006/11/09(木) 23:48:22
>>258
swap(a,b) は
a^=b;
b^=a;
a^=b;
と書くことが出来る。a^=b は a=a xor b な。
294デフォルトの名無しさん:2006/11/09(木) 23:52:45
>>293
それ初学者に示す場合には、a と b が同じ変数の場合にNGとなることも教えた方がいい。
295デフォルトの名無しさん:2006/11/09(木) 23:57:22
>>293
だからだめだって。
a==bの時に0になっちまうだろうが。
296デフォルトの名無しさん:2006/11/09(木) 23:59:05
>>295
そうじゃなくて &a==&b の時でしょ
297デフォルトの名無しさん:2006/11/10(金) 00:19:58
>>293
こんな方法があったんだ、正直感動した。
298デフォルトの名無しさん:2006/11/10(金) 00:24:36
>>293
書けねーよ
定期的に沸くな、こういうアホ
299デフォルトの名無しさん:2006/11/10(金) 00:33:24
http://ja.wikipedia.org/wiki/XOR%E4%BA%A4%E6%8F%9B%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0
わざわざ項目が作られてるんだな
俺はアセンブラの教科書で読んだ記憶がある
300デフォルトの名無しさん:2006/11/10(金) 00:36:23
[1] 授業単元:アルゴリズム概論
[2] 問題文(含コード&リンク):
&dで指定したp->dataを削除するように、???の部分を埋めなさい。
変数を新たに追加してもかまわない。なお、消し終えた部分の
p->nextはfree();を使って開放すること。さらに、p->dataは???
の部分で使えない事とする。基本的に???の部分(と変数追加)のみ改造すること。
解答は???の部分だけ提出すること。
問題文↓
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2910.txt
[3] 環境
 [3.1] OS: WindowsXP(HomeSP2)
 [3.2] コンパイラ名とバージョン: Visual Sudio.NET2005(C++)
 [3.3] 言語: C言語
[4] 期限: 2006年11月10日のPM5:00まで
[5] その他の制限:全然分からなくて素で困っていますorzお願いしますorz
301デフォルトの名無しさん:2006/11/10(金) 00:39:29
こんな寝静まる時間に…
302300:2006/11/10(金) 00:43:23
ってWhile文の中が違っていたorz
while(d1>0 && d2>0)ではなくて、while(d>0)だったorz
303デフォルトの名無しさん:2006/11/10(金) 00:59:28
>>302
p = start;
while (p->next != NULL)
{
if(p -> data == d)
{
tmp->next = p->next;
free(p);
break;
}
tmp = p;
p = p->next;
}

こんなんでいいんかな?
304303:2006/11/10(金) 01:01:32
訂正。
while (p != NULL)
305デフォルトの名無しさん:2006/11/10(金) 01:31:33
#include<stddef.h>
tmp = (struct node*)((char*)&start - offsetof(struct node, next));
306デフォルトの名無しさん :2006/11/10(金) 01:41:13
>>271

#include <stdio.h> #include <string.h> int main() { char *str; char p;
int i = 0,j; printf("文字列を入力してください:"); scanf("%s", str);
printf("検索文字を入力してください:"); scanf("%1s", &p); /*反転表示*/ while(1){
if (*(str + i) == '\0'){ i--; break; } else i++; } printf("反転表示:");
for (;i >= 0; i--) printf("%c",*(str + i)); printf("\n\n"); /*検索*/
printf("文字列\"%s\"に\"%s\"は\n", str, &p); for(i = 0, j = 0; *(str + i); i++)
if (*(str + i) == p){ printf("%d番目です\n", i + 1); j++; } if (!j)
printf("ありません\n"); else printf("にあります.\n"); return 0;}

307219:2006/11/10(金) 02:01:59
>>280
一千万回ズッコケた
308デフォルトの名無しさん:2006/11/10(金) 02:18:52
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2912.c
このプログラムを参考にして、x ln x - 1を二分法によって求めよ。

[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:borland c 5.5
 [3.3] 言語: C
[4] 期限: 2006年11月10日10:00まで
[5] その他の制限:特にありません

申し訳ありませんが、よろしくお願いします。


309デフォルトの名無しさん:2006/11/10(金) 02:22:28
>>278
問題文もまともに読めない奴に限ってくだらないことしたがるんだな。
>引数として得点を受け取り、得点に応じたグラフを書く関数
310デフォルトの名無しさん:2006/11/10(金) 02:37:28
[1] 授業単元:ファイルからの入力・構造体
[2] 問題文
ファイル「kyotocity.txt」には、
京都市の区ごとの人口(人)と面積(平方キロメートル)が記述されている。
これらの情報を格納する構造体 struct division を宣言しなさい。
struct division {
 char name[20];
 int population;
 double area;
}
struct division型の配列 kyoto[11]を用意し、
ファイルからデータを読んで、配列に入力しなさい。
入力した構造体の配列を調べて、以下の情報を出力しなさい。

人口が最大の区と最小の区の、名前と人口。
面積が最大の区と最小の区の、名前と面積。
人口密度が最大の区と最小の区の、名前と人口密度。

[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: Visual Studio.NET2003
 [3.3] 言語: C
[4] 期限: 2006年11月12日
[5] その他の制限: よろしくお願い致します。
311デフォルトの名無しさん:2006/11/10(金) 02:41:26
[1] 授業単元:プログラミング実習II

[2] 問題文(含コード&リンク):
入力した日の曜日を返す関数を書け。

注意)
1.00年01月01日は月曜日とする。
2.閏年も正しく判定せよ。
3.提出する際は関数を使い、実際に曜日を判定できるプログラムを提出すること

実行例
年月日を入力してください
年:2006
月:11
日:6
2006年11月6日は月曜日です。

[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: Boland C++ 5.5.1
 [3.3] 言語: C言語
[4] 期限: 2006年11月12日(日)
[5] その他の制限:なし

よろしくお願いいたします。
312デフォルトの名無しさん:2006/11/10(金) 02:50:52
>2.閏年も正しく判定せよ。
この「正しく」ってのは、グレゴリオ歴でいいんかいな?
313デフォルトの名無しさん:2006/11/10(金) 02:59:21
>>312
再度プリントを確認しましたがその辺の指定はありません。
実行結果も書かなければいけないのですが、それは自分の誕生日です。

なので自分の誕生日が正しく判定できればいいです。
よろしくお願いいたします。
314デフォルトの名無しさん:2006/11/10(金) 02:59:28
そうなんじゃね?
315デフォルトの名無しさん:2006/11/10(金) 03:08:46
>>313
あ…どうでもいいですが、判定するのは教授の誕生日の曜日だった…。
316デフォルトの名無しさん:2006/11/10(金) 03:10:10
教授カワイス
317デフォルトの名無しさん:2006/11/10(金) 03:13:32
>>316
私の誕生日って書いてあったので、最初は自分自身のかと思ったけど
教授の生年月日が書いてあったので多分、教授のを判定しろって事ですよね…
318デフォルトの名無しさん :2006/11/10(金) 03:18:37
>>300
25行目に int d1=10,d2=10;を挿入し
/* 要素の削除 */
p = tmp = start;
for(i = 0;i < 10 & tmp != NULL; i++)
if (d == (*tmp).data){
if (start == tmp)
start = tmp->next;
else
p->next = tmp->next;
d1--;
free(tmp);
break;
} else {
p = tmp;
tmp = tmp->next;
}
if (d1 == 0)
break;
こんな感じか?
d1とd2の意味がわからなかった。スマン
319デフォルトの名無しさん:2006/11/10(金) 05:02:01
>>311
2000年1月1日は土曜日なんだが…
320デフォルトの名無しさん:2006/11/10(金) 05:05:13
2000年1月1日ではなく0000年1月1日です
321デフォルトの名無しさん :2006/11/10(金) 07:14:20
>>310

#include <stdio.h> #include <string.h> struct division { char name[20]; int
population; double area; }; int main(void){ struct division kyoto[11]; FILE
*fp; int i = 0; int max_pop, min_pop, max_pop_name, min_pop_name, max_area_name,
min_area_name, max_area_name, min_area_name, max_poparea_name, min_poparea_name,
fpopulation; double max_area, min_area, max_poparea, min_poparea, farea; char
fname[20]; if ((fp = fopen("kyotocity.txt", "r")) == NULL){ printf(
"\aファイルオープン出来ません\n"); exit (0); } while(fscanf(fp, "%s%d%lf",
fname, &fpopulation, &farea) == 3){ printf("name = %s pop = %d farea = %lf",
fname,fpopulation,farea); kyoto[i].population = fpopulation; strcpy(
kyoto[i].name ,fname); kyoto[i].area = farea;

つづく
322デフォルトの名無しさん :2006/11/10(金) 07:15:15
>>310
つづきから
if (i == 0){ max_pop = min_pop = fpopulation; max_pop_name = min_pop_name = i;
max_area = min_area = farea; max_area_name = min_area_name = i; max_poparea =
(fpopulation / farea); min_poparea = max_poparea; max_poparea_name =
min_poparea_name = i; } else{ if (fpopulation < min_pop){ min_pop =
fpopulation; min_pop_name = i; } if (fpopulation > max_pop){ max_pop =
fpopulation; max_pop_name = i; } if (farea < min_area){ min_area = farea;
min_area_name = i; } if (farea > max_area){ max_area = farea; max_area_name =
i; } if ((fpopulation / farea) < min_poparea){ min_poparea = (fpopulation /
farea); min_poparea_name = i; } if ((fpopulation / farea) > max_poparea){
max_poparea = (fpopulation / farea); max_poparea_name = i; } } i++;}
printf("人口最大区:%-20s %d人\n", kyoto[max_pop_name].name, max_pop);
printf("人口最小区:%-20s %d人\n", kyoto[min_pop_name].name, min_pop);
printf("面積最大区:%-20s %d人\n", kyoto[max_area_name].name, max_area);
printf("面積最小区:%-20s %d人\n", kyoto[min_area_name].name, min_area);
printf("人口密度最大区:%-20s %d人\n", kyoto[max_poparea_name].name,
max_poparea);
printf("人口密度最大区:%-20s %d人\n", kyoto[min_poparea_name].name,
min_poparea);
fclose(fp); return 0;}

こんな感じか?

323278:2006/11/10(金) 07:31:56
>>309 同意 >>278 は問題を百回読んでから書き込め…      orz
void sort(int *data, int data_num){
int i, j, temp;
for(i=0;i<data_num-1;i++)
for(j=i+1;j<data_num;j++)
if(data[i]<data[j]){temp=data[i];data[i]=data[j];data[j]=temp;}
}
void print_bar(int score){
for(;score>=10;score-=10) printf("#");
for(;score>0;score--) printf("*");
printf("\n");
}
void print_graph(int *score, int score_num){
int i;
printf("----------------------\n   得点グラフ   \n----------------------\n");
for(i=0;i<5;i++){
printf("第%d位 (%3d点): ", i+1, score[i]);
print_bar(score[i]);
}
}
int main(void){
int i, score[5];
for(i=0;i<5;i++){
printf("%d人目 >> ", i+1);
scanf("%d", &score[i]);
}
sort(score, 5);
print_graph(score, 5);
return 0;
}
324デフォルトの名無しさん:2006/11/10(金) 12:31:21
>>311
0年1月1日はユリウス暦で今のグレゴリオ暦と違うが、そこまで考慮していない。
よって、以下のプログラムはグレゴリオ暦初日である1582年10月15日(金)以降の
日付に対してのみ正しい曜日を出力する。当然、0年1月1日の曜日は正しく出力
されないし、月曜日にもならない。もしどうしても必要ならば、自分で改造すること。
#include <stdio.h>
int day_of_week(int year, int month, int day) {
    if (month == 1 || month == 2) {
        --year;
        month += 12;
    }
    return (year + year / 4 - year / 100 + year / 400 + (13 * month + 8) / 5 + day) % 7;
}
int main(void) {
    int year, month, day;
    printf("年月日を入力してください\n年:"); scanf("%d", &year);
    printf("月:"); scanf("%d", &month);
    printf("日:"); scanf("%d", &day);
    printf("%d年%d月%d日は%s曜日です。\n", year, month, day, &"日\0月\0火\0水\0木\0金\0土"[3 * day_of_week(year, month, day)]);
    return 0;
}
325デフォルトの名無しさん:2006/11/10(金) 14:27:27
326OS:2006/11/10(金) 17:04:25
[1] 授業単元: オペレーティングシステム
[2] 問題文(含コード&リンク):
第4回課題 セルオートマトンの動作推移を表現する。
・空白セルと塗りつぶしセルの二つを用意し、塗りつぶしセルは、前が空白セルの場合は、進むことが出来るが、塗りつぶしセルの場合は、進むことが出来ない。(進行方向は左。)
・時間経過と共に、どのような推移をするのかを示す。(塗りつぶしセルがなくなった時点で終了。)
・結果表示は、別ウィンドウが望ましいが、コマンドライン上で構わない。
以下に、例を示す。
問題 □□■□■□が与えられるとする。
t=1 □■□■□□
t=2 ■□■□□□
t=3 □■□□□□
t=4 ■□□□□□
終了
また、今後
□□■

□■□
となるが、
■□■

■■□
となる左側で止めてしまう場合があるのです。
327OS:2006/11/10(金) 17:06:02
この問題は、□は、動ける場所、■は、渋滞していて動けない場所というものです。
ですが、取りあえずは、セルが左側に移動するものを第一段階として作りたかったので、宜しく御願いします。
発展問題に、左側で止めた場合、n秒後に、止めが解除されるとしてプログラムを作れというものもあります。
nは、コマンドラインから入力。(入力方式は問わない。)
(例)
t=1 ■□■
t=2 ■■□
t=3 ■■□
t=4 ■■□
t=5 ■□□
この場合、n=2と指定します。■■□の状態で、2秒、膠着状態が続いてますので。
[3] 環境
 [3.1] OS: windows
 [3.2] コンパイラ名とバージョン: VC6.0
 [3.3] 言語: C、C++ (出来ればC++が望ましい。)
[4] 期限: 2006年11月10日 23:59まで(出来れば23時まで。)
[5] その他の制限: 特になし
328デフォルトの名無しさん:2006/11/10(金) 17:14:20
あきらめたら?
329デフォルトの名無しさん:2006/11/10(金) 17:38:08
[1] 授業単元:情報演習
[2] 問題文(含コード&リンク):x円を年利1.4%で借りた場合と18%で借りた場合のn年後の返済総額を計算する
プログラムを作成せよ。プリプロセッサを用いて、金利が変動した場合にもすぐに対応できるようにすること。
(x,nの値はscanfを用いて入力)
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 明日まで
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
よろしくお願いします
330デフォルトの名無しさん:2006/11/10(金) 18:39:56
[1] 授業単元: Cプログラミング
[2] 問題文(含コード&リンク): read.txtファイルを読み込みそれに書かれたローマ字をひらがなに
直してwrite.txtファイルに書き込むプログラミング。出てくるローマ字はringo,budou,mikanのみ。
テキストは以下のような感じです。
ringo budou mikan
mikan
ringo budou
[3] 環境
 [3.1] OS:linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: c
[4] 期限: 2006年11月12日
[5] その他の制限:出来るだけ関数を使い、fopen,fcloseを使うこと

ファイル開くのと書き込みまでは出来たのですが、空白文字を読み込んだり変換がうまく
できません。こんなこと言うのも失礼ですが、関数名とうできるだけ分かりやすくお願いします。
331デフォルトの名無しさん:2006/11/10(金) 18:44:41
>>330
こんな感じ?
if (strcmp(buf,"mikan")==0)
fprintf(fp,"みかん");
332デフォルトの名無しさん:2006/11/10(金) 18:44:52
>>326
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2917.cpp

セルオートマトンとしては、>327 のt=4→t=5 の動きがおかしいのではないかという
以前の指摘に答えてないので、もしこの動きが間違いだとしても書き直しはしないよ。
333デフォルトの名無しさん:2006/11/10(金) 18:48:13
>>331
ありがとうございます!!比較はコレでつくれそうです。あとファイルから読み込むとき
一行ずつしかも空白文字も読み込んで配列に入れることはできますか?
334デフォルトの名無しさん:2006/11/10(金) 19:06:07
>>326
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2918.txt
とりあえず表示だけ終了条件がはっきりしないから止まりません
335デフォルトの名無しさん:2006/11/10(金) 19:35:55
>>329
学校特定した
336デフォルトの名無しさん:2006/11/10(金) 19:57:02
>>333
fgets()
337デフォルトの名無しさん:2006/11/10(金) 20:12:13
CFILE
338デフォルトの名無しさん:2006/11/10(金) 20:41:51
>>336
fgetsを使ったんですがread.txtの中身が
mikanandbudouなどのとき、出力としてテキストに書き込むと、
本当は「みかんandぶどう」としたいんですがうまくいきません。なにか
いい方法はないでしょうか?できればファイルからfgetsで読み込んで
どのように配列にいれif文等で判定すればこの様に変換できるか
教えてください。
339デフォルトの名無しさん:2006/11/10(金) 20:55:11
>>338
336じゃないけど、strstr()↓ とか使えない?
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/strstr.3.html
340デフォルトの名無しさん:2006/11/10(金) 21:08:28
>>338
>>330
んー。なんか、アルゴリズム見直したほーがいい気がするぞ。
1)5文字読む。5文字以下しか読めないならe)へ。
2)5文字がringo,budou,mikanのいずれかなら対応するひらがなを出力し、バッファをクリアし、1)へ。
3)先頭の1文字を出力する。
4)5文字のうち、先頭の1文字を捨てる。
5)新しく文字を1文字読み込む。読み込めたら2)へ。
e)残りの文字を出力する。
341デフォルトの名無しさん:2006/11/10(金) 21:08:40
mikanandbudou
こんな物までやるのか
342デフォルトの名無しさん:2006/11/10(金) 21:11:25
みかなんdぶどう
343デフォルトの名無しさん:2006/11/10(金) 21:23:09
CString、ハッシュテーブルで一発
344デフォルトの名無しさん:2006/11/10(金) 21:24:12
[1] 授業単元:情報技術英語U
[2] 問題文(含コード&リンク):
英文が書いてあるファイルdat.txtから単語を抽出するプログラム、
英文の空白は空白を表示し、","や"."も空白で返す。
dat.txtは次のものとする。

This is a pen.
I am a student.
It is impossible to solve this problem.
When she relaxes, she slips back into the local accent.
 
[3] 環境
 [3.1] OS:windowsXP
 [3.2] コンパイラ名とバージョン:lcc
 [3.3] 言語:C
[4] 期限:11月12日まで
[5] その他の制限:fclose,fopenを使う
345デフォルトの名無しさん:2006/11/10(金) 21:41:43
>>344
単語を抽出するのに空白もドットも関係なくない?
346デフォルトの名無しさん:2006/11/10(金) 22:04:25
>>344
#include<stdlib.h>
#include<stdio.h>
int main(){
  FILE *fp;
  char data[256];
  int c=0;
  int count=0;
  if( (fp=fopen("data.dat","r")) == NULL ) { exit(1); }
    while( (c=getc(fp)) != EOF){
      data[count] = c;
      if(c==' ' || c==',' || c=='.'){
        data[count] = '\0';
        printf("%s\n",data);
        printf("%c\n",c);
        count=0;
      }else{
        count++;
      }
    }
}
  return(0);
}
これでいいのか?
347346:2006/11/10(金) 22:08:25
クローズするの忘れてたw
しかもインデントがずれてるしorz
348デフォルトの名無しさん:2006/11/10(金) 22:13:59
He roared, "URRRYYYYYYY!!!!!"
349デフォルトの名無しさん :2006/11/10(金) 23:06:46
>>344
#include <stdio.h> #include <string.h> #include <stdlib.h>
typedef struct Word{ char *word;unsigned int num;struct Word *next;
}Word;Word *CountWord(void);
int main(){ Word *last = CountWord();Word *p;Word *temp;char *cf = NULL;
for(p = last; p != NULL; p = p->next) printf("%d %s \n", p->num, p->word);temp = last;
while(temp!=NULL){p = temp;cf = temp->word;temp = temp->next;free(p);free(cf);}return 0;}
Word *CountWord(void){FILE *fp;char buff[1024] = {'\0'};char *gDlim = " ,.\t\n";char *word = NULL;
unsigned num =1;unsigned len;Word *temp;Word *top = NULL;fp = fopen("dat.txt","r");
while(fgets(buff, sizeof(buff), fp)){word = strtok(buff,gDlim);while(word != NULL){
temp = (Word *)malloc(sizeof(Word));len = strlen(word);temp->word = (char *)malloc(len + 1);
strcpy(temp->word, word);temp->num = num;temp->next = top;top = temp;
num++;word = strtok(NULL, gDlim);}memset(buff, '\0', sizeof(buff));}fclose(fp);return temp;}



350デフォルトの名無しさん:2006/11/10(金) 23:10:17
>>349
読んでたら前頭葉あたりが痛くなってきた
351デフォルトの名無しさん:2006/11/10(金) 23:42:02
>>350
使いすぎです><;
352OS:2006/11/11(土) 00:15:33
>>332
有り難うございます。
353デフォルトの名無しさん:2006/11/11(土) 01:12:26
[1] 授業単元:プログラミング
[2] 問題文:以下のように1000個の整数を選択整列,挿入整列,バブルソートをつかってソートするプログラムを作成せよ。
     * データセット
o データセットは自分で作成すること.
     o rand関数を使用しなさい
o 同じ整数が2度以上現れないこと.

[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C
[4] 期限:11/13

354デフォルトの名無しさん:2006/11/11(土) 01:20:53
このスレは俺には早すぎた
355デフォルトの名無しさん :2006/11/11(土) 01:26:56
バブルソート
void bubble_sort(int sort[], int elements)
{ int i,j,temp;for(i=0; i < elements; i++){
for(j=i; j < elements; j++){if(sort[i] > sort[j]){ temp = sort[i];sort[i] = sort[j];sort[j] = temp;}}}}
選択ソート
void SimSelSort(int num[ ], int n)
{ int i, j, k, min, temp; for (i = 0; i < n - 1; i++) {
min = num[i]; k = i; for (j = i + 1; j < n; j++) { if (num[j] < min) {min = num[j]; k = j;}}
temp = num[i];num[i] = num[k];num[k] = temp;}}
単純挿入ソート
void InsertSort(int num[ ], int n)
{ int i, j, temp;for (i = 1; i < n; i++) {temp = num[i];
for (j = i; j > 0 && num[j-1] > temp; j--) num[j] = num[j -1];
num[j] = temp; }}
356デフォルトの名無しさん:2006/11/11(土) 01:31:50
>>355
あとデータセットの作り方がわからないので教えてくださいませんか?
357デフォルトの名無しさん:2006/11/11(土) 02:02:28
long deetasetto[1000];
int i,j;
for(i=0;I=<999;i++){
deetasetto[i]=rand();
for(j=0;j<i;j++){
if(deetasetto[i]==deetasetto[j]){
i=i-1;
break;
}
}
}

longじゃなくてintでいい気がするけど
どういう実装なんか知らんし一応これで
358デフォルトの名無しさん:2006/11/11(土) 12:41:55
[1] プログラミング
[2] 8queen問題で、対称性を持たない独自な解がいくつあるかを求めよ
[3] 環境
 [3.1] windowsXP
 [3.2] BCC
 [3.3] C言語
[4] 期限:2006/11/12
[5] その他の制限:特になし

ttp://free.gikoneko.net/up/source/up129964.c
↑は全解を求めるプログラムを元に作ったものですが、
答えは12のはずなのに15となってしまいます。
おかしい点を指摘していただければ助かります。
359デフォルトの名無しさん:2006/11/11(土) 12:48:36
ざっとしか眺めてないけど対角線に対する線対称のチェックって
回転と反転だけで吸収できるっけ?
360デフォルトの名無しさん:2006/11/11(土) 12:54:36
あーできるな
ごめんごめん
361デフォルトの名無しさん:2006/11/11(土) 13:17:21
compare()が1回足りてない気がする
しかし、それを追加したところで結果が変わらないから別なところに原因があるのか
362349:2006/11/11(土) 13:20:47
>>350
なんか、変なとこあった?
教えて
363デフォルトの名無しさん:2006/11/11(土) 13:36:41
[1] 授業単元:プログラミング (ファイルからの入力
[2] 問題文:10*10の任意の数字 (小数・負数含む) が書かれたファイルから最大値、最小値の表示
0 1 2 3 4 5 6 7 8 9
1...
2...
3..
4...
5...
6...
7...
8...
9..
ファイルは↑みたいな形式です。.
[3] 環境
 [3.1] OS:WinXP Pro
 [3.2] コンパイラ名とバージョン:Boland C 5.5.1
 [3.3] 言語:C
[4] 期限:2006/11/17
[5] その他の制限:前回が配列だったのでその程度のレベルで

364デフォルトの名無しさん:2006/11/11(土) 13:42:47
>>358

>>361にあるけど対称形は8通り
foundanswerで答えをanswerにちゃんとコピーしてない

yの値が不定なのによく落ちなかったものだ
365デフォルトの名無しさん:2006/11/11(土) 13:45:52
>>358
203行目に for(y=0;y<8;++y) が足りない

×if(compare()>0)
○if(compare()==0)
366364:2006/11/11(土) 13:59:50
>>365見て書き忘れてたの思い出した

compare()の中身が少し変
boardとtmpが同一かどうかの判定だけでいいと思う。
367349:2006/11/11(土) 19:24:53
>>363
10*10は10行10列ってことか?
それと、その任意の数字が書かれたファイルぐらいどっかにアップしろ
いちいち読み込むためのその任意の数字が書かれたファイルを作るのが
めんどう。
あと、前回が配列だったので、って前回ってどれだよ。
368デフォルトの名無しさん:2006/11/11(土) 19:39:20
>>367
前回の講義がってことじゃね?
369デフォルトの名無しさん:2006/11/11(土) 20:20:54
>10*10は10行10列ってことか?
そうです。

>いちいち読み込むためのその任意の数字が書かれたファイルを作るのがめんどう。
すみません、気が利きませんでした…
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2922.lzh
講義での用意がなかったため適当な物ですが。

>あと、前回が配列だったので、って前回ってどれだよ。
>>368さんのご推察通り、前回の講義です。
370デフォルトの名無しさん:2006/11/11(土) 21:01:53
>>235

#include <stdio.h>
#include <stdlib.h>
int main(int argc , char *argv[]) {
FILE *f1,*f2,*fs;
int c;
if (argc < 4) return 1;
if ((f1=fopen(argv[1],"r"))==NULL) exit(1);
if ((f2=fopen(argv[2],"r"))==NULL) exit(1);
if ((fs=fopen(argv[3],"w"))==NULL) exit(1);
while (1) {
if ((c=fgetc(f1))==EOF) break;
fprintf(fs,"%c",c);
}
while (1) {
if ((c=fgetc(f2))==EOF) break;
fprintf(fs,"%c",c);
}
printf("\(^o^)/オワタ\n");
fclose(f1);
fclose(f2);
fclose(fs);
return 0;
}

中学生にも出来た
371デフォルトの名無しさん:2006/11/11(土) 21:05:43
>>370
2時間だったんだよ〜二日じゃないよ〜><
372デフォルトの名無しさん:2006/11/11(土) 21:50:57
while (1) {
if ((c=fgetc(f1))==EOF) break;
fprintf(fs,"%c",c);
}
while (1) {
if ((c=fgetc(f2))==EOF) break;
fprintf(fs,"%c",c);
}


ここらへんがもにょるな
不思議なプログラムだ
373349:2006/11/11(土) 22:05:30
>>369
中身みたら00〜99までの数字が順番に書いてるだけじゃん
そうじゃなくて、少数・負数含むんじゃないの?
それも任意だから、順番じゃないだろうし
指数表現した小数とかも含むのかとかそういう意味で
そういうファイルを作ってって言ったの
374デフォルトの名無しさん:2006/11/11(土) 22:35:35
>>363
#include <float.h>
int main(void){
FILE *f=fopen("file.txt","r");
if (!f) goto RET;
char cp_line[1024],*p,*b;
double d,d_min=DBL_MAX,d_max=DBL_MIN;
for(;;){
if (!fgets(cp_line,1024,f)) break;
for(p=cp_line;;){
d=strtod(b=p,&p);
if (p!=b){
if (d<d_min)
d_min=d;
if (d>d_max)
d_max=d;
}
if (!*(p++)) break;
}
}
printf("最小値: %f\n",d_min);printf("最大値: %f\n",d_max);fclose(f);
RET:return 0;
}

こんなんでいい?
375デフォルトの名無しさん:2006/11/11(土) 23:22:15
>>371
あ〜らら。期限を
>[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
にしたがって書かないからだよ。

テンプレはただ漫然とそこにあるんじゃなくて、過去に発生した誤解などを元に
再び同じ過ちを繰り返さないように調整してあるんだから。
376デフォルトの名無しさん:2006/11/12(日) 00:19:03
[2] 問題文(含コード&リンク):
Hello World!
Hello World!
Hello World!
Goodbye World!
Hello World!
Hello World!
Hello World!
Goodbye World!
Hello World!
Hello World!

のように出力するプログラムを、以下の@〜Cの各条件で実現せよ。

@forとifを用いた方法
但し、出力する行数が増えても同じパターンでの出力が可能であるようにせよ。
すなわち、ベタにifで4行目を判定してGoodbye World!にしてはならない。
Aforとswitch-caseを用いた方法
但し、breakは一度しか使ってはならない。
すなわち、default節を有効に活用せよという事である。
これについても、行数が増えても対応可能なアルゴリズムを考えよ。
Bwhileとifを用いた方法
注意は@と同様
Cwhileとswitch-caseを用いた方法
注意はAと同様

[3] 環境 [3.1] WindowsXP [3.2] BCC [3.3] C
[4] 無期限 早めがいいです
[5] 繰り返し文までです
377デフォルトの名無しさん:2006/11/12(日) 00:39:28
>>376
意図がいまいちわからんのだがこうかな?
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2923.txt
378デフォルトの名無しさん:2006/11/12(日) 00:52:37
>>377
サンクスです! 頭がすっきりしました
379349:2006/11/12(日) 01:29:14
>>369
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2924.txt
一応ランダムな数字の10行10列のファイルを作成し、読み取り最大値最小値を表示させる
ようにしたのだけど、どうも、数値は読み込めてるが、表示する値が最大値最小値じゃないようで
ソートの時か、別問題か、わかんないんで他の人にパスします。
380358:2006/11/12(日) 02:57:01
レス遅くなりました。

対称形は、
・元の形の90〜270度回転の3つ
・元の形の反転の0〜360度回転の4つ
のトータル7つではないかと思ったのですが違うのでしょうか。
追加で質問するようになりますが、もう1つが何か教えていただけたら助かります。

ご指摘の通り、for(y=0;y<8;++y)は足りてないですね。
ただ、実行はできているのがフシギです。

compare()は同一かどうかだけの判断にしました。

if文の記述を直す(">"→"==")と、うまく実行できるようになりました。


最後になりましたが、
>>359=360さん、>>361さん、>>364=366さん、>>365さん、ありがとうございました。
381デフォルトの名無しさん:2006/11/12(日) 03:26:40
[1] 授業単元:情報基礎
[2] 問題文(含コード&リンク):
以下の2つをそれぞれプログラムにしてコンパイル・実行させる。
エラーが出なくなったら、1つにまとめてファイル名:1107.txt、レポート第5回送付
1.keisan.c
変数 x と y を用い、簡単な計算をして結果を表示させるプログラム
[3] 環境
 [3.1] OS: WinXP
 [3.2] コンパイラ名とバージョン: Boland C 5.5.1
 [3.3] 言語: C
[4] 期限: 本日(正午12:00)
[5] その他の制限: ほんとの基礎の基礎です。初めて2回目くらいです。

お願いします。
382381:2006/11/12(日) 03:28:11
訂正です。
問題文に以下二つってありますけど、1つなんで気にしないでください。
あと、小数の計算もできるようにお願いします。
383デフォルトの名無しさん:2006/11/12(日) 03:48:23
>374
ゴトゥは使わない方がいいと聞いているのですがいいんですか?
わたしは>363じゃないですけど
384デフォルトの名無しさん:2006/11/12(日) 04:02:27
>>383
gotoは使ってもいいけど、奇麗な構造をブチ壊すような使い方は余り好まれない
ブチ壊した例)
※ブロック記号の"{"と"}"はCのブロックステートメントを意味しているわけじゃないです
 概念的なくくりだとおもてください
{ ...A... there ... goto here }
{ ...B... goto there
 { ...C... here ... }
}
こんな風になってると、"{"と"}"の構造をブチ壊した構造に出来るので好まれない

>>374はオレなら
int main(..){
 if(!〜) return 1;
 〜K〜
}
とかにするんじゃないかな
(仮にKが30行くらいのコードだと考えれば、この方法なら可読性を維持できる)
385デフォルトの名無しさん:2006/11/12(日) 05:22:07
>>381
簡単な計算ってなんだろ・・・四則演算?
基礎の基礎って言ってるからプログラム中で変数決めていいのかな

#include <stdio.h>

int main(void)
{
int x,y;
x = 10;
y = 10; //x,yは任意
printf("%d",x+y); //上から順に加減乗除
printf("%d",x-y);
printf("%d",x*y);
printf("%d",x/y);
return 0;
}
386385:2006/11/12(日) 05:25:15
少数の計算っての見落としてた

宣言部分の int ⇒ double
printfの%dを%f
387デフォルトの名無しさん:2006/11/12(日) 07:01:20
[1] 授業単元:Cプラクティス
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2926.txt
このプログラムでは、コンピュ−タがマークを置く位置を乱数で生成している。
三目並べの最善手のアルゴリズムを求めなさい。
また、Computer関数を修正しコンピュ−タが最善手を打つようにプログラムを改良しなさい。
なお、三目並べでは、双方が最善手を打つと引き分けとなる。

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:BCC5.5
 [3.3] 言語:C
[4] 期限:2006年11月13日01:00まで
[5] その他の制限:C言語勉強して1年くらいの人が書く感じでお願いします。

この三目並べの最善手がわからなくて、単純に相手が置いた隣とかではだめでした。
どうやったら最善手が求められるのかもお願いします。
388デフォルトの名無しさん:2006/11/12(日) 07:17:52
つ Wikipedia
389387:2006/11/12(日) 07:26:23
>>388
Wikipediaに最善手自体は載っているのですが、そこにたどり着くまでの考え方とアルゴリズムが知りたいのです。
390デフォルトの名無しさん:2006/11/12(日) 08:30:57
>>387
これでも十分最善手だとおも
int i,ret,th[2]={turn,human};
for(i=0;i<sizeof(th);i++){
for(*height=0;*height<MAX_HEIGHT;++*height){
for(*width=0;*width<MAX_WIDTH;++*width){
if(board[*width][*height]==EMPTY){
board[*width][*height]=th[i];
ret=IsComplete();
board[*width][*height]=EMPTY;
if(ret)return;
}
}
}
}
if(board[*width=1][*height=1]==EMPTY)return;
for(*height=0;*height<MAX_HEIGHT;++*height){
for(*width=0;*width<MAX_WIDTH;++*width){
if(board[*width][*height]==EMPTY)return;
}
}
391387:2006/11/12(日) 08:48:03
>>390
先手で、(2,2),(3,3),(3.1),(1,3)と打つと勝ててしました。
何が悪いのか考えてみます。
あと、引き続き>>387をよろしくお願いします。
392デフォルトの名無しさん:2006/11/12(日) 10:23:21
>>387
この手の問題の解法って探索しかなくね?ということで、完全探索アルゴリズムを
実装してみた。まともにチェックしてないけど。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2927.c
393デフォルトの名無しさん:2006/11/12(日) 10:42:15
[1] 授業単元:計算科学
[2] 問題文
確率変数Xが確率密度関数
0( x < 0)
p(x)=(1/2)e^-x/2( x >=0)
に従うとしよう
サンプル0502sample.cを書き換えて,
サンプル数?
300
シード?
128478
と入力すると, 逆関数法を利用して p(x) に従う xを生成する(ただし, X=-1/alog(1-r)を使う).
これを300回生成し, 平均, 分散, 0.0と4.0の間を何個かのビンに分割して
ヒストグラムを出力するプログラムを作ろう. ビンの個数は, 8,80 など, 何種類か試そう.
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: Visual Studio.NET2003
 [3.3] 言語: C
[4] 期限: 2006年11月14日09:00まで
[5] その他
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2928.txt
を利用して作ってください
394デフォルトの名無しさん:2006/11/12(日) 15:25:57
うちのぐーぐるさんは、
 ○×
って問い合わせしても無視します。なぜでしょうか?
395デフォルトの名無しさん:2006/11/12(日) 15:41:29
○とか×とか、そういうのグーグルは嫌いなんだよ。
396デフォルトの名無しさん:2006/11/12(日) 16:02:13
[1] 授業単元:コンピュータ実習T
[2] 問題文(含コード&リンク):
構造体に値を設定する。

struct numb {
int n;
double d;
}

の構造体で100の要素を持つ配列を用意する。

メンバー変数 n には 0, 1, 2, - - - 99 を設定し
メンバー変数 d には 0.99, 0.98, 0.97, - - - 0.0 を設定する。

できれば ポインターを使うこと。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語: C
[4] 期限: 11月15日
[5] その他の制限:特になし
397デフォルトの名無しさん:2006/11/12(日) 16:07:00
int main(void){
  int i;
  struct numb hoge[100], *p;
  for(i=0,p=hoge;i<100;i++){
    p[i].n=i;
    p[i].d=(99-i)/10; //アヤシイ
  }
}

無理にポインタ使ってみた
最近Cやってない
398デフォルトの名無しさん:2006/11/12(日) 17:18:11
>>397
//アヤシイ
のところは先にキャストしとくか99.0とか10.0とかにするべきだろう
399デフォルトの名無しさん:2006/11/12(日) 18:18:52
[1] 授業単元:情報処理
[2] 問題文:1から12の数字を縦3,横4で表記させよ。
 <例>1 4 7
     2 5
     3
 [3] 環境
 [3.1] OS:windows
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C
[4] 期限:明日の14時
[5] その他の制限:9月から受講しているのでなるべく簡単な関数でお願いします!
400デフォルトの名無しさん:2006/11/12(日) 18:24:09
#include <stdio.h>
main(){
printf("1 4 7 10\n2 5 8 11\n3 6 12");
}
401デフォルトの名無しさん:2006/11/12(日) 18:24:36
[1] 授業単元:C言語基礎U
[2] 問題文(含コード&リンク):
二次方程式の3つの係数を入力させ、解を出力するプログラムを作れ(0=Ax^2+Bx+C)
実数解が存在しない場合は、「実数解が存在しません」と表示させる事。小数点は第二位まで。
(例1)係数を入力してください
    A=3,B=5,C=1
    解:x=-1.43,-0.23
(例2)係数を入力してください
    A=2,B=3,C=4
解:実数解が存在しません
※係数に応じ、一次方程式になる場合、判別式Dの値によって
実数解が存在しないしない場合、重解となる場合、解が二つ存在する場合、があることに注意。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語:C
[4] 期限:11月13日の13:00まで
[5] その他の制限: 特になし
一週間も前から考えていたけれど、全然分かりません。どうかお願いいたします。
402デフォルトの名無しさん:2006/11/12(日) 18:24:38
9がぬけた
403デフォルトの名無しさん:2006/11/12(日) 18:28:24
>>400 ありがとうございます!
404400:2006/11/12(日) 18:31:18
ちょっと待て
冗談で書いたのにこれでいいのか
405デフォルトの名無しさん:2006/11/12(日) 18:55:21
>>404 え!?そうなんですか・・・。
すみません。他の方法があれば是非教えてください!!
406デフォルトの名無しさん:2006/11/12(日) 18:58:14
[1] 授業単元:Cプログラミング
[2] 問題文(含コード&リンク):html.txtのHTML方式で書かれた文を
LaTEXに書き換え、latex.txtに書き換える。
html.txtの中身
<table>
<tr align="center"><td>Hello world</td><td align="right">Hello</td></tr>
</table>
[3] 環境
 [3.1] OS:Linux
 [3.2]コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:2006年11月13日
[5] その他の制限:
407デフォルトの名無しさん:2006/11/12(日) 19:02:21
>>401

#include <stdio.h>
#include <math.h>
double hanbetusiki(int a,int b,int c){
return b*b-4*a*c;
}

main(){
int a,b,c;
double d;
printf("係数を入力してください\nA=");
scanf("%d",&a);
printf("B=");
scanf("%d",&b);
printf("C=");
scanf("%d",&c);
d=hanbetusiki(a,b,c);
printf("解:");
if(d>0) printf("x=%.2f,%.2f",(-1.0*b+sqrt(d))/a/2,(-1.0*b-sqrt(d))/a/2);
else if(d==0) printf("x=%.2f",(-1.0*b)/a/2);
else printf("実数解が存在しません");
}

今ひとつ問題の要求とかみ合ってない答えだけど
これでいいのかなあ
408デフォルトの名無しさん:2006/11/12(日) 19:02:30
>>399
#include<stdio.h>
int main(){
int i;
for(i=1;i<13;i++){
printf("%3d ",i);
if(i%4==0){ printf("\n"); }
}
return(0);
}
つられてみるw
409デフォルトの名無しさん:2006/11/12(日) 19:02:56
これ、本来なら構文解析ものですぜ、だんな
410デフォルトの名無しさん:2006/11/12(日) 19:12:10
>>408 すみません。俺も最初そう思ったんですが、
よくみたら縦に1、2、3だったんです。

でも、ありがとうございます!!

411デフォルトの名無しさん:2006/11/12(日) 19:13:17
>>406
ttp://www.iwriteiam.nl/html2tex_c.txt
これ使えるんじゃね?w
412デフォルトの名無しさん:2006/11/12(日) 19:20:57
>>411
ごめんなさい。私には理解できませんでした。。。先生いわく、すべてのhtml
を変換するのは大変なので、今回は使われているのだけを変換できれば
いいそうです。
413デフォルトの名無しさん:2006/11/12(日) 19:52:47
>>410
>408 を改造してみる。

#include<stdio.h>
int main(){
int i;
for(i=0;i<12;i++){
printf("%3d ",i/4+(i%4)*3+1);
if(i%4==3){ printf("\n"); }
}
return(0);
}
414デフォルトの名無しさん:2006/11/12(日) 19:53:54
>>407
ありがとうございます!なんとかなりそうです!
415デフォルトの名無しさん:2006/11/12(日) 20:14:00
>>413 ありがとうございます!本当に助かりました!
416デフォルトの名無しさん:2006/11/12(日) 20:35:56
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
キーボードから重複を許して与えられるN個のint型の値の中で、2番目に大きな値を印字するプログラムを作成せよ。そのような値がない場合は「なし」と印字。データの個数N(≧1)はマクロNで与えられるものとする。値は一度に1つずつ入力されるものとする。
[3] 環境
 [3.1] OS: Linux
 [3.2] gcc
 [3.3] 言語: c
[4] 期限: 2006年11月14日まで
[5] 四則演算、繰り返し、配列ぐらいしかやっていません。
配列の分野の問題です。


417デフォルトの名無しさん:2006/11/12(日) 21:16:28
配列使わんがな(´・ω・`)
418デフォルトの名無しさん:2006/11/12(日) 21:57:35
4つの文字列のメンバを持つ構造体があります。
struct data
{
char d1[128];
char d2[64];
char d3[32];
char d4[64];
}
この内容をcvsファイルとして出力したのちに、ファイルから読み込みたいのですが…。
一文字ずつfgetsしてカンマを判定して処理するしかないですか?
419デフォルトの名無しさん:2006/11/12(日) 22:11:50
>>418
「"」で囲われた「,」は区切りではない等といったメタな処理が無ければ、
fgets() で一行読み込んで sscanf() で解析するのが定石。
420デフォルトの名無しさん:2006/11/12(日) 22:28:03
>>416
2番目に大きい値がないとはどういう状態だ?
421416 ◆nZ5tHzSn6E :2006/11/12(日) 22:33:32
トリつけます

>>420
例えば
5 5 5 5
(全て同じ値)

とか


(値が1つしかない)

といった感じです。
422デフォルトの名無しさん:2006/11/12(日) 22:53:08
>>418
エラー処理とかやってないけど、これでどうですか?
data d = {"test","test2","test3","test4"};
fstream f("test.txt", ios::out);
f << d.d1 << ',' << d.d2 << ',' << d.d3 << ',' << d.d4;
f.close();

string s = "";
char buf[128];
f.open("test.txt", ios::in);
while(f.getline(buf, sizeof(buf), ',')){ s += buf; }
f.close();

cout << s << endl;
423デフォルトの名無しさん:2006/11/12(日) 23:16:41
>>416
#include <stdio.h>
#include <limits.h>
#define N 10

main(){

int atai[N];
int tmpmax=INT_MIN,tmpnibanme=INT_MIN;
printf("今から%d個の数値を入力してもらいます\n%dを入力したらころします",N,INT_MIN);
for(i=0;i<N;i++){
printf("%d番目の値を入力してください",i+1);
scanf("%d",&atai[i]);
}

for(i=0;i<N;i++){
if(atai[i]>tmpmax){
tmpnibanme=tmpmax;
tmpmax=atai[i];
}
else if(atai[i]>tmpnibanme) tmpnibanme=atai[i];
}

if tmpnibanme>INT_MIN printf("多分%d",tmpnibanme);
else
printf("なし");

}
424デフォルトの名無しさん:2006/11/12(日) 23:33:28
>>393
x=-2*log(1-get_uniform_rand());
425406:2006/11/12(日) 23:33:37
html→latexはhtmlとlatex分からないと出来ないと思うのでそこは自分で
かんがえますから
どなたか、配列の中からある文字列に合致するのを選んで処理する方法だけでも
教えていただけないでしょうか?
例えば次のように
it is my pen という文字列が入った配列strからitをthisにmyをyourに変えて
strに入れなおす。みたいな感じで
426デフォルトの名無しさん:2006/11/12(日) 23:40:58
>>406,425
yacc とか bison について調べてみては?
427416 ◆nZ5tHzSn6E :2006/11/12(日) 23:49:56
>>423
ありがとうございます。
#include <limits.h>は習ってませんが、参考にさせていただきます。
428デフォルトの名無しさん:2006/11/12(日) 23:56:02
>>427
<limits.h>はただのマクロなんで深く考えずに使っていいと思う
後int tmpmax=INT_MIN,tmpnibanme=INT_MIN; を
long型にしてLONG_MINにすれば実行した人をころさずにすむ
429406:2006/11/13(月) 00:05:44
宿題スレでこの質問は間違っているとも思いますが、現在リストやポインタ
を習っていて少し行き詰っています。なにか良い参考書はありませんでしょうか?
430デフォルトの名無しさん:2006/11/13(月) 00:06:23
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):1から100までの素数の和を求めるプログラムを書け。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:lcc-win32
 [3.3] 言語:C

検索してみましたが、答えが見つからないのでねがいします。
431デフォルトの名無しさん:2006/11/13(月) 00:09:50
>>430
このスレを素数で検索
432デフォルトの名無しさん:2006/11/13(月) 00:31:14
>>431
問題が少し違うので、どこをどう変えれば1から100までの素数の和になるか教えていただきたいです。お願いします。
433デフォルトの名無しさん:2006/11/13(月) 00:39:12
[1] プログラミング
[2]
src[] 内の文字が大文字の場合は小文字にして (それ以外の文字はそのまま) dst[] にコピーする関数 str_lcopy(char dst[], char src[]) を作成せよ.
下のような main でこの関数の動作をテストせよ. str_lcopy が src の値を書き換えてならないことに注意. "This is the 21st Century!" を入力して,
src: This is the 21st Century!
dst: this is the 21st century!
力される (dst は正しく変換されるが, src が書き変わっていない) ことを確認せよ.
int main ( void )
{
char src[128], dst[128];

printf("文字列を入力して下さい >> ");
gets(src);
str_lcopy(dst, src);
printf("src: %s\n", src);
printf("dst: %s\n", dst);

return 0;
}
[3]
 [3.1] winXP sp2
 [3.2] cygwin
 [3.3] C
[4] 2006年11月14日火曜
[5] 自力で3時間考えても手に負えませんでした。お願いします。
434デフォルトの名無しさん:2006/11/13(月) 00:47:34
>>432
#include <stdio.h>
int main(void) {
    int i, j, s = 0;
    for (i = 2; i <= 100; i++) {
        for (j = 2; j <= i; j++) if (i % j == 0) break;
        if (i == j) s += i;
    }
    printf("%d\n", s);
    return 0;
}
435デフォルトの名無しさん:2006/11/13(月) 00:51:40
>>432
ありがとうございます。すごく助かりました。
436デフォルトの名無しさん:2006/11/13(月) 00:56:11
434で満足できるのか・・・

まあコピペしか能が無いんだから仕方ないか
437434:2006/11/13(月) 00:57:32
>>436
一応そこまで配慮したつもり。

>>433
#include <stdio.h>
#include <ctype.h>
void str_lcopy(char dst[], char src[]) {
    char *d = dst, *s = src;
    while ((*d++ = tolower(*s++)) != '\0') {}
}
int main (void) {
    char src[128], dst[128];
    printf("文字列を入力して下さい >> ");
    gets(src);
    str_lcopy(dst, src);
    printf("src: %s\n", src);
    printf("dst: %s\n", dst);
    return 0;
}
438デフォルトの名無しさん:2006/11/13(月) 01:11:02
>>393
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2929.txt

多分これでいいと思うけど適当に直して下さい。
ビンの個数を変えるには、#define NBIN の所の数字を変えればいいです。
439デフォルトの名無しさん:2006/11/13(月) 01:14:56
>>393
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2930.txt

すまん一ヶ所間違っていたので直した。結果は同じなんだけどね。
間違ってる答えは紛らわしいので削除しといた。
440デフォルトの名無しさん:2006/11/13(月) 01:19:04
[1] 授業単元 : 情報処理
[2] 問題文:2進数で入力されたものを10進数で表示
 [3.1] OS:windows
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C
[4] 期限:火曜日の朝6時

441デフォルトの名無しさん:2006/11/13(月) 01:28:28
>>393
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2931.txt

何度もスマネ
xが範囲外の時もsumとsum2に足していたので、hist[]がや平均や分散が
おかしくなっていたので再度修正。

悪いね
442デフォルトの名無しさん:2006/11/13(月) 01:33:29
>>433
すいません、正常に動作したのですが
意味が理解できませんでした。
関数の内容をcharとか使う下に書いたみたいな感じのでお願いできないでしょうか?



if(src >= 'A' && src <= 'Z')
{
diff = 'A'-'a';
s = src - diff;

printf("%c",s);
}

ちなみにこういう感じのを定義もつけて放り込んだらまともに動作しませんでした。
443デフォルトの名無しさん:2006/11/13(月) 02:19:00
[1] 授業単元:情報処理
[2] 問題文(含コード&リンク):小さいほうから100番目までの素数の和をもとめよ。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C

このスレはすべてみて、似た問題の答えからこの問題の答えを出そうとしましたが、できなかったのでお願いします。
444デフォルトの名無しさん:2006/11/13(月) 02:25:59
>>443
# include <stdio.h>

int isprime(int n)
{
  int i;
  for(i = 2; i < n; i++)
    if(n % i == 0)
      return 0;
  return 1;
}

int main(void)
{
  int sum = 0;
  int n = 2;
  int count = 0;
  while(count < 100)
  {
    if(isprime(n))
    {
      sum += n;
      count++;
    }
    n++;
  }
  printf("%d\n", sum);
  return 0;
}
445デフォルトの名無しさん:2006/11/13(月) 02:26:26
434をリスペクトしてみるか

>>443
#include <stdio.h>
int main(void) {
int i, j, k = 0, s = 0;
for (i = 2; k <= 100; i++) {
for (j = 2; j <= i; j++) if (i % j == 0) break;
if (i == j) {s += i;k++}
}
printf("%d\n", s);
return 0;
}
446デフォルトの名無しさん:2006/11/13(月) 02:27:19
;ぬけた ねみー
447387:2006/11/13(月) 02:33:10
ありがとうございます。
プログラムで探索をする方向で考えます。
448デフォルトの名無しさん:2006/11/13(月) 03:02:39
>>440
#include<stdio.h>
#include<stdlib.h>

int main(){
char *s;
int count,i,n;
while(get(s)!EOF) count ++;
n=count-1;
for (i=0;i<n-1;i++){
sum=2^i*(*s);
s++;
};
printf("answer=%d",sum);
return 0;
}
449デフォルトの名無しさん:2006/11/13(月) 04:34:46
[3] 環境
 [3.1] Windows
 [3.2] Borland C++ 5.5.1 for Win32
 [3.3] C
[4] 明後日

char Q(char "
void f(doubl *, 〜〜);
と定義された関数に
double a[4][5];

f(a, 〜);
と渡したが「問題のあるポインタの変換」と出るので
f(*a, 〜);
と渡したところ正常に動作。
配列の場合"a"はa[0][0]のアドレスを渡せるのでは…?
*aではa[0][0]の中身を渡してしまいそうなのに何故正常に動くのでしょうか…。
")
450デフォルトの名無しさん:2006/11/13(月) 04:54:19
>>449
double (*a)[5] としないとだめだろう?
451デフォルトの名無しさん:2006/11/13(月) 05:03:48
>>449
ポインタの深さが違うからエラーがでたんだよー。
452デフォルトの名無しさん:2006/11/13(月) 05:09:58
>>450
それに変えてみたらWinXPがエラー吐いて止まった件
453デフォルトの名無しさん:2006/11/13(月) 05:20:00
>>452
お前もう一回よく調べてみ。いい加減な事を書くなカス。
454デフォルトの名無しさん:2006/11/13(月) 05:34:00
>>453
そういわれても…。
double a[4][5];

double (*a)[5];
としたけれどaにscanfから数値を入れると強制終了する…。
455デフォルトの名無しさん:2006/11/13(月) 05:50:06
>>454
だからscanf()周りを調べろって。自分の思い込みだけで書くな。
456デフォルトの名無しさん:2006/11/13(月) 05:53:08
scanf("%lf", &a[i][j]); のように書いてなかったらアウトだな。
457デフォルトの名無しさん:2006/11/13(月) 05:55:27
scanf("%lf", &a[i][j]);
こう書いてあるけど…。
他に何かミスってる可能性ある…?
458デフォルトの名無しさん:2006/11/13(月) 07:06:11
すげぇ、エスパーがいっぱいだ
459デフォルトの名無しさん:2006/11/13(月) 08:32:17
>>458
おいおい、そんな驚き方したら(w


自 分 が エ ス パ ー じ ゃ な い っ て バ レ て し ま う だ ろ ?
460デフォルトの名無しさん:2006/11/13(月) 09:43:19
>>449
呼び出された関数側では二次元配列の大きさを知ることはできない。
明示的に示すには、関数の最初を変更しないといけない。

void f(double *, 〜〜);

void f(double [][5], 〜〜);
461デフォルトの名無しさん:2006/11/13(月) 11:17:14
お願いします

[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):x と y の数値の対を読み込むことを繰り返し、
  それぞれの和を出力するプログラムを作れ。ただし,和の計算部分には、
  2数の和を計算する関数を作って、それを呼び出すこと。

[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語: C
[4] 期限: 2006年11月14日
462デフォルトの名無しさん:2006/11/13(月) 11:37:28
>461

#include <stdio.h>

double mysum(double x, double y){
return x+y;
}

main(){
double x, y;
while(1){
scanf("%lf",&x);
scanf("%lf",&y);
printf("%f",sum(x,y));
}
}
463デフォルトの名無しさん:2006/11/13(月) 11:39:21
matigaeta

printf("%f",mysum(x,y));
464デフォルトの名無しさん:2006/11/13(月) 12:09:09
>>442
それを使うことが前提なら次は最初から書いてね。ちなみにtolower()は、小文字にできるものは
その小文字を、その他の文字はそのままを返す関数(マクロの可能性もある)で、ctype.hに宣言
されている。

#include <stdio.h>
#include <ctype.h>
void str_lcopy(char dst[], char src[]) {
    char *d = dst, *s = src;
    while (*s != '\0') {
        if (*s >= 'A' && *s <= 'Z') {
            *d++ = *s++ - ('A'-'a');
        } else {
            *d++ = *s++;
        }
    }
    *d = '\0';
}
int main (void) {
    char src[128], dst[128];
    printf("文字列を入力して下さい >> ");
    gets(src);
    str_lcopy(dst, src);
    printf("src: %s\n", src);
    printf("dst: %s\n", dst);
    return 0;
}
465デフォルトの名無しさん:2006/11/13(月) 13:35:23
>>464
yasashii na...
466デフォルトの名無しさん:2006/11/13(月) 14:05:08
[1] C言語プログラミング
[2] 問題文:
配列に格納されたデータをソートするプログラムを作成するにあたり、
以下の機能を持つ関数を作成しなさい。

・乱数を生成し配列要素に格納する
 init_array(int *pa, int n)
・配列要素を1行で画面に出力する
 output_array(int *pa, int n)
・指定された2つアドレスのデータを交換する
 swap(int *x, int *y)
[3.1] OS: windws xp [3.2] visual studio 2003 [3.3] 言語: C
[4] 期限: 11月16日
[5] その他の制限: 反復構造、ソート、探索、ポインタ、ファイル、構造体
よろしくお願いします。
467デフォルトの名無しさん:2006/11/13(月) 14:05:18
#include <stdio.h>
#include <math.h>

main(){
double x,y;
scanf("%d",&x);
y=log(x)/log(2);
printf("%f",y);
}

というプログラムにすると

/tmp/ccIE035m.o(.text+0x2e): In function `main':
: undefined reference to `log'
/tmp/ccIE035m.o(.text+0x48): In function `main':
: undefined reference to `log'
collect2: ld はステータス 1 で終了しました

というエラーがでます。何が間違っているんでしょうか?
468デフォルトの名無しさん:2006/11/13(月) 14:19:07
>>467
数学関数ライブラリがリンクされていない。
たぶんgccに-lmを渡せば良い。
469デフォルトの名無しさん:2006/11/13(月) 14:20:35
>>467
後scanfを
scanf("%lf",&x);
にしておいて
470デフォルトの名無しさん:2006/11/13(月) 14:28:21
>>467
[1] 授業単元:情報処理U
[2] 問題文(含コード&リンク):2を底とするlogを計算するプログラムを作成しなさい。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:2006年11月10日まで
[5] その他の制限:なし

お願いします。

なんで今ごろバグ取りしてるんだぜ?
471デフォルトの名無しさん:2006/11/13(月) 16:20:13
>>466
#include <stdio.h>
#include <stdlib.h>
void init_array(int* pa, int n){
for(; n!=0; n--)
pa[n-1] = rand();
}
void output_array(int* pa, int n){
for(; n!=0; n--)
printf("%d ", *pa++);
}
void swap(int* x, int* y){
_asm{
mov ecx, x
mov edx, y
xchg eax, [ecx]
xchg eax, [edx]
xchg eax, [ecx]
}
}
472デフォルトの名無しさん:2006/11/13(月) 18:30:52
>>387
ヒント: maxmin
473デフォルトの名無しさん:2006/11/13(月) 18:38:48
minmaxちゃうんかと
474デフォルトの名無しさん:2006/11/13(月) 18:57:28
>>448
475デフォルトの名無しさん:2006/11/13(月) 19:02:17
>>472-473
Minimaxでは?
476デフォルトの名無しさん:2006/11/13(月) 19:05:01
>>440
#include<stdio.h>
#include<stdlib.h>

int main(void){
char buf[256];
long number=0L;
int i;

scanf("%s", buf);
for(i=0;buf[i]!='\0';i++){
if(buf[i]!='0' && buf[i]!='1'){
fprintf(stderr, "%s not binary.\n", buf);
exit(1);
}
number=(number<<1)|(buf[i]=='1');
}
printf("%ld\n", number);

return 0;
}
477デフォルトの名無しさん:2006/11/13(月) 19:08:04
>>472 期限過ぎてる
478392:2006/11/13(月) 19:22:59
というかおまいら 392 は無視でつか? orz
479デフォルトの名無しさん:2006/11/13(月) 19:32:35
>>392 >>478 この辺があやしい
if(turn == CIRCLE && human == CIRCLE || turn == CROSS && human == CROSS)
480デフォルトの名無しさん:2006/11/13(月) 19:45:47
>>479 あってる
481デフォルトの名無しさん:2006/11/13(月) 20:09:07
>>464
ありがとうございます、whileは思いつきませんでした。
482デフォルトの名無しさん:2006/11/13(月) 20:21:14
1] 授業単元: プログラミングV
[2] 問題文(含コード&リンク):
C言語のプログラムにより、端末の画面をうまく利用した
ゲーム等を2週間の間にグループ(3人または2人)で考案すること。
[3] 環境
 [3.1] OS: UNIX
 [3.2] コンパイラ名とバージョン: cc
 [3.3] 言語: C
[4] 期限:11月15まで
[5] その他の制限: VT100制御コードというのを使って画面消去やカーソル移動をさせないといけないらしいです。
3年間プログラミングを習いましたが、基礎的なことしか分かりませんorz
それなのにいきなりの大きな課題・・まったく手がつかず放置状態です
作りたいゲームがいろんなチームとかぶっているので、私のチームは一人神経衰弱を作ることになったんですが、
私がまかせられっきりで班員が手伝おうとしてくれません(というか、唯一普通にプログラミングができるのが私だけみたいです。汗)
乱数を発生させて(?)毎回遊べるようにしたいのですが。。
どうか一番簡単なプログラムでいいので考えてもらえると助かります(TT)色々な課題と重なっていてかなりせっぱつまってます・・
483デフォルトの名無しさん:2006/11/13(月) 20:26:30
>>482
エスケープシーケンスのことでいいのかな?
void clear_screen(void){
printf("\x1b[2J"); // 画面を消去する
}
void locate(int x, int y){
printf("\x1b[%d;%dH", y+1, x+1); // 現在のカーソル位置を変更する
}
484デフォルトの名無しさん:2006/11/13(月) 20:29:05
>一人神経衰弱
一人で延々とめくるのか?それともコンピュータと対戦?
485デフォルトの名無しさん:2006/11/13(月) 20:30:12
>>482
乱数を使う方法かぁ・・・srand()とtime()あたり。
班員が動いてくれないのをどーにかする方法は、あんたが動かなければいい。
486482:2006/11/13(月) 20:33:45
コンピュータはさらに難しくなりそうなので・・とりあえず一人でめくるのでもいいかなぁと・・

ごめんなさい、1週間前から色々なプログラム見たり、前を振り返ったり先輩に聞いたりしたのですが
どうしても1から作ることができなくてorz
487482:2006/11/13(月) 20:36:27
あ、あとVt100の参考資料です

【参考資料】

●VT100制御コード カーソル移動 画面消去

** vt100.c **

#include <stdio.h>
main()
{
int x,y;
char moji[10];
x=1; y=3;
printf("\033[2J");
printf("\033[9;30HK");
printf("\033[9;31Ha");
printf("\033[9;32Hz");
printf("\033[9;33Hu");

printf("\033[11;30H%1d",x+3);
printf("\033[11;31H%1d",y+5);

printf("\033[13;30H?? ");
printf("%c\n",getchar());
}
488デフォルトの名無しさん:2006/11/13(月) 20:40:11
>>476
long number=OL;
number=(number<<1)|buf[i]=='1');
の意味が分かりません。
489デフォルトの名無しさん:2006/11/13(月) 20:43:18
いちばん簡単なゲーム?
ジャンケンでいいじゃん
490デフォルトの名無しさん:2006/11/13(月) 20:47:08
>>482
3年間プログラミングを習って、普通にプログラミングができるなら余裕だろ。

int cards[4][13]; // トランプなら1〜13?
int state[4][13]; // 表か裏か
for(i=0;i<4;i+=2) {
for(j=0;j<13;j++) {
cards[i][j] = cards[i+1][j] = rand()%13;
state[i][j] = state[i+1][j] = 0; // 裏
}
}
// カードをシャッフル
int cnt = 0;
while(1) {
int f = 1;
// 表示
while(f) {
// cnt++;
// 入力(1枚目)
// 表にする
// 表示
// 入力(2枚目)
// 表にする
if(同じカードじゃなかったら) {
2枚のカードを裏返す
f = 0;
}
}
if(カードが全部表になったら) break;
}

途中で力尽きた
491デフォルトの名無しさん:2006/11/13(月) 20:51:28
>>482
まー・・・マイコンBASICマガジンのバックナンバーでも読んで、移植に励んでくれ。
80年代のなら、短いのもあるだろう。
492デフォルトの名無しさん:2006/11/13(月) 20:58:21
>>488
とりあえず「文字を正確に読む」という能力を身に付ければいいんじゃないかな
493デフォルトの名無しさん:2006/11/13(月) 21:00:51
やる気のない奴は黙ってろよ。

>>482
一応やってみるが、途中で投げ出すかも知れんので保険を用意しておいてくれ。
494482:2006/11/13(月) 21:04:11
ありがとうございます!!
すっごい助かります><
まだ、期限延ばしてもらえるかもしれないので大丈夫です!
495デフォルトの名無しさん:2006/11/13(月) 21:10:09
>>488
>long number=OL;
よく読め

>number=(number<<1)|buf[i]=='1');
number=(number<<1)|(buf[i]=='1');
だよく読め

分からないならnumber=number*2+(buf[i]=='1');
496デフォルトの名無しさん:2006/11/13(月) 21:30:38
えーっと、未解決リスト製作よろしく。
出来そうなのは解いてみる。
497デフォルトの名無しさん:2006/11/13(月) 21:45:53
>>482
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2932.c
1.カードの初期化
2.カードの表示
まで
498デフォルトの名無しさん:2006/11/13(月) 23:58:02
1] 授業単元:情報処理
[2] 問題文(含コード&リンク):
トランプを切る方法の一つとして、トランプを2つに分けて両手でばらばらと切る方法がある。
今、トランプは、ジョーカを除いた52枚とする。もし、切り方のうまい人がいて、
トランプを正しく半分(26枚)にして、かつ交互に1枚ずつ切れるとする。
この方法では、何回か行うと元に戻ることが知られている。さて、何回で元に戻るであろうか。
これを計算するプログラムを作成せよ。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン: visual stdio 2005
[3.3] 言語:C++
[4] 期限:2006年11月20日まで
[5] その他の制限:プログラムの説明もお願いします。
長くてごめんなさい
499デフォルトの名無しさん:2006/11/14(火) 00:02:01
>>498の続き
次のプログラムを参考にせよ。
#include<stdio.h>
#define N 52 /* トランプの枚数 */
#define M (N/2) /* その半分の数 */
int main( void )
{
int k;
int cards[ N ]; /* トランプ */
int temp[ N ]; /* 一時的にトランプの札を移動 */
int count = 0; /* 切った回数 */
/* トランプをセット */
for( k=0; k<N; k++ )
cards[ k ] = k+1;
while( 1 ) /* 無限ループ */
{
count++; /* 回数を一回増分 */
temp ← cardsを2つに分けてぱらぱらと切ったものをひとつにしたもの
temp が元に戻っていたら終了(breakする)
cards ← temp
}
printf( "%d 回目で元に戻る", count );
return 0;
}
500デフォルトの名無しさん:2006/11/14(火) 00:03:12
>>498の続き
↓↓tempが元に戻っていることの判定法↓↓
https://weblec.kanagawa-u.ac.jp/weblec6/Web/HTML/Th_49/Resume/File_215.ppt
↓↓cardsを2つに分けてぱらぱらと切ったものをひとつにしたもの↓↓
j = 0;
for( i=0; i<M; i++ )
{
temp[ j ] = cards[ i ];
temp[ j ] = cards[ M + i ];
j += 2;
}

501デフォルトの名無しさん:2006/11/14(火) 03:02:05
[1] 授業単元:電子計算機実習
[2] 問題文(含コード&リンク):
10等分法のアルゴリズムを作成し、x^3-10=0の解を求めるプログラムを作成せよ
なお、許容誤差を10^-7 とし、区間幅が10^-7 を下回ったところで計算を打ち切ること
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: 不明
 [3.3] 言語: C
[4] 期限: 2006年11月15日午前中まで
[5] その他の制限: while文を使っての作成お願いします
502482:2006/11/14(火) 05:24:27
>>497
あぁ、ありがとうございます!
よければ続きもお願いします・・;;
503デフォルトの名無しさん:2006/11/14(火) 06:52:50
>>482
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2933.c
あまりに操作しにくいので、# define USE_TERMIOSのコメントアウトを外すと、
非標準のライブラリを使っていちいちエンターキーで確定せずに使えるようにした。
504デフォルトの名無しさん:2006/11/14(火) 13:48:11
[1] 授業単元:情報処理
[2] 問題文(含コード&リンク): キーボードから1以上の整数n を入力し、(i=1からn番目までのi^2を求めるΣ) を計算して結果を画面表示するプログラムを
作成しなさい.ただし,1 未満の整数が入力された場合には再入力ができるように,1 以上の整
数が入力されるまで「scanf()」を繰り返すこととし,計算部分は再帰的プログラムとして作成す
ること.また,この関数のプロトタイプは「int square_sum(int)」とする.
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:11月15日まで
[5] その他の制限: なし

お願いします。
505デフォルトの名無しさん:2006/11/14(火) 14:01:29
これをそのまま提出したら、やる気ない奴らより悪い事する事になるな。
やる気ない奴らは何もしなかっただけだが、ここに丸投げするのは不正だもんな。
まあ、分からなかった部分の参考にするのはアリだろうけど。
506デフォルトの名無しさん:2006/11/14(火) 14:48:36
>>505
そんなことをこのスレで言われても。
問題がとければそれで良し、後は依頼者が何をしようが関知しない、というのでは駄目なのか?
507デフォルトの名無しさん:2006/11/14(火) 15:56:09
整数nが与えられたとき、
n×nのサイズで螺旋状に0から(n二乗ー1)までの数が並ぶ行列を作成し、
画面に表示させるプログラムって配列を使って組むにはどうすればいいでしょうか?
ヒントだけでもいいので教えてください。お願いします。
508デフォルトの名無しさん :2006/11/14(火) 16:11:04
>>504
int square_sum(int n)
{
return n * (2 * n + 1)*(n + 1)/6;
}
int main()
{
int n = 0, sum;

while(n < 1){
puts("第何項まで?(1以上) =");
scanf("%d", &n);
}
printf("数列iの2乗の%d番目を含む総和は%d \n", n, square_sum(n));

return 0;
}
509デフォルトの名無しさん:2006/11/14(火) 16:18:17
>>507ですが、ここまで出来てます。

#include<stdio.h>

int main(void){

int a, b;

int c[100][100]

printf("please input! n = ");

scanf("%d\n",a);
510デフォルトの名無しさん:2006/11/14(火) 16:27:39
>>504
int square_sum(int n)
{
if (n < 1) return 0;
return (n + 1) * n / 2 + square_sum(0);
}
511デフォルトの名無しさん:2006/11/14(火) 16:35:05
>>507
外側から埋めてけば?
512デフォルトの名無しさん:2006/11/14(火) 16:46:22
>>507
ヒント1.方眼紙を用意する。(無ければ紙に線を引いて作ること)
ヒント2.方眼紙にn×nサイズの枠を作り、その中に左上から指示通り数字を埋めていく。
ヒント3.nと、曲がるまでに配置する数値の数と、曲がる回数に法則性がないか考える。
513デフォルトの名無しさん:2006/11/14(火) 16:47:52
>>498
その切りかたを何回か繰り返すともとに戻る、ということを前提とするなら、
最大でも52!回繰り返せば十分である。なぜなら、52!回繰り返してもとに戻らないなら、
どこかでループしていて、それ以降も決してもとに戻らないからである。
よって、1回〜52!回繰り返せばもとに戻るわけだが、これらの公倍数である
(52!)!回目にはいずれの場合でももとに戻る。よって、

int main(void){ return printf("(52!)!\n"); }
514デフォルトの名無しさん:2006/11/14(火) 16:59:04
>>513
その発想はなかったわ
515デフォルトの名無しさん:2006/11/14(火) 17:25:06
>>507
int main(void){
 int i, j, k, n;
 int **p;
 /* 中略 */
 k = n*n-1;
 for(i=0; i<=n/2; i++) {
  for(j=i; j<=n-i-1; j++) p[i][j] = k--;
   for(j=i+1; j<n-i-1; j++) p[j][n-i-1] = k--;
   for(j=n-i-1; j>i; j--) p[n-i-1][j] = k--;
   for(j=n-i-1; j>i; j--) p[j][i] = k--;
   }
 /*後略*/
}
516デフォルトの名無しさん:2006/11/14(火) 17:30:41
[1] 授業単元:情報処理
[2] 問題文(含コード&リンク):1から500の中で
任意の数a,b,cの公倍数を求めるプログラムを作成せよ。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン: BCC5.5
 [3.3] 言語: C++
[4] 期限: 11/15まで
[5] その他の制限:なし

自分で考えてみても、手も足もでなかったので教えてください。お願いします。
517デフォルトの名無しさん:2006/11/14(火) 17:33:31
つまり、公倍数がなんなのかわからない、と?
518515:2006/11/14(火) 17:35:52
訂正
i<=n/2→i<n/2+n%2
519デフォルトの名無しさん:2006/11/14(火) 17:41:25
プログラム上で公倍数をどのように
表示すればいいのか、がわからないです。
520デフォルトの名無しさん:2006/11/14(火) 17:42:11
最小公倍数じゃなくて公倍数なんだろ
余裕じゃん

long koubaisuu (int a, int b, int c){
return a*b*c;
}
521デフォルトの名無しさん:2006/11/14(火) 18:15:07
オーバーフローを考慮してない。
失格。
522デフォルトの名無しさん:2006/11/14(火) 18:17:19
32ビットあれば大丈夫だろ。
523デフォルトの名無しさん:2006/11/14(火) 18:22:54
なにが大丈夫なのやら。
524デフォルトの名無しさん:2006/11/14(火) 18:24:30
>>523
500^3 < 2^31-1
525デフォルトの名無しさん:2006/11/14(火) 18:25:28
>>521
なんのためにa,b,cが500以下とか言う条件がついてると思ってるんだよ
526デフォルトの名無しさん:2006/11/14(火) 18:49:28
500以下のしばりがa,b,cだけなのなら
有限時間で公倍数全てを表示することはできない
527デフォルトの名無しさん:2006/11/14(火) 18:52:26 BE:67935757-2BP(200)
「すべて表示しろ」なんてどこにも書いてないけどな。
528デフォルトの名無しさん:2006/11/14(火) 18:54:28
すいません。問題文に追加があります。

「結果は7個以上出力すること」

です。
529デフォルトの名無しさん:2006/11/14(火) 19:06:10
それなら単純に7倍まですりゃいいだけだろ。
それすらも思いつかないのか?
お前の肩の上に乗ってるのはなんだ? 漬物石か?
ずいぶんと軽そうな漬物石だこと。
530デフォルトの名無しさん:2006/11/14(火) 19:17:53
肩の上ワラタ
531デフォルトの名無しさん:2006/11/14(火) 19:27:07
昔理科の先生が空気は重いって言ってたのを思い出した
532デフォルトの名無しさん:2006/11/14(火) 19:37:32
>>528
>>1
>・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。
533デフォルトの名無しさん:2006/11/14(火) 19:38:11
1] 授業単元:情報処理
[2] 問題文(含コード&リンク):ローンの利息計算をするプログラムを作る               
[3] 環境
 [3.1] OS:Windows XP
 [3.2] コンパイラ名とバージョン: VC++ 2005
 [3.3] 言語: C++
[4] 期限: 今週木曜日
[5] その他の制限:元金、年利率、年間利息(単利)、年間利息(複利)、元利合計(単利)、元利合計(複利)を定義して、元金と年利率のみを cin で入力して20年間分の利息と元利合計(それぞれ単利、複利を別々に)を1年ごとに表示できるように出力する。

よろしくお願いします。

switch をこの課題が出された日に習ったんですが、if と else でいいですよね。
         
534デフォルトの名無しさん:2006/11/14(火) 19:44:52
>>516
500 縛りの文言が公倍数を指すと考えた場合。問題追加部分は無視。
#include <stdio.h>
int gcd(int a, int b)
{
int c;
do {
c = a%b;
a=b;
b=c;
} while(c != 0);
return a;
}
int lcm(int a, int b)
{
return a*b/gcd(a,b);
}
int main()
{
int a,b,c,l,i;
printf("整数を空白で区切って3個入力:");
fflush(stdout);
scanf(" %d %d %d", &a, &b, &c);
l = lcm(lcm(a,b),c);
for(i=l; i<500; i+=l)
printf("%d\n", i);
return 0;
}
535デフォルトの名無しさん:2006/11/14(火) 19:52:10
なんで終了前にfflush(stdout)しないの?
536534:2006/11/14(火) 19:57:27
>>535
確かプログラムが正常終了すれば全部フラッシュされるはず。違ったっけ?

>>516
よく見たら c++ だった…。
頭の #include <stdio.h> を #include <iostream> に、
またmain() を以下のものに差し替えてください。

int main()
{
int a,b,c,l,i;

std::cout <<"整数を空白で区切って3個入力:" <<std::endl;
std::cin >> a >> b >> c;

l = lcm(lcm(a,b),c);
for(i=l; i<500; i+=l)
printf("%d\n", i);

return 0;
}
537534:2006/11/14(火) 20:00:52
再訂正 orz
printf("%d\n", i);
   ↓
std::cout << i << std::endl;
538デフォルトの名無しさん:2006/11/14(火) 20:22:09
漏れはC++でもprintf系使うけどな。
539デフォルトの名無しさん:2006/11/14(火) 20:36:51
>538
<cstdio>ならOK。
540デフォルトの名無しさん:2006/11/14(火) 21:37:25
1,2,3,…,100までの整数の中からN個の数字を取り出すとして、その組み
合わせをすべて記述するようなプログラム(たとえばN=3なら(1,2,3),(1,2,4),…
(98,99,100))ってどうやって作ればいいか教えて下さい。
541デフォルトの名無しさん:2006/11/14(火) 21:50:58
テンプレを読む。
542デフォルトの名無しさん:2006/11/14(火) 21:51:57
[1]授業単元:プログラミングB
[2]問題文:RSA公開鍵暗号方式の実装について考えてみる。
 キーボードからX,e,p,qを入力させ、暗号文(Y)が出力される
プログラムを組め。
 以下に実際に行われる計算式が示されているので、それらを
 利用して実装せよ。

p*q = n
 a = (p-1)*(q-1)
 X^e = Y (mod n)
※ ただし、pおよびqは異なる150~200桁程度の素数とし、aとeは互いに素で
あること。また、Xも150〜200桁程度の数とする。素数を求めるプログラム
を組む必要はない。

ヒント:@ユークリッドの互除法
Aint型以上の数に対して配列の利用
[3]環境
 [3.1]Windows XP
[3.2]gccまたはVisual C++ 6.0
[3.3]CでもC++でも可です。
[4]期限:2006/11/20
[5]その他の制限:特になし。あまり難しいことは習ってないです。


543デフォルトの名無しさん:2006/11/14(火) 21:53:50
542続き

#include <stdio.h>
void main(){
int a1, b;
int x1, y, q, r;
printf("2つの正の整数を入力。\n");
scanf("%d %d", &a1, &b);
x1=a1; y=b;
while( 1 ){
q=x1/y;
r=x1-q*y;
if(r==0) break;
x1=y;
y=r;
}
printf("%dと%dの最大公約数は%d。\n", a1, b, y);
if(y==1){
printf("%dと%dは互いに素。\n",a1, b);
}

これぐらいしかわからないです。どうか力をお貸し下さい。

544デフォルトの名無しさん:2006/11/14(火) 22:07:06
RSA面倒だからカエサルにしようZE!
545デフォルトの名無しさん:2006/11/14(火) 22:12:51
>>541 失礼しました。
[1] 授業単元:C++によるプログラミング入門
[2] 問題文(含コード&リンク):
1,2,3,…,100までの整数の中からN個の数字を取り出すとして、その組み
合わせをすべて記述するようなプログラム(たとえばN=3なら(1,2,3),(1,2,4),…
(98,99,100))を提出せよ
[3] 環境
 [3.1] OS: Windows XP
 [3.2] VC 6.0
 [3.3] C++
[4] 期限: 2006年11月19日17:00まで
[5] その他の制限:特になし

#include <stdio.h>
#define nmax 100
int i
double data[nmax+1]
main{
scanf("整数N%d\n",&N);
}
これでdata[1],data[2],…,data[N]に整数を入れて
すべての組み合わせをプリントしていこうとおもったんですけど、
for文がいっぱいになってしまうようなものしか思いつきませんでした。
ご協力お願いします。
546デフォルトの名無しさん:2006/11/14(火) 22:13:02
>>533
もしかして、誤差を出さない計算ルーチン作らないとダメだったりする?
こういうのって誤差にとてもうるさかったはず。
547デフォルトの名無しさん:2006/11/14(火) 22:17:00
548デフォルトの名無しさん:2006/11/14(火) 22:38:40
>>500
下のプログラムを大枠として作っていただけないですか?
最後の方の三行がわかりません。
#include<stdio.h>
#define N 52 /* トランプの枚数 */
#define M (N/2) /* その半分の数 */
int main( void )
{
int k;
int cards[ N ]; /* トランプ */
int temp[ N ]; /* 一時的にトランプの札を移動 */
int count = 0; /* 切った回数 */
/* トランプをセット */
for( k=0; k<N; k++ )
cards[ k ] = k+1;
while( 1 ) /* 無限ループ */
{
count++; /* 回数を一回増分 */
temp ← cardsを2つに分けてぱらぱらと切ったものをひとつにしたもの
temp が元に戻っていたら終了(breakする)
cards ← temp
}
printf( "%d 回目で元に戻る", count );
return 0;
}
549デフォルトの名無しさん:2006/11/14(火) 22:43:19
>>500 の処理を1行でやれってこと?
550デフォルトの名無しさん:2006/11/14(火) 22:44:33
>>545
/*1レスに納めるためコメント省略*/
#include <stdio.h>
#define N 3
#define MAX 100
int main(void){
int num[N];
int i,j;
num[0]=1;
for(i=1;i<N;i++){
num[i]=num[i-1]+1;
}
i=N-1;
while(i>=0){
if(num[i]<MAX+i-(N-1)){
for(j=0;j<N;j++)printf("%d ",num[j]);
printf("\n");
num[i]++;
while(i<N-1){
num[i+1]=num[i]+1;
i++;
}
}else i--;
}
for(j=0;j<N;j++)printf("%d ",num[j]);
printf("\n");
return 0;
}
551デフォルトの名無しさん:2006/11/14(火) 22:44:42
シリアルポートに入力した文字を送信して返してきた値を出力するプログラムを作成せよだって
言語はC言語でコンパイラVC.NET
552デフォルトの名無しさん:2006/11/14(火) 22:45:39
>>551
そうか、がんばってくれ
553デフォルトの名無しさん:2006/11/14(火) 22:48:58
デバイスファイル AUX
554デフォルトの名無しさん:2006/11/14(火) 22:54:22
>>547
URLありがとうございます。
しかし、残念ながら内容が難しく
理解できなかったですorz

失礼ですが、C言語でのRSA暗号実装紹介のサイトは
ご存知じゃありませんか?
555デフォルトの名無しさん:2006/11/14(火) 22:59:03
>>548
#include<stdio.h>
#define N 52 /* トランプの枚数 */
int main( void )
{
int k, i;
int cards[ N ]; /* トランプ */
int temp[ N ]; /* 一時的にトランプの札を移動 */
int count = 0; /* 切った回数 */
int cards_at_begining[N];
for( k=0; k<N; k++ ) {
cards[ k ] = k+1;
cards_at_begining[k] = k+1;
}
while( 1 ) {
loop_start:
count++; /* 回数を一回増分 */
for (i=0; i<N/2; i++) { /* shuffle */
temp[i]=cards[2*i];
temp[i+M]=cards[2*i+1];
}
for (i=0; i<N; i++)
cards[i]=temp[i];
for (i=0; i<N; i++) { /* check */
if (cards[i] != cards_at_begining[i])
goto loop_start;
}
break;
}
printf( "%d 回目で元に戻る", count );
return 0;
}
556デフォルトの名無しさん:2006/11/14(火) 23:15:57
>>>555
ありがとうございます。
557デフォルトの名無しさん:2006/11/14(火) 23:16:19
>>548
for(k=0; k<N; k++) temp[k] = i%2?cardsk/2+M]:cards[k/2];
for(k=0; k<N; k++) if(temp[k]!=k+1) break;
if(k==N) break;
for(k=0; k<N; k++) cards[k] = temp[k];
558デフォルトの名無しさん:2006/11/14(火) 23:18:44
cardsk/2+M] →cards[k/2+M]

>>555
切り方間違ってない?
559デフォルトの名無しさん:2006/11/14(火) 23:28:12
>>542
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2935.c
昔書いたのの使いまわしで、ちょっと大げさかもしれないが。
C99依存だけど、どうしても問題になるなら書き換えるから言ってくれ。
560デフォルトの名無しさん:2006/11/14(火) 23:33:01
お願いします
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):整数値nを読み込み、1からnまでで、2で割り切れて3で割り切れない数値の個数を出力するプログラムを作成せよ。
実行例 読み込み数値20の場合
INPUT INTEGER:20
7 integers can be divided by 2 and not by 3
(2,4,8,10,14,16,20の7個)

[3] 環境
 [3.1] OS:windows
 [3.3] 言語:c++
[4] 期限: 明日
561デフォルトの名無しさん:2006/11/14(火) 23:38:52
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
@ int a,b,c,d;
のように、文字が来ればコンマの繰り返しで セミコロンが来たら終了というプログラムを作れ
A int a,b;
int x;
のように、改行できるプログラムを作る
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限 明日の14時まで
[5] その他の制限: なし
562デフォルトの名無しさん:2006/11/14(火) 23:41:51
>>560
# include <iostream>

int main(void)
{
  int n;
  std::cout << "INPUT INTEGER:";
  std::cin >> n;
  std::cout << (n / 6) * 2 + (n % 6 >= 2) + (n % 6 >= 4)  << " integers can be devided by 2 and not by 3\n";
}
563デフォルトの名無しさん:2006/11/14(火) 23:43:08
>>560
#include<stdio.h>
main(){
int i,N,kosuu;
printf("INPUT INTEGER:");
scanf("%d",&N);
for (i=0;i<=N;i=i+2){
if(i%3==0) kosuu=kosuu+1;
}
printf("%d integers can be divided by 2 and not by 3",kosuu);
}
564562:2006/11/14(火) 23:43:42
>devided
dividedね。
565デフォルトの名無しさん:2006/11/14(火) 23:44:20
>>561
意味がわからん
566デフォルトの名無しさん:2006/11/14(火) 23:45:54
if(i%3==0) kosuu=kosuu+1;

if(i%3!=0) kosuu=kosuu+1;

matigaeta
567デフォルトの名無しさん:2006/11/14(火) 23:47:12
よろしくお願いします。

[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
最大8桁の整数を2つ入力し、int型配列に格納。
入力後2つの数の和を求める。負の数、整数以外、スペースのみが入力された場合
エラーメッセージを表示
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 11/18まで
[5] その他の制限: gets,scanfは禁止

568561:2006/11/15(水) 00:01:12
for文でお願いします
ちょっと説明不足でしたか・・・
569デフォルトの名無しさん:2006/11/15(水) 00:03:19
>>568
それで説明が足りたと思う神経を自分で疑ったことが無いのか?
570デフォルトの名無しさん:2006/11/15(水) 00:07:08
>>569
ぶっふぉん
571デフォルトの名無しさん:2006/11/15(水) 00:07:58
>>568
せめてI/Oぐらいちゃんと書けってこった
572デフォルトの名無しさん:2006/11/15(水) 00:08:48
>>568
はっきり言って何を言ってるのか全く分からん
問題文をそのまま一字一句間違いなく写してくれ
573デフォルトの名無しさん:2006/11/15(水) 00:13:11
>>568
どうせ、goto でループつくってもいいんでしょ?
574デフォルトの名無しさん:2006/11/15(水) 00:16:28
>>559
わざわざありがとうございます。量が膨大で
自分のヘタレのせいで
中身もまったく理解できない始末でしたorz
また、VC6.0でコンパイラしようとしたらエラーになって
しまいました。

お時間あれば助力お願いします。
575545:2006/11/15(水) 00:21:51
>>550
実際に走らせて見たところちゃんとできててビックリしました。
なぜこれでできるかは明日じっくり考えたい思います。
ありがとうございました。
576デフォルトの名無しさん:2006/11/15(水) 00:23:26
>>568

#include <stdio.h>

int main()
{
printf("int ");
printf("a,");
printf("b,");
printf("c,");
printf("d;");/* <-セミコロンが来た */
printf("\n");
printf("終了します\n");
for(;0;);
return 0;
}
577デフォルトの名無しさん:2006/11/15(水) 00:23:54
>>561 >>568 エスパーでも探してるのか?
#include<stdio.h>
int main(void){
char buf[1024];
int i;

printf("Input string : ");
gets(buf);
for(i=0;buf[i]!='\0';i++){
if(buf[i]==';') break;
printf(",");
}
return 0;
}

#include<stdio.h>
int main(void){
char buf[1024];
int i;

printf("Input string : ");
gets(buf);
for(i=0;buf[i]!='\0';i++){
printf("%c", buf[i]);
if(buf[i]==';') printf("\n");
}
return 0;
}
578デフォルトの名無しさん:2006/11/15(水) 00:25:26
[1] 授業単元: アルゴリズム
[2] 問題文(含コード&リンク):BM法を作って比較とジャンプの履歴を表示する。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
BM法のプログラミングは作ってみましたが、ジャンプと比較の履歴の表示
の仕方がわかりません。 よろしくおねがいします。
579デフォルトの名無しさん:2006/11/15(水) 00:26:48
BM法のプログラミングです。
#include <stdio.h>
#include <string.h>
#include <limits.h>
int bm_match(const char txt[], const char pat[])
{
int pt;
int pp;
int txt_len = strlen(txt);
int pat_len = strlen(pat);
int skip[UCHAR_MAX + 1];
for (pt = 0; pt <= UCHAR_MAX; pt++)
skip[pt] = pat_len;
for (pt = 0; pt < pat_len - 1; pt++)
skip[pat[pt]] = pat_len - pt - 1;
while (pt < txt_len) {
pp = pat_len - 1;
while (txt[pt] == pat[pp]) {
if (pp == 0)
return (pt);
580デフォルトの名無しさん:2006/11/15(水) 00:28:15
pp--;
pt--;
}
pt += skip[txt[pt]];
}
return (-1);
}
int main(void)
{
int idx;
char s1[80];
char s2[80];
printf("テキスト:");
scanf("%s", s1);
printf("パターン:");
scanf("%s", s2);
idx = bm_match(s1, s2);
if (idx == -1)
puts("テキスト中にパターンは存在しません。");
else
printf("%d文字目に見つかりました。\n", idx + 1);
return (0);
}
581デフォルトの名無しさん:2006/11/15(水) 00:32:42
↑のプログラミングにジャンプと比較の履歴を表示
したいのですがわかりません。 よろしくおねがいします m(__)m
582561:2006/11/15(水) 00:37:58
>>577
ありがとうございます。
俺日本語から勉強し直します・・・
583デフォルトの名無しさん:2006/11/15(水) 00:41:49
>>574
VC6でコンパイルできるようにするだけなら、
28行目
# else /* C99 */
の前に、
# elif defined _MSC_VER
typedef unsigned __int16 smallint;
typedef unsigned __int32 middleint;
typedef unsigned __int64 largeint;
の4行を追加すればたぶん問題ない。
gccでは-std=c99フラグを付ければコンパイルできる。
こういう小細工をせずにC89標準の機能のみで動くようにするのは厄介だけど、できなくはない。
584デフォルトの名無しさん:2006/11/15(水) 00:43:50
>>577
すげぇエスパー。元の問題知ってるとしか思えない。
585デフォルトの名無しさん:2006/11/15(水) 00:56:11
>>578 こういうことでいいのかな?
while (txt[pt] == pat[pp]) {

while (1) {
printf("compare : txt[%d]=%c and pat[%d]=%c\n", pt, txt[pt], pp, pat[pp]);
if(txt[pt] != pat[pp]) break;

pt += skip[txt[pt]];

pt += skip[txt[pt]];
printf("jump : %d to %d\n", pt, pt+skip[txt[pt]]);
586578:2006/11/15(水) 01:10:52
>>585
どうも回答ありがとうございます!!
変更後エラーはでましたが、ここまでヒントをくれれば
あとはなんとかなりそうです。
本当にありがとうございました☆
587デフォルトの名無しさん:2006/11/15(水) 01:53:36
すみません
533 お願いします
588デフォルトの名無しさん:2006/11/15(水) 02:09:38
>>574
気をとりなおしてC98準拠にした。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2936.c
VC6、gccでそのままコンパイルできるはず。
遅いけど、我慢してくれ。
589デフォルトの名無しさん:2006/11/15(水) 02:50:51
>>587
Cでつくったが問題見たらC++でcin使ってとか書いてあった。
眠くなったからおやすみ
590デフォルトの名無しさん :2006/11/15(水) 02:56:57
>>507
どっち方向がお望みか知らんけど螺旋にしてみた
#include <stdio.h> #define N 9 //サイズ
void print(int ary[N][N]);int right(int ary[N][N],int x,int y, int n, int past);int up(int ary[N][N],int x,int y, int n, int past);
int down(int ary[N][N],int x,int y, int n, int past);int left(int ary[N][N],int x,int y, int n, int past);void answer(int ary[N][N], int n);
int main(){ int ary[N][N] = {0}; int n = 0; answer(ary, n); print(ary); return 0;}void answer(int ary[N][N], int n){ int i,j;
for(j =0,i = 1; i <= (N/2 + 1) ; i++,j++){ n = right(ary,j,j,n, i); n = down(ary,i ,N-i,n, i); n = left(ary,N-i,N - i - 1,n, j); n = up(ary,N - i - 1,j, n,j);
}} int right(int ary[N][N],int y,int x, int n, int past){ if(x > N - past || y > N || x < 0 || y < 0)return n; ary[y][x] = n ; right(ary, y, x+1, n +1 , past );
} int down(int ary[N][N],int y,int x, int n, int past){ if(x > N || y > N - past || x < 0 || y < 0)return n; ary[y][x] = n; down(ary, y+1,x , n+1 , past );
} int left(int ary[N][N],int y,int x, int n, int past){ if(x > N || y > N || x < past || y < 0)return n; ary[y][x] = n; left(ary, y, x-1, n+1 , past );
} int up(int ary[N][N],int y,int x, int n, int past){ if(x > N || y > N || x < 0 || y <= past)return n; ary[y][x] = n; up(ary, y-1, x, n+1 , past );
} void print(int ary[N][N]){ int *p = &ary[0][0],i; for(i = 1,p = &ary[0][0]; p <= &ary[N-1][N-1]; p++,i++){ printf("%3d ", *p);
if(!(i % N))putchar('\n');}}
591 ◆sUfWYz9MSA :2006/11/15(水) 09:30:23
[1] 授業単元: プログラミング
[2] 問題文:2つの自然数 a, b に対し, a と b の最大公約数を
  求める関数 int gcm(int a, int b) とその公約数をすべて表示する関数
  void print_gcm(int , int) を作成せよ.
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C++
[4] 期限: 2006年11月15日12:00まで
[5] その他の制限:関数まで習いました。
592デフォルトの名無しさん:2006/11/15(水) 09:45:39
>>501
前スレ>>532-533

>>591
前スレ>>508-513
593デフォルトの名無しさん:2006/11/15(水) 10:38:39
>>588
ありがとうございます。
相変わらず中身はさっぱりでしたorz

VC6でコンパイルしたところエラー1が
以下のように出てしまいました。

273行目
'return' : 'void *' から 'unsigned int *' に変換することはできません。
'void*' から非 'void' 型への変換には明示的なキャストが必要です。

ヘタレでホントすいません。お願いします。
594たか:2006/11/15(水) 10:53:01
[1] 授業単元: プログラミング実習
[2] 問題文:キーボードから入力される100個の整数のうち、
2桁の数がいくつあるかを数えて、その個数を表示する。
 文字配列にアルファベットで適当な文字を10文字入れたとき、
入力順序と逆順で表示する。
(配列やポインタを使って記述する。)
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:Microsoft VisualStudio6.0
 [3.3] 言語: C++
[4] 期限: 2006年11月17日まで
[5] その他の制限:


お願いします!!
595デフォルトの名無しさん:2006/11/15(水) 11:08:50
曖昧な仕様だな。
596デフォルトの名無しさん:2006/11/15(水) 11:46:01 BE:77640858-2BP(200)
>>594
using namespace std;
#include<iostream>
int main(void){for(int i=0,int c=0;i<10;i++){int n;cin>>n;if(n>=10 && n<100)c++;}cout<<c<<endl;return 0;}
597デフォルトの名無しさん:2006/11/15(水) 11:56:06
↑こいつ最高にアホ
598デフォルトの名無しさん:2006/11/15(水) 13:07:09
[1] 授業単元: プログラミング演習
[2] 問題文
キーボードから入力した複数の英単語を連結して行くプログラムを書け。
ただし、
(1)単語は一度に1つずつ入力し(各単語の入力は改行で終る)、EOFの入力で単語入力を終了とする。
(2)連結する時に、直前の単語との間に区切り文字としてスペースを1つ置き 9 (そうすると英文として読める)、連結した文字を最後に入力する。

ヒント:連結単語を置くために十分長い配列を用意しておいて、入力単語を順番に、その配列にコピーして行けば良い。

[3.1] OS:unix
[3.3] 言語:c
[4] 期限: 午後6時まで

期限が短すぎるし私には解けそうにありません。
お願いします。
599デフォルトの名無しさん:2006/11/15(水) 13:12:17
[1] 授業単元: プログラミングT
[2] 問題文:
0〜100までの間の数をランダムに5つ入力し、
最小値、最大値、合計、平均値を求めるプログラムを
for文とif文を用いて作りなさい。
[3] 環境
 [3.1] OS:Windows XP
 [3.2] コンパイラ名とバージョン: Microsoft VisualStudio2005
 [3.3] 言語:C++
[4] 期限:2006年11月17日17:00まで
[5] その他の制限:表示させるだけの(Printfを使った)基本的なプログラミングから、if、for構文のみ習っています。

宜しくお願いします。
600デフォルトの名無しさん:2006/11/15(水) 13:15:20
#include <stdio.h>
int main(){
int c;
while ((c=getc(stdin))!=EOF){
if (c=='\n')c=' ';
putc(c,stdout);
}
fflush(stdout);
return 0;
}
601デフォルトの名無しさん:2006/11/15(水) 13:17:37
602デフォルトの名無しさん:2006/11/15(水) 13:31:31 BE:81522476-2BP(200)
>>599
using namespace std;
#include<iostream>
int main(void){int max=0,min=100,sum=0,n;
for(int i=0;i<5;i++){cin>>n;sum+=n;if(min>n)min=n;if(max<n)max=n;}
cout<<"最小値:"<<min<<endl<<"最大値:"<<max<<endl<<"合計:"<<sum<<endl<<"平均値:"<<(double)sum/5.0<<endl;
return 0;}
603デフォルトの名無しさん:2006/11/15(水) 13:32:04
>>598
これでいいのか?単語長はMAXCHARS、単語数はMAXWORDSをいじればよい。
#include <stdio.h>
#define MAXCHARS 10
#define MAXWORDS 1000
int main (void) {
    int i = 0, j;
    char words[MAXWORDS][MAXCHARS];
    while (scanf("%s", words[i++]) != EOF) {}
    for (j = 0; j < i - 1; j++) printf("%s ", words[j]);
    return 0;
}
604デフォルトの名無しさん:2006/11/15(水) 13:43:26
>>603
>連結した文字を最後に入力する

>>598
「スペースを1つ置き 9 」って何?
605デフォルトの名無しさん:2006/11/15(水) 13:52:25
>>591
ちょっと遅れた
#include <stdio.h>
int gcm(int a, int b) {
    if (b == 0) return a; else return gcm(b, a % b);
}
void print_gcm(int a, int b) {
    int i = gcm(a, b);
    do if (a % i == 0 && b % i == 0) printf("%d ", i); while (--i != 0);
}
int main (void) {
    int a, b;
    printf("a b?:");scanf("%d%d", &a, &b);
    print_gcm(a, b);
    return 0;
}
606デフォルトの名無しさん:2006/11/15(水) 13:55:19
期限過ぎてるじゃねーかこの愚図!
607デフォルトの名無しさん:2006/11/15(水) 14:20:04
>>605
ありがとうございます!
608デフォルトの名無しさん:2006/11/15(水) 16:45:54
>>602
ようやくできました。有り難うございます。
609デフォルトの名無しさん:2006/11/15(水) 16:58:57
>>603
ありがとう御座います。おかげで助かりました。
>>604
すみません。ミスタイプです。
610デフォルトの名無しさん:2006/11/15(水) 18:22:22
634 名前:デフォルトの名無しさん[sage] 投稿日:2006/11/15(水) 18:19:30
C++ガウス関数作れって言われたんだけど、渡された本は読んだんだけど
おすすめな初心者解説サイトないですぁ?

お返事もらえないのでこっちで質問します。
611デフォルトの名無しさん:2006/11/15(水) 18:32:54
>>610
ざんねんですが ありません
612デフォルトの名無しさん:2006/11/15(水) 18:52:10
>>593
それはVC6がおかしいような。Cとしてコンパイルしてる?

ともあれ、修正版。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2938.c
613デフォルトの名無しさん:2006/11/15(水) 19:04:21
[1] プログラミング
[2] ゲーム http://sage.math.washington.edu:9010/la4[3]  
 [3.1] windowsXP
 [3.2] Visual Studio 2003
 [3.3] C ++
[4] 2006年 11月17日
[5]クラスを使った問題です。問題の意味がわからないときは訳します。お願いします。
614デフォルトの名無しさん:2006/11/15(水) 19:07:07
>>613
This page does not exist yet.の意味がわからないので
訳してください
615デフォルトの名無しさん:2006/11/15(水) 19:08:46
>>614
Before creating the page, please check if a similar page already exists.
Here are some existing pages with similar names:
* la3
* la4
616デフォルトの名無しさん:2006/11/15(水) 19:14:53
おまいらどんだけ凄いんだよ・・・英語の問題とか見てると劣等感が・・・
それを澄ました顔でペラペラと・・・く・・・
617デフォルトの名無しさん:2006/11/15(水) 19:16:47
>>616
実際のところ>>615だって必死に辞書ひいて書いてるに違いない。
と、思っておけ
618デフォルトの名無しさん:2006/11/15(水) 19:26:56
re-entrantってなんすか?
619デフォルトの名無しさん:2006/11/15(水) 19:34:05
620 ◆mI7lo1ZRb6 :2006/11/15(水) 19:43:02
C++やP2P技術に卓越したプログラマの方々
宜しければ一度で良いので拝見して頂きたいです
当企画の成立には貴方の力が必要です

次世代コミュニティ製作 C++,mod_perl,P2Pが使えるコーダ、グラフィッカ募集中
http://pc8.2ch.net/test/read.cgi/tech/1163349367/
621デフォルトの名無しさん:2006/11/15(水) 20:34:34
mod_perlもP2Pも言語じゃねえ
あ、釣られた
622デフォルトの名無しさん:2006/11/15(水) 20:36:18
623デフォルトの名無しさん:2006/11/15(水) 21:48:59
>>617
そう思いたい現実が俺にも・・・。
624宜しくお願いします。:2006/11/15(水) 22:44:01
[1] ファイル入出力
[2]
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2939.zip
[3]  
[3.1] WindowsXP(HomeSP2)
[3.2] Visual Studio 2005
[3.3] C言語
[4] 2006年11月16日 PM4:30
[5] Break,Goto,Continue,ファイル入力にfscanf()関数の使用禁止
625デフォルトの名無しさん:2006/11/15(水) 23:23:59
[1]プログラミング
[2]与えられた文字列a,bを交互に入れ替えて表示する関数の作成
[3] 環境
 [3.1]リナックス
 [3.2]gcc
 [3.3]C
[4]無期限
[5]文字列に関したライブラリ関数使用禁止

↓以下自分で作ったヤツ。どこがおかしい??
#include<stdio.h>
void irekae(char *a, char *b, char *kekka)
{
while(*a != '\0'){
*kekka++ = *a;
*a++;
*kekka++ = *b;
*b++;
}
}
int main(void)
{
char a[]="12345";
char b[]="abcde";
char kekka[11];

irekae(a,b,kekka);
printf("%s",kekka);

return(0);
}
626デフォルトの名無しさん:2006/11/15(水) 23:28:14
>>612
コンパイルできました。
誠にありがとうございます。
なんとか提出期限には間に合いそうです。

残りの期間で必死に中身を理解しなければ…
たぶんムリだがorz

627デフォルトの名無しさん:2006/11/15(水) 23:59:02
>>624
こんなところに上げられたWordのファイルを誰が読むんだ?
テキストにせぃ。
628デフォルトの名無しさん:2006/11/16(木) 00:01:26
>>627
wordなのかよ
zipな時点で俺はダウンロード諦めた
629デフォルトの名無しさん:2006/11/16(木) 00:09:59
>>625
ポインタ
630デフォルトの名無しさん:2006/11/16(木) 00:16:48
>>625

@@ -7,6 +7,7 @@
 *kekka++ = *b;
 *b++;
 }
+*kekka=0;
 }
 int main(void)
 {
631625:2006/11/16(木) 00:28:58
ありがとうございます。
m(_ _)m
632デフォルトの名無しさん:2006/11/16(木) 01:47:28
>>624
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct field_tag {
    char word[32];
    int count;
    struct field_tag *next;
} field;
int myfget(FILE *fp, char *s) {
    int c, p = 0;
    while (1)
        if ((c = fgetc(fp)) == EOF) return c;
        else if (!isalnum(c)) {
            s[p++] = '\0';
            return 1;
        }
        else s[p++] = (char)c;
}
int isword(char *s) {
    int p = 0;
    while (1) {
        if (!isalnum(s[p]))
            if (s[p] == '\0' && p != 0) return 1;
            else return 0;
        p++;
    }
}
void search_and_insert(field *dest, const field *src){
    field *temp;
    if (dest->next == NULL) {
633632(続き):2006/11/16(木) 01:47:59
        dest->next = (field*)malloc(sizeof(field));
        memset(dest->next, 0, sizeof(field)); strcpy(dest->next->word, src->word); dest->next->count++;
    }
    else if (!strcmp(dest->next->word, src->word)) dest->next->count++;
    else if (!(strcmp(dest->next->word, src->word) < 0)) {
        temp = (field*)malloc(sizeof(field));
        memset(temp, 0, sizeof(field)); strcpy(temp->word, src->word); temp->count++; temp->next = dest->next; dest->next = temp;
    }
    else search_and_insert(dest->next, src);
}
void free_all(field *ptr){
    if (ptr->next != NULL) free_all(ptr->next);
    free(ptr);
}
int main(int argc, char *argv[]){
    field *root= (field*)malloc(sizeof(field)), *cur = root, temp;
    FILE *fp = fopen(argv[1], "r");
    memset(root, 0, sizeof(field)); temp.next = NULL;
    while(myfget(fp, temp.word) != EOF){
        if (isword(temp.word)) search_and_insert(cur, &temp);
        memset(&temp, 0, sizeof(field));
    }
    cur = root->next;
    while (cur != NULL){
        printf("%s : %d\n", cur->word, cur->count);
        cur = cur->next;
    }
    if (root != NULL) free_all(root);
    return 0;
}
634デフォルトの名無しさん:2006/11/16(木) 02:12:40
>>625
リナックスはOSじゃねーだろ。
635デフォルトの名無しさん:2006/11/16(木) 02:18:31
Linux Is Not UniXである
UNIXはOSである
したがってLinuxはOSではない

こうですか わかりません
636デフォルトの名無しさん:2006/11/16(木) 02:19:43
>>635
三段論法の要件満たしてないだろそれじゃ
637デフォルトの名無しさん:2006/11/16(木) 04:39:32
連立方程式をとくサブ関数をお願いします!
x1*a + y1*b=0
x2*a + y2*b=0
のように引数にx1 x2 y1 y2をとる感じの関数をお願いします><
638デフォルトの名無しさん:2006/11/16(木) 04:50:33
すいません!>>637ですが引数は右辺の0も引数にとって6個でお願いします。
付け加えてしまって本当にすいません!
639デフォルトの名無しさん:2006/11/16(木) 04:52:02
>>613
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2941.zip
サンプルプログラムと同じ動作するように作ってみた。
なんか「動けばいいというものではなく、よい設計でよいコードでなければならない」
とか書いてあるが、どういうのがよい設計なのか正直よく分からんのですよ。
640デフォルトの名無しさん:2006/11/16(木) 04:53:26
謝る暇があったらテンプレにそって書き直せクズ
641デフォルトの名無しさん:2006/11/16(木) 04:53:35
>>637
ガウスの消去法
ガウス・ジョルダン消去法
反復法

いろいろあるね(・∀・)
642デフォルトの名無しさん:2006/11/16(木) 05:04:26
>>640 へへ、すいやせん!
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):2元連立方程式を解きなさい
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン: VC2005
 [3.3] 言語: C++
[4] 期限: 今週まで
[5] その他の制限:>>637 >>638 です

>>641
ガウス・ジョルダン法ができればいいですけど答えがでればなんでいいです。ガウスジョルダンは頭では理解できるんですけど
プログラムにかけません><
643デフォルトの名無しさん:2006/11/16(木) 05:07:09
しかしx、yの方が係数なのか 変わってるな

引数6つって答えはどうやって返すの?
構造体?
644デフォルトの名無しさん:2006/11/16(木) 05:10:03
>>643
いや、気になるならabを係数にしていただいても( ;・∀・)
答えはどうやって返しましょう?素人に一番わかりやすい形で返していただければ・・・
645デフォルトの名無しさん:2006/11/16(木) 05:16:15
#define BEST 5.058548
.
.
.
if(fy[0] == BEST || s > N)
break;
プログラムの先頭でBESTを定義しておいて、ループの中の条件で
breakさせたいのですが、ループから抜け出せません。
printfで確認しましたが、配列fy[0]の中身は確かに5.058548でした。
おしえてください><
646デフォルトの名無しさん:2006/11/16(木) 05:17:13
647デフォルトの名無しさん:2006/11/16(木) 05:21:51
>>645
てけとーにεとればいいお
648大学生:2006/11/16(木) 08:46:42
「問題16」eの値を実数として計算し表示せよ。
「問題17」πの値を実数として計算し表示せよ。

「問題18」eの値を小数点以下60桁まで求めよ。
「問題19」πの値を小数点以下60桁まで求めよ。
この問題16.17.18、19のC言語プログラム(C++)でお願いします。
それと多倍長少数を利用して作ってください。


649デフォルトの名無しさん:2006/11/16(木) 08:47:29
650デフォルトの名無しさん:2006/11/16(木) 09:36:45
>>645
fabs(fy[0]-BEST)<0.000001
651デフォルトの名無しさん:2006/11/16(木) 13:55:14
>>648
問題19 :printf("3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117067982148086513282306647");
652デフォルトの名無しさん:2006/11/16(木) 14:42:00
[1] 授業単元: 卒業研究
[2] 問題文(含コード&リンク): フレーム間差分
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:Visual Studio 2003
 [3.3] 言語: C++
[4] 期限: 今週まで
[5] その他の制限: ありません。
aviファイルを取り込んで、フレーム間差分を実行できるプログラムを希望します。
653一年生:2006/11/16(木) 14:49:10
[1] 授業単元: プログラミング
[2] 問題文:文字配列にアルファベットで適当な文字を10文字入れたとき、
入力順序と逆順で表示する。 なお、配列を用いること。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:Microsoft Visual C++ 6.0
 [3.3] 言語: C++
[4] 期限: 2006年11月17日まで
[5] その他の制限: なし
654デフォルトの名無しさん:2006/11/16(木) 14:56:38
>>652
「フレーム間差分」って何?
ファイルフォーマットにしたがって説明してみて

avi ファイルフォーマット:
http://www.usagi-goten.com/jp/AVI_structure.html
655デフォルトの名無しさん:2006/11/16(木) 14:59:43
>>653
#include <stdio.h>
#include <string.h>
int main(void){
  int i;
  char buf[11];
  scanf("%s",buf);
  for(i=strlen(buf)-1;i>=0;i--){
    putchar(buf[i]);
  }
}
656デフォルトの名無しさん:2006/11/16(木) 15:00:39
>>653
このスレを逆順で検索

int i;
char a[11];
char *p = a;
scanf("%s", p);
for(i=9;i>=0;i--)printf("%c",p[i]);
657デフォルトの名無しさん:2006/11/16(木) 15:15:20
>>652
卒研をこのスレに丸投げw
年収200万円コースだな
658デフォルトの名無しさん:2006/11/16(木) 15:19:44
ほぅ。漏れの10倍の年収だな。
659デフォルトの名無しさん:2006/11/16(木) 15:29:56
[1] 授業単元: プログラミング
[2] 問題文・キーボードから n (1 <= n <= 50) 人分の得点(整数)を入力する.
・得点は0点以上100点以下とし,範囲外なら再入力させる.
・全員分入力が完了したら,平均点を求め,小数点以下1桁で表示する.
・各個人について,得点,平均点との差,および判定を表示する.
・判定は,80点以上を優,80点未満70点以上を良,
70点未満60点以上を可,60点未満を不可とする.
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名 gcc
 [3.3] 言語: C
[4] 期限: 今週まで
[5] その他の制限: ありません。
660デフォルトの名無しさん:2006/11/16(木) 15:34:15
>>658
お前の年収はいずれ100倍にしてやる!
だから、今はガンバレ。
661デフォルトの名無しさん:2006/11/16(木) 15:43:13
>>648
問題18
#include <stdio.h>
#include <math.h>
void e(int *data) {
    int i, j, *dap;
    unsigned k = 1, k2 = 2, s = 0;
    long x;
    for (dap = data, j = 16; j--; ) *dap++ = 0;
    for (i = 1; s <= 201; i++, s += j)
        if (i >= k) {
            k = k2; k2 <<= 1; j++;
        }
    *data = 1;
    while (--i) {
        for (x = 0, j = 16, dap = data; j--; ) {
            x = x * 10000 + *dap; *dap++ = x / i; x %= i;
        }
        (*data)++;
    }
}
int main(void) {
    int i, data[16];
    e(data);
    printf("e = %1d.", data[0]);
    for (i = 1; i <= 15; i++) printf("%04d", data[i]);
    printf("\n");
}
662デフォルトの名無しさん:2006/11/16(木) 16:54:59 BE:139752689-2BP(200)
>>659
#include <stdio.h>
#include <stdlib.h>
int main(void){int n,sum,i;double avg;int* p;char tmp[10];
do{fgets(tmp,sizeof(tmp),stdin);n=atoi(tmp);}while(n>50||n<1);
p=(int*)malloc(sizeof(int)*n);for(i=0,sum=0;i<n;i++){do{fgets(tmp,sizeof(tmp),stdin);
p[i]=atoi(tmp);}while(p[i]>100||p[i]<0);sum+=p[i];}avg=(double)sum/(double)n;
printf("平均:%.1f\n",avg);for(i=0;i<n;i++){printf("%-2i %-3i %-2.1f %s\n",i+1,p[i],
(double)p[i]-avg,(p[i]>=80)?"優":((p[i]>=70)?"良":((p[i]>=60)?"可":"不可")));}return 0;}
663デフォルトの名無しさん:2006/11/16(木) 17:15:17
>>652
単なる研究の手段として、差分画像がほしいだけなら、 avi を連番ビットマップに変換する
フリーのプログラムがあるから、それを持ってきてあとは単純にバイト列を引き算汁。
BMPヘッダを飛ばすくらいはできるだろ。

フレーム間差分を取るプログラムの研究が主目的なら、4月開始の卒研だったら
間に合わない悪寒。さっさと教授に相談に行ったほうがいい。
664デフォルトの名無しさん:2006/11/16(木) 18:38:33
[1] プログラミング
[2] 例えば, "Antonio Rodorigo Nogueira" → "arieugoN ogirodoR oinotnA" のように, 引数として受け取った文字列を
逆順にした文字列に書き換える関数 void str_reverse(char s[]) を作成せよ. この関数を用いて,
キーボードから入力した文字列を逆順に表示するプログラムを作成せよ.
[3]
 [3.1] winXP sp2
 [3.2] cygwin
 [3.3] C
[4] 2006年11月23日
[5] ポインタ無しです。多バイト文字は無視してもらって構いません。
665デフォルトの名無しさん:2006/11/16(木) 18:43:10
また逆順か!
もういいかげんにするっすお!(ポッポー
666デフォルトの名無しさん:2006/11/16(木) 18:54:50 BE:48525555-2BP(200)
>>664
#include <stdio.h>
#include <stdlib.h>
void str_reverse(char s[]){int i,l=strlen(s);char t;for(i=0;i<l/2;i++){t=s[i];s[i]=s[l-i-1];
s[l-i-1]=t;}}int main(void){char s[100];fgets(s,sizeof(s),stdin);s[strlen(s)-1]='\0';
str_reverse(s);puts(s);return 0;}
667デフォルトの名無しさん:2006/11/16(木) 18:57:22
[1] プログラミング
[2] 特にはないが、テンプレートマッチングのプログラムを作ること。
[3] 環境
 [3.1] Windows XP
 [3.2] cl
 [3.3] C言語
[4] 2006年11月18日
[5] 特にありません。
668デフォルトの名無しさん:2006/11/16(木) 19:05:53 BE:104814296-2BP(200)
>>653が微妙にめんどくさいな。
課題をそのまま解釈すると、アルファベット以外は逆順にしないことになる。
669デフォルトの名無しさん:2006/11/16(木) 19:12:03
逆順がはやってる?
670デフォルトの名無しさん:2006/11/16(木) 19:12:34
>>668
こ、、コレ、、、これ戦闘力たけぇな・・・・。
s[l-i-1] こんな数学僕には思いつきません。もうぬるぽ
671デフォルトの名無しさん:2006/11/16(木) 19:12:36
>>668
「アルファベットで適当な文字を10文字入れたとき」以外の動作は未規定、と解釈すればよろし
672デフォルトの名無しさん:2006/11/16(木) 19:13:07
3つの整数のうち最大のものを選べってプログラムで
if(x>y>z) {max=x}
if(y>x>z){}max=
673デフォルトの名無しさん:2006/11/16(木) 19:15:33
>>671
んじゃ、その時はディスクをすっきりフォーマットするってことで
674デフォルトの名無しさん:2006/11/16(木) 19:16:02
あーごめんなさい

3つの整数のうち最大のものを選べってプログラムで
if(x>y>z) {max=x}
if(y>x>z){max=y}
 ・
 ・
 ・
って全通り書いたらyが無視されたり、最大がとんでもない数字になったりして困ってます
675デフォルトの名無しさん:2006/11/16(木) 19:17:06 BE:58230656-2BP(200)
>>653
というわけでアルファベットのみひっくり返す版。

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
void str_reverse(char s[],int l){int i;char t;for(i=0;i<l/2;i++){t=s[i];s[i]=s[l-i-1];
s[l-i-1]=t;}}void rev_no_alpha(char s[]){int b,e,f=0,l=strlen(s),i;for(i=0;i<l;i++){if
(!f&&!isalpha(s[i])){f=1;b=i;}if(f&&isalpha(s[i])){f=0;e=i;str_reverse(&s[b],e-b);}}}
int main(void){char s[100];int l;fgets(s,sizeof(s),stdin);l=strlen(s)-1;s[l]='\0';
rev_no_alpha(s);str_reverse(s,l);puts(s);return 0;}
676デフォルトの名無しさん:2006/11/16(木) 19:19:57 BE:124224588-2BP(200)
>>674
例えばx>y>zだと、zが評価される相手は0か1しかない。
これ以上はスレ違い。
677デフォルトの名無しさん:2006/11/16(木) 19:29:16
1] 授業単元: プログラミング
[2] 問題文:main関数内でint型配列変数を定義し、適当な値で初期化
そのint型配列変数と要素数を受け取りすべての要素を表示する
ユーザー定義関数を作成する。
[3] 環境
 [3.1] OS: linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C
[4] 期限: 2006年11月27日まで
[5] その他の制限: なし
678デフォルトの名無しさん:2006/11/16(木) 19:43:30 BE:11646432-2BP(200)
>>677
#include "stdafx.h"
#include<stdio.h>
void print_array(int a[],size_t len){int i;for(i=0;i<len;i++){printf("%i\n",a[i]);}}
int main(void){int a[]={1,1,2,3,5,8,13,21,34,55,};print_array(a,sizeof(a)/sizeof(int));return 0;}
679デフォルトの名無しさん:2006/11/16(木) 19:44:46 BE:31056544-2BP(200)
>>678
最初の行は要らない。
680デフォルトの名無しさん:2006/11/16(木) 19:45:35
LinuxはOSじゃないつってんだろ ぼけ
681デフォルトの名無しさん:2006/11/16(木) 19:51:46
>>679
>main関数内でint型配列変数を定義し、適当な値で初期化
ってあるからmain関数も必要なんでない?
682デフォルトの名無しさん:2006/11/16(木) 19:54:09
俺のESPによると、>681は「最初」と「最後」を間違えている
683デフォルトの名無しさん:2006/11/16(木) 19:56:55 BE:69876094-2BP(200)
>>681
じゃあ3行目だけで。
684デフォルトの名無しさん:2006/11/16(木) 20:11:04
>>681と全く同じ見間違いをした俺。
685デフォルトの名無しさん:2006/11/16(木) 20:13:09
おれも
686デフォルトの名無しさん:2006/11/16(木) 20:18:30
>>680
なんていえばいいの?
GNU/Linuxシステム?
687デフォルトの名無しさん:2006/11/16(木) 20:27:00
確かにLinus一人の手柄みたいになる呼称は良くないよな。
688デフォルトの名無しさん:2006/11/16(木) 20:27:04
Linux.orgにもLinux is a free Unix-type operating systemと書いてある件について
689デフォルトの名無しさん:2006/11/16(木) 20:32:12
Linux系OSって書けってこと?
690デフォルトの名無しさん:2006/11/16(木) 21:03:47
ところで宿題マダァー? (・∀・ )っ/凵⌒☆チンチン
691デフォルトの名無しさん:2006/11/16(木) 21:10:16
>>669
先生がここ見て宿題考えてたりしてなw
692デフォルトの名無しさん:2006/11/16(木) 21:34:50
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2955.txt
を改造し, バブルソートの要素の交換を, 逆順で行うプログラムを作成し, x[ ]={7,1,2,3,4,5,6} という列が一度でソートできるようにしなさい.

ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2956.txt
を改造し, 立方根を計算するプログラムを作成しなさい。


この二つの宿題をおながいします。。。
693デフォルトの名無しさん:2006/11/16(木) 21:50:00
>>692
立方根を求める
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2957.txt

テンプレに従った方がいいぞ
694デフォルトの名無しさん:2006/11/16(木) 22:00:07
695デフォルトの名無しさん:2006/11/16(木) 22:36:45
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):10個の文字列を左から右へ移動させて、いわゆる50メートル走を作成
              順位、タイムも出す
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: Visual C++2005
 [3.3] 言語: C
[4] 期限:2006年11月17日12;00まで
[5] その他の制限:
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2959.txt
私が作ったものではこんな感じで斜めに一直線ですが(これが限界)、
実際はランダムで順位が決まるようにお願いします
696デフォルトの名無しさん:2006/11/16(木) 22:42:04
695の問題読んでたらなんか笑いがこみ上げてきた
697デフォルトの名無しさん:2006/11/16(木) 22:48:06
>>696
えぇ?何かおかしなところありましたか?
698デフォルトの名無しさん:2006/11/16(木) 22:56:35
その50メートルはどうやって算出?dpiは?
699デフォルトの名無しさん:2006/11/16(木) 23:03:31
>>698
50メートルは単なる例えですので
char[10][50]みたいなのでOKです
dpi…解像度、ですが、デバッグの画面で出来れば良いので考えなくて良いです
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2959.txt
取り合えずこれを見て起動させてもらえばどんな感じかわかると思います
700 ◆h/ILlCjQP. :2006/11/16(木) 23:14:44
すいませんCの授業始まって一週間なんですが脳が足りなくて全然できません。
甚だ低次元の問題ですみませんがよろしくお願いします。

[1] 授業単元: 条件分岐(if文)
[2] 問題文(含コード&リンク): ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2960.txt
[3] 環境
 [3.1] OS:winxp
 [3.2] コンパイラ名とバージョン:Borland C++ Compiler 5.5
 [3.3] 言語: C
[4] 期限: 日曜日
[5] その他の制限 (どこまで習っているか、標準ライブラリは使ってはいけない等々):
  printf文、scanf文、if文をちょっと習いました。標準ライブラリは分かりません。

自分で何もせずにいきなり聞くのは失礼なので、とりあえず少し考えてみました。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2964.txt

なんとかコンパイルはできましたが、実行結果が全然だめです。
どこをどうすれば良いでしょうか…。よろしくお願いしますorz
701デフォルトの名無しさん:2006/11/16(木) 23:23:45
[1] 授業単元:プログラミング応用
[2] 問題文(含コード&リンク):ソートとサーチのプログラムの計算を比較する
[3] 環境
 [3.1] OS:suse Linax
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語:C
[4] 期限:11/20
[5] その他の制限:無し

クイックソートが正しく行われなくて困っています。サブルーチンの再起や値の交換に問題があると思うのですが…
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2965.txt

お願いします。
702デフォルトの名無しさん:2006/11/16(木) 23:23:45
>>700
scanf( "%d", &suryo );
とりあえず&をつけ忘れてるぞ
703デフォルトの名無しさん:2006/11/16(木) 23:27:42
>>700
>>702 + if を逆順に評価して else をなくせばおk
704 ◆h/ILlCjQP. :2006/11/16(木) 23:29:12
>>702
うひぃありがとうございます。こんなところでミスってたんですね…本当に顔から火が出る思いです。
ちゃんと結果も出ました。駄文を見ていただきありがとうございました!
705STUDENT:2006/11/16(木) 23:31:16
「問題17」πの値を実数として計算し表示せよ。
「問題19」πの値を小数点以下60桁まで求めよ。
のCプログラム(C++)を作ってください。
多倍長少数を利用してプログラムを作ってください。
706デフォルトの名無しさん:2006/11/16(木) 23:35:13
>>705
>>1読んで書き直し
707デフォルトの名無しさん:2006/11/16(木) 23:35:30
708デフォルトの名無しさん:2006/11/16(木) 23:38:32
709デフォルトの名無しさん:2006/11/16(木) 23:38:42
>>707
はい、完璧です!ありがとうございました
こんな早く出来るなんて二週間も考えていた私が阿呆のようです
710デフォルトの名無しさん:2006/11/16(木) 23:43:08
[1] 授業単元:プログラミング実習
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2967.txt
[3] 環境
 [3.1] OS:WindowsXP_SP2
 [3.3] 言語:C++

たぶん5-1ぐらいは自分で何とかできると思う・・・
711デフォルトの名無しさん:2006/11/16(木) 23:46:58
こんなことこのスレで言うのもなんだが問題17くらい自分で解けば?と思うんだが

π=4arctan1とかマチンの公式とか連分数展開とか方法は色々あるだろ
712デフォルトの名無しさん:2006/11/16(木) 23:55:56
713デフォルトの名無しさん:2006/11/16(木) 23:57:40
>>712
不等号の向きが逆?
714デフォルトの名無しさん:2006/11/16(木) 23:58:59
>>713
左が大きい方が一般的なんだっけ?ごめんそこらへんテキトー
715デフォルトの名無しさん:2006/11/16(木) 23:59:18
>>710
> <<本日までの売上>>
> ナシ:800
> 今日の売上を入力してください.
> ナシ:100
> <<本日までの売上>>
> ナシ:1600

このプログラム、漏れには無理だ…。
716デフォルトの名無しさん:2006/11/17(金) 00:01:28
変数が左なのがほとんどじゃない?
717デフォルトの名無しさん:2006/11/17(金) 00:03:19
>>715
FunshokuKessan()
718デフォルトの名無しさん:2006/11/17(金) 00:08:18
社会派な先生だぜ
719デフォルトの名無しさん:2006/11/17(金) 00:35:57
>>701
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2969.txt

クイックソートが正しく行われていなかった主な原因は、中央値を
別の変数に保存しておかなかった事。中央値の位置にある変数は
ソート中に変化するので比較には使えない。
720デフォルトの名無しさん:2006/11/17(金) 00:38:55
>>701
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2970.txt

と思ったらごめん。デバッグ中にファイル名を入れるのが面倒なので
改変してた部分を元に戻した。>>719は消去しました。
721デフォルトの名無しさん:2006/11/17(金) 00:45:23
>>710
念レス成功? って、俺と同じ大学の人間かよ
明日の昼提出だから俺といっしょで焦ってるなw
つーわけで俺からも頼みます、応用だけでいいのでお願いします(ペコリ
722デフォルトの名無しさん:2006/11/17(金) 00:49:56
[1] 授業単元:プログラム
[2] 問題文(含コード&リンク): ローマ数字から算用数字への変換をC言語でつくりなさい。
例 1 = I
2 = II
3 = III
4 = IV
5 = V

http://pc8.2ch.net/test/read.cgi/tech/1149349035/361

別のスレで教えていただいたのですが、プログラムを理解できません。
解説をお願いできないでしょうか??
723デフォルトの名無しさん:2006/11/17(金) 00:49:58
710が大学の問題だったということに衝撃を受けた
724デフォルトの名無しさん:2006/11/17(金) 00:52:07
>>722
今むこうで解説を書いてるからちょっと待て。
725デフォルトの名無しさん:2006/11/17(金) 00:53:57
>>724
分かりました。お願いします。
726デフォルトの名無しさん:2006/11/17(金) 01:08:35
売上初期化が何を行うのか悩んだが
0入れるだけかよ
727デフォルトの名無しさん:2006/11/17(金) 01:11:15
>>723
ゆとり教育
728デフォルトの名無しさん:2006/11/17(金) 01:32:56
[1] 授業単元:情報処理
[2] 問題文:
多倍長演算の手法を用いてキーボードから 20 桁までの整数 a, b を入力し、減算(a - b)をするプログラムを作成せよ。答が負の場合は、マイナス記号を表示させること。

[3] 環境
 [3.1] OS:UNIX

 [3.2] コンパイラ名:gcc
 [3.3] 言語:C
[4] 期限:11月17日4時

[5] その他の制限: charで入力後intの配列へ入れ直す。
729こまったさん ◆LY1hBagPlw :2006/11/17(金) 01:36:28
[1] プログラム:
[2]問題文:
コード番号と名前から構成される構造体(name_list)のスタックマシンプログラムを作成せよ。
  スタックマシンとは、LIFO (Last in First Out: 後入れ先出し)を実現する機構で、
push操作によりデータが保存され,pop操作により最も最近pushしたデータが取り出される。
ここで,pop,pushの操作を自己参照型の構造体を利用してプログラムしなさい。

 簡単にまとめると最初のoperateにpopかpushを入れます。
popなら番号と名前を入れると、新しいデータが保存されます。
  pushなら一番最近に入れたデータを自動で出します。

  実行画面:例
  http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2971.txt
[3] 環境
 [3.1]WindowsXP
 [3.2]gcc 3.4
 [3.3]C/C++/どちらでも可
[4] 期限:2006年11月18日 7:00 まで
[5] 関数popとpushを定義するプログラムで無ければならない。
そのファイルだけで実行できるプログラムで無ければならない。
  

期限が短すぎて僕には無理そうです…
お願いします・・・
730デフォルトの名無しさん:2006/11/17(金) 01:42:42
STLのstack使ったらさすがに反則か
731デフォルトの名無しさん:2006/11/17(金) 02:06:56
>>710,721
問1
void initialize(int account[]){
for(int i=0;i<=4;i++){
account[i]=0;
}
}

void daily_input(int account[]){
char* hinmoku[]={"りんご","みかん","イチゴ","ナシ","イチジク"};
int tmp;
for(int i=0;i<=4;i++){
printf("%s :",hinmoku[i]);
scanf("%d",&tmp);
account[i]+=tmp;
}
}

void daily_output(int account[]){
char* hinmoku[]={"りんご","みかん","イチゴ","ナシ","イチジク"};
for(int i=0;i<=4;i++){
printf("%s :%d\n",hinmoku[i],account[i]);
}
}
732デフォルトの名無しさん:2006/11/17(金) 02:09:19
733デフォルトの名無しさん:2006/11/17(金) 02:10:22
問2
int main(void) {
nt i,account[3][5], input;
char* tenmei[]={"星が丘本店","塩釜口支店","上社支店"};
for (i=0;i<=2;i++){initialize(account[i]);}
printf("初期化を完了しました.\n");

while (1) {
printf("売上を入力しますか.プログラムを終了しますか.(入力:1,終了:99):");
scanf("%d", &input);
if (input == 99) {
printf("終了します\n");
break;
}
printf("本日の売上を入力してください.\n");
for (i=0;i<=2;i++){
printf("%s\n",tenmei[i]);
daily_input(account[i]);
}
printf("<<本日までの売上>>\n");
for (i=0;i<=2;i++){
printf("%s\n",tenmei[i]);
daily_output(account[i]);}
}
return 0;
}
734デフォルトの名無しさん:2006/11/17(金) 02:46:04
応用

typedef void (*PFUNC)(int account[]) ;

int main(void) {
  PFUNC syori[] = {daily_input, daily_output,initialize} ;
  int i,account[3][5], input;
  char* tenmei[]={"星が丘本店","塩釜口支店","上社支店"};
  for (i=0;i<=2;i++){
    initialize(account[i]);
  }
printf("初期化を完了しました.\n");
while (1){
printf("処理を選択してください.\n1:売上入力\n2:売上表示\n3:売上初期化\n99:プログラム終了\n番号を入力してください:");
scanf("%d", &input);
if (input == 99){printf("終了します\n");break;}
    else if (input>=1 &&input<=3){
    for (i=0;i<=2;i++){
        printf("%s\n",tenmei[i]);
        syori[input-1](account[i]);
      }
     }
    }
  return 0;
}

最後だし全角でインデントしてみたお^^
735デフォルトの名無しさん:2006/11/17(金) 07:27:10
>>705
問題19。行数制限により多少汚く整形されている。
#include <stdio.h>
#include <stdlib.h>
void series(int *data, int maxItem, unsigned bunsi, unsigned bunpo, unsigned plusMinus) {
    unsigned bunpo2, *item, *itemDiv, *imp, *ikp; int *dap, i, j, k; long x;
    item = (unsigned *)calloc(16, sizeof(unsigned)); for (imp = item, i = 16; i--; ) *imp++ = 0;
    itemDiv = (unsigned *)calloc(16, sizeof(unsigned));
    *item = bunsi * bunpo * 4; bunpo2 = bunpo * bunpo;
    for (j = 1; maxItem--; j += 2, plusMinus++) {
        x = 0;
        for (i = 16, imp = item; i--; ) {x = x * 10000 + *imp; *imp++ = x / bunpo2; x %= bunpo2;}
        imp = item; ikp = itemDiv;
        if (j == 1) for (i = 16; i--; ) *ikp++ = *imp++; else for (x = 0, i = 16; i--; ) {x = x * 10000 + *imp++; *ikp++ = x / j; x %= j;}
        k = 0; dap = data + 16; ikp = itemDiv + 16;
        if (plusMinus & 1) for (i = 16; i--; ) {*--dap += *--ikp + k; if (*dap < 10000) k = 0; else {*dap -= 10000; k = 1;} }
        else for (i = 16; i--; ) {*--dap -= *--ikp + k; if (*dap >= 0) k = 0; else {*dap += 10000; k = 1;} }
    }
    free(itemDiv); free(item);
}
void pi(int *data) {
    int i; for (i = 0; i < 16; i++) data[i] = 0;
    series(data, 45, 4, 5, 1); series(data, 15, 1, 239, 0);
}
int main(void) {
    int i, data[32];
    pi(data);
    printf("円周率π = %1d.", data[0]);
    for (i = 1; i <= 15; i++) printf("%04d", data[i]);
    return 0;
}
736デフォルトの名無しさん:2006/11/17(金) 09:27:25
int型一次元配列を受け取り、EOFまでデータを、
配列の先頭から順に10進入力し、入力されたデータの個数をint型で返す関数を作れという事なのですが、EOFまでとはどういう事でしょうか?
コンソールからEOFを入力?できるという事ですか?
どうやったら入力出来るのか、またそれを検出するにはどうすれば良いのでしょうか、教えてください。
携帯からなので読みにくいかもしれませんが宜しくお願いします。
737r ◆r/etvCKR2A :2006/11/17(金) 09:38:03
>>736
windowsのコマンドプロンプトならctrl+Z
Unixっぽいshとかならctrl+D
738r ◆r/etvCKR2A :2006/11/17(金) 09:39:37
>>736
検出は、feof( stdin )が非0を返すから、それを評価すればいいよ。
739さん:2006/11/17(金) 10:43:11
[1] 授業単元: 継承
[2] 問題文(含コード&リンク):
#include <iostream>
using namespace std;
class c1{ //基本クラス
int i;
public:
void seti(int n){i=n;};
int geti(){return i;};
};
class c2 : public c1 {//発生クラス
int j;
public:
void setj(int n) {j = n;};
void
disp(){cout<<geti()<<","<<j<<"\n";};
};
int main()
{
c2 ob;
ob.seti(10); //基本クラスの関数
ob.setj(4); //発生クラスの関数
ob.disp();
return 0;
}
基本クラスc1のメンバ関数iは発生クラスc2のメンバ関数disp()内と
関数main()内で、それぞれアクセスできるか。
基本クラスc1のメンバ関数iをprotectedにしたらどうなるか?
基本クラスc1のメンバ変数iはpublicで、基本クラスc1をprivate指定にしたらどうなるか?

740さん:2006/11/17(金) 10:44:02
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: VC++ 6.0
 [3.3] 言語: C++
[4] 期限:2006 年11月17日13:00まで
改行が多すぎてエラーになったので分けました、すいませんがよろしくお願いします。
741デフォルトの名無しさん:2006/11/17(金) 10:49:14
>>739
自分で試してみれば?としか…
742デフォルトの名無しさん:2006/11/17(金) 11:03:38 BE:54348847-2BP(200)
base classを「基底クラス」と言う派閥はあるが、derived classを「発生クラス」というのは
初めて見たな。
743デフォルトの名無しさん:2006/11/17(金) 11:15:42
>>742
つoccured class
744デフォルトの名無しさん:2006/11/17(金) 11:17:56 BE:122283397-2BP(200)
>>743
「occurred class」なんて用語を使う宗派自体見たこと無いw
745さん:2006/11/17(金) 11:20:11
disp()とmain()にメンバ変数iをアクセスする手段がわかりません‥。エラーが二つでるとは思うのですが
746デフォルトの名無しさん:2006/11/17(金) 11:27:25 BE:23292634-2BP(200)
じゃあそれが回答だろ。
747デフォルトの名無しさん:2006/11/17(金) 11:34:34
748デフォルトの名無しさん:2006/11/17(金) 12:11:47
>>744
発生クラス【occurred class】

あるクラスを基にして別のクラスをつくることを「継承」という。
ランタイムの自由な継承によって不本意に発生した、
父親クラスが判然としないクラスのことを発生クラスという。
http://ja.wikipedia.org/wiki/%E7%B6%99%E6%89%BF

749デフォルトの名無しさん:2006/11/17(金) 12:28:38
自分で項目追加して出典にできるwikipediaは便利すぎ
750デフォルトの名無しさん:2006/11/17(金) 12:57:55 BE:77640858-2BP(200)
>>748
父親が判然としないのはbastard classじゃないのか?
751デフォルトの名無しさん:2006/11/17(金) 13:28:11
1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
[3] 環境
2分木を「深さ優先探索」する。以下のプログラムを完成させなさい。
関数dfs( )で、訪問した頂点の値を表示する。
-------------------ここから--------------------
#include <stdio.h>
typedef struct {
int key;
int left;
int right;
} BT;
int main( void )
{
BT a[ 7 ] = {
{ 10, 1 , 2 },
{ 20, 3 , 4 },
{ 30, 5 , 6 },
{ 40, -1 , -1 },
{ 50, -1 , -1 },
{ 60, -1 , -1 },
{ 70, -1 , -1 }
};
dfs(a, 0);
}
int dfs(
printf("
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C
[4] 期限:11月20日
[5] その他の制限:特になし
752デフォルトの名無しさん:2006/11/17(金) 13:46:27 BE:54348274-2BP(200)
>>751
dfsの仕様がわからんのでやりようがない。
引数と戻り値の意味くらい書け。
753デフォルトの名無しさん:2006/11/17(金) 15:03:20
>>751
int dfs(BT a[], int index){
if(index<0)
return 0;
printf("%d\n", a[index].key);
dfs(a, a[index].left);
dfs(a, a[index].right);
return 1;
}
754デフォルトの名無しさん:2006/11/17(金) 19:11:37
[1] 授業単元: UNIXシステムコール
[2] 問題文(含コード&リンク):
引数に与えられたファイルの各行が始まる位置を配列に保存し、
ファイル名以降に指定された行番号の行を出力するプログラムを
作成しなさい。最初にファイルの最初から最後までを読み、各行の開始
する位置を記録しなさい。その後、lseekを使って指定された行を
出力するようにしなさい。ファイルの最大行数は10000行とします。

% a.out abc.txt 8 13 5 3
abc.txtの8行目、13行目、5行目、3行目の順番に出力します。
[3] 環境
 [3.1] OS:UNIX
 [3.2] コンパイラ名とバージョン:gcc 3.4
 [3.3] 言語:C
[4] 期限: 2006年11月18日23時まで
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
ポインタ、構造体などは習いました。
755デフォルトの名無しさん:2006/11/17(金) 19:15:35
???
問題文の通りに作ればいいんじゃね?
756 ◆l34PBoNoqE :2006/11/17(金) 20:18:57
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2986.c
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2987.txt

上の点数の平均値を表示するプログラムに、「最小値を変数xmin、最大値をxmaxにそれぞれ求めて、
表示するように拡張しなさい」という問題です。

[3] 環境
 [3.1] OS: WINDOWS
 [3.2] コンパイラ名とバージョン: LSI C-86 v3.30c
 [3.3] 言語: C
[4] 期限: 本日夜12時まで
[5] その他の制限:
 反復処理と条件判断とを組み合わせて表現する。
 最小値の場合はx[0]を仮の最小値xminに代入し、残りのデータと順番に比較してよりよい最小値が見つかったらxminを更新していく。
 最大値も同様。


という問題です。
よろしくお願いします。
757デフォルトの名無しさん:2006/11/17(金) 20:34:53
>>756
float xmax, xmin;

xmax = xmin = x[0];

if(x[i]<xmin) xmin = x[i];
if(x[i]>xmax) xmax = x[i];

printf("最小値:%10.2f\n最大値:%10.2f", xmin, xmax);

これをそれぞれ適切な場所に入れる。
758デフォルトの名無しさん:2006/11/17(金) 20:58:45
[1] 授業単元:
   プログラミング言語
[2] 問題文(含コード&リンク):
  A[0]=1,A[1]=2,A[2]=3,A[3]=4,・・・のように配列A[i]をA[50]=51まで代入し、
  これらの合計をA[0],A[0]+A[1],A[0]+A[1]+A[2]・・・となるように順に求めていくプログラムを作成せよ。
  このプログラム中では、合計が400を超えたときのiと合計をprintfで表示するようにせよ。
[3] 環境
 [3.1] OS: (Windows/Linux/等々)
    WindowsXP HomeEdition
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
    Visual Stadio2005
 [3.3] 言語: (C/C++/どちらでも可 のいずれか)
    Cでお願いします。
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
    2006/11/19日まで
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
  For文、IF文をかじったところまで習っています。
759デフォルトの名無しさん:2006/11/17(金) 20:59:43
[1] 授業単元:計算科学
[2] 問題文
確率変数Yが区間[0,1] の一様乱数 X と関数関係 Y = sinh(X)= (e^x - e^-x )/2 にある.
サンプル数?
10000
シード?
128478
と入力すると, p(y) に従う y を生成する.
これを10000回生成し, 平均, 分散, ymin とymaxの間を80のビンに分割して
ヒストグラムを出力するプログラムを作る.
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: Visual Studio.NET2003
 [3.3] 言語: C
[4] 期限: 2006年11月21日09:00まで
[5] その他
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2988.txt
を利用して作ってください
760デフォルトの名無しさん:2006/11/17(金) 22:07:19
>>759
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2989.txt

出力結果が正しいか確かめてみてくれ。
761デフォルトの名無しさん:2006/11/17(金) 22:15:04
>>758
#include <stdio.h>

int main(void)
{
    int A[51];        /* A[0]からA[50]までなので51個 */
    int i;

    /* 配列に初期値をセット */
    for(i = 0; i <= 50; i++)
    {
        A[i] = i;
    }

    /* 合計を計算 */
    for(i = 1; i <= 50; i++)
    {
        A[i] = A[i - 1] + A[i];
        if(A[i] > 400)
        {
            printf( "合計が400を超えました。\n" );
            printf( "合計 = %d, i = %d\n" , A[i], i );
            return 0;
        }
    }
    return 0;
}
762 ◆l34PBoNoqE :2006/11/17(金) 22:21:10
>>757さん
ありがとうございました!
763デフォルトの名無しさん:2006/11/17(金) 23:04:57
>>754
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2990.txt

callocを使ってよいかどうか分からなかったため、注意書き参照
764デフォルトの名無しさん:2006/11/18(土) 00:07:21
【質問テンプレ】
[1] プログラミング
[2] 与えられたデータ列の自己相関係数を計算区間100、時間間隔t=0〜100で求める
  データはttp://www.uploda.org/uporg583007.dat
[3] 環境
 [3.1] OS:WindowsXP
 他は良くわかりません
[4] すでに過ぎています……この土日中で……
[5] その他の制限: 当然できるよな?見たいなノリで出題されたので制限などはなさそうです

以下参考例です。???を埋めろといわれました
それ以外にも加える箇所があるかもしれないとのことです

 // MRa.c データファイルを読み込み 分散,相関を求める
//データファイル名,ラグはコマンドライン引数から取得
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#define OFST 0 //計算開始位置
#define N 24 //計算区間
int main(int argc, char *argv[]) //引数の数,ポインタをargc,argv[]に
{
char *fname ="defoult datafile name";
char fname1[20]; //ファイル名の格納場所 20文字分用意
char dummy[255];
FILE *fp;
int i,t,te=0;
float data;
float x[2048];
double mx,my,sx,sy,sxy,sxx,syy,cxx,cxy,cyy,rxy;
765デフォルトの名無しさん:2006/11/18(土) 00:08:04
//データファイル名構築,ラグ t のセット
if (argc==3) {fname = argv[1]; //引数の数が2つの時のみ読み込み
te = atoi(argv[2]);} //最大ラグ数 te を読み込み
strcpy(fname1,fname); //文字列のコピー
strcat(fname1,".txt"); //文字列の追加 拡張子.txtをつける

//データ読み込み
/*file open & read 書式付き*/
if (NULL==(fp = fopen(fname1,"rt")))
{ puts("FILE is not exist!!");
exit(1);
}
//ファイル終端まで配列に読み込む
fscanf(fp,"%s", dummy);
fscanf(fp,"%s", dummy);
i=0;
while(!feof(fp)&&i<2024){
fscanf(fp,"%f", &data);
x[i]=data;
// printf("\n %6d,%8.3f",i,x[i]);
i=i+1; //データ数カウント
}
for(t=0;t<=te;t++){ //ラグ te まで繰り返し
sx = 0.0;
sy = 0.0;
sxy= 0.0;
sxx= 0.0;
syy= 0.0;
766デフォルトの名無しさん:2006/11/18(土) 00:09:13
//平均,分散の計算準備
for(i=OFST;i<N+OFST;i=i+1){
//printf("\n %5d %8.3f %8.3f",i,x[i],x[i+t]);
sx = sx+x[i] ;
sy = sy+x[i+t] ;
sxy= sxy+x[i]*x[i+t];
sxx= sxx+x[i]*x[i];
syy= syy+x[i+t]*x[i+t];
}
mx= sx / N ;
my= sy / N ;
cxx=????????????????????;
cyy=????????????????????;
cxy=????????????????????;
rxy=????????????????????;
//printf("\n N=%4d t=%4d",N,t);
//printf("\n 平均 =%8.3f, %8.3f",mx,my);
//printf("\n 自己共分散 =%10.5f",cxx);
//printf("\n 自己共分散 =%10.5f",cyy);
//printf("\n 自己共分散 =%10.5f",cxy);
//printf("\n 自己相関 ρ=%10.5f",rxy);
printf("\n %5d %10.5f",t,rxy);}
return(0);}
767デフォルトの名無しさん:2006/11/18(土) 00:40:02
[1] 授業単元:プログラミング演習
[2] 問題文:初項が1、交差が(-1/1000000)の数列がある。この数列の初項から最初に値が0になる項までの和を求めるプログラムを作成せよ。
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:2006年11月21日まで
[5] その他の制限:百万回の和の繰り返しでプログラムする。

↓自分で作ってみたのですが、エラーが出てしまいます。
どこが間違いかを指摘してもらえませんか?

#include<stdio.h>
int main()
{
double a[1000000],s=0,a1=1,d=-0.000001;
int n=1;

while(a[n]==0){
a[n] = a1 - ((n-1)*d);
s = s + a[n];
n++;
}
printf("ans : %lf",s);
return 0;
}

768デフォルトの名無しさん:2006/11/18(土) 00:41:39
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
769デフォルトの名無しさん:2006/11/18(土) 00:42:35
>>767
a[1000000]とかいらねーだろ。
これ普通だと8Mバイトほどになるよな。スタックはデフォルトで1Mほどしか
取られていない(Windows)
770デフォルトの名無しさん:2006/11/18(土) 00:48:21
>>768
すみません↓エラーはこれです。
10 [main] a 3552 _cygtls::handle_exceptions: Error while dumping state (probably corrupted stack)
Segmentation fault (core dumped)

>>769
返答ありがとうございます。
どのように変更すればよいですか?
771デフォルトの名無しさん:2006/11/18(土) 00:49:38
配列取らずにforループで回せばいいじゃん
しかも事前に配列の中身用意してるわけでもなし

もったいないもったいない
772デフォルトの名無しさん:2006/11/18(土) 00:51:37
未初期化の領域を参照してるわ、whileの条件が意味わからないわでグダグダだな
自分で作ったのなんて書かかないほうがよかったな
773デフォルトの名無しさん:2006/11/18(土) 00:55:10
>>771
返答ありがとうございます。
配列はいらないんですか・・・
ちょうど配列を習ったばかりだったので使わなければいけないものだと思っていました。

>>772
whileの条件はだめですか?問題に忠実に作ったつもりでしたがorz
ご指摘ありがとうございました。
774デフォルトの名無しさん:2006/11/18(土) 01:02:14
>>773
このプログラムがやったことは、
毎日20人の客がくる定食屋において
20×365枚の皿を用意するようなもんだ

100万回繰り返せっていってるんだから素直に百万回繰り返しなさい
775デフォルトの名無しさん:2006/11/18(土) 01:06:13
>>773
0.1単位の小数は2進数の浮動小数点では正しく表せないので注意

#include <stdio.h>
#include <math.h>
#define EPS 1e-7

int main(void)
{
double s = 1.0, a1 = 1.0, d = -1e-6;

while (fabs(a1) > EPS) {
a1 += d;
s += a1;
}
printf("ans : %f\n", s);

return 0;
}
776デフォルトの名無しさん:2006/11/18(土) 01:06:31
>>774
はい・・・素直になります・・・
とてもわかりやすくありがとう!
777デフォルトの名無しさん:2006/11/18(土) 01:11:44
>>775
誤差が生じてくるということでしょうか・・・。
ソースコードまで載せてくれてありがとう。
778デフォルトの名無しさん:2006/11/18(土) 01:13:07
>>777
10進の小数でも使わないと必ず誤差が出る。
それか64bit整数で100万倍で計算しておいて最後に100万で割るとか。
779デフォルトの名無しさん:2006/11/18(土) 01:19:51
>>778
なるほどなー。すごく勉強になります!
0.1単位の小数には注意すると。フムフム
ほんとありがとう!
780デフォルトの名無しさん:2006/11/18(土) 01:20:01
>>778
多分これは誤差が出るよね?おかしいよね?
っていうことを確認する課題だと思う

こういう問題に対して誤差が出ないような答えを出すと嫌がられるので
きっちり誤差を出すようにするのが処世術だぜ
781デフォルトの名無しさん:2006/11/18(土) 01:23:22
二進数の小数で正しく表せる数は0.5、0.25、0.125、0.0625・・・(以下続く)
と、それらの和だけ。
782デフォルトの名無しさん:2006/11/18(土) 01:59:06
[1] 授業単元:プログラミングT
[2] 問題文(含コード&リンク):上底、下底、高さを入力して、台形の面積を逐次計算し
表示せよ。ただし入力データのいずれかが0のとき終了するものとする。
また、入力したデータの中で、面積が最大のものの面積、上底、下底、高さを求めて表示せよ。
[3] 環境
 [3.1] OS:Windows
 [3.2] すみません。よくわからなかったです
 [3.3] C++/
[4] 今度の火曜日
[5] 特に無し

#include<stdio.h>
void main()
{
float a,b,h,max=0,amax,bmax,hmax;
double s;
amax=0;
bmax=0;
hmax=0;
printf("上底,下底,高さを入力してください。\n");
scanf("%f,%f,%f",&a,&b,&h);
while(a!=0&&b!=0&&h!=0){
s=(a+b)*h*0.5;
printf("s=%lf\n",s);
if(s>max)max=s;
if(s>max){amax=a;
bmax=b;
hmax=h;
}
783デフォルトの名無しさん:2006/11/18(土) 02:01:16
scanf("%f,%f,%f",&a,&b,&h);
}
printf("s=%lf a=%f b=%f h=%f\n",max,amax,bmax,hmax);
}


とりあえずここまで作ってみて、計算して面積の最大は表示できるんですが、
面積最大のときの各辺の長さの表示がわかりません。
よろしくお願いします。
784デフォルトの名無しさん:2006/11/18(土) 02:03:30
>>782
if(s>max)max=s;
if(s>max){amax=a;

if(s>max){max=s;
amax=a;
785デフォルトの名無しさん:2006/11/18(土) 02:08:34
これはひどい
786デフォルトの名無しさん:2006/11/18(土) 02:11:34
あ、あれ?それさっきやってみて出来なかったのに
もっかいやって見たら出来ました。なんかよく分からないけど、
助かりました。ありがとうございます。
787デフォルトの名無しさん:2006/11/18(土) 03:24:09
[1] プログラミング
[2] 下のように初期化した文字列 sentence と, キーボードから入力した文字列 str に対し, sentence が str で始まっているかどうか (str が sentence の先頭から一致するかどうか) を判定して表示するプログラムを作成せよ. sentence の方が str より長いと仮定してよい.

char s[] = "This is a pen. That is an apple. ";

次を確認せよ.
o This → 始まっている
o That → 始まっていない
o Th → 始まっている
o Thise → 始まっていない

[3]
 [3.1] winXP sp2
 [3.2] cygwin
 [3.3] C
[4] 2006年11月23日
[5] 文字列を比較する関数を使ってください。
参考にしなくてはいけないプログラムがあるので、
それを次のレスに書きます。似たような感じでお願いします。
788787:2006/11/18(土) 03:27:17
int main(void)
{
int len;
char line[100];
printf("入力された文字列の長さを数えます。\n");
printf("終了するときはquitと入力してください。\n");
for(;;){
printf(">>>");
gets(line);
if(str_comp(line,"quit")==0){
break;}
len=str_length(line);
printf("%sの長さは%dです。\n",line,len);
}
printf("終了します\n");
return 0;
}
int str_comp(char str1[],char str2[]){
int i;
for(i=0;str1[i]==str2[i];i++){
if(str1[i]=='\0'){
return 0;}
}
return str1[i] - str2[i];
}
int str_length(char s[]){
int i;
for(i=0;s[i]!='\0';i++)
;
return i;
}
これを参考にです、よろしくお願いします。
789 ◆/FsopyQZxE :2006/11/18(土) 03:35:34
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク): 任意の金額をある利率(複利、日率)で運用した場合の、
目標金額をに達する日数を求めよ。
[3] 環境
 [3.1] OS: (Windows/Linux/等々) WindowsXP SP2
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) VC++ 2005
 [3.3] 言語: (C/C++/どちらでも可 のいずれか) C
[4] 期限:今週いっぱい
[5] その他の制限: 基礎程度です。取りあえずwhileで書きましたが、
どこが間違っているのかさっぱりです・・・orz
出来ればwhileだけで作ったのと、forだけで作ったものの2つのタイプを
お願いしたいです。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2992.txt
790デフォルトの名無しさん:2006/11/18(土) 03:50:21
>>789
少数の変換指定子は d ではなく f
a, b, c を引数にとっている4箇所の %d を %f に書き直せばOK
791デフォルトの名無しさん:2006/11/18(土) 09:31:30
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク):
文字のリストを操作するプログラムを作成せよ。
このプログラムには以下の3つの機能を持たせること。
1・・・リストにアルファベット順に文字を挿入する(関数 insert)
2・・・リストからある文字を削除する(関数 delete)
3・・・プログラムを終了する

ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2993.txt
自分なりにやったものの関数insert, delete の部分が分かりませんでした。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2006/11/19 PM01:00
[5] その他の制限: 上記にあるプログラムを使ってお願いします。
792デフォルトの名無しさん:2006/11/18(土) 10:49:02
おまんこした
793デフォルトの名無しさん:2006/11/18(土) 11:02:35
>>792
卒業ですか・・・
794 ◆/FsopyQZxE :2006/11/18(土) 11:38:10
>>790
出来ました!こんな単純なことを何時間も悩んでたなんて
お恥ずかしいです・・・orz

本当に有難う御座いました!
795デフォルトの名無しさん:2006/11/18(土) 11:51:07
未解決問題の量とかお構い無しにどんどんスタックされていくな
796デフォルトの名無しさん:2006/11/18(土) 12:52:52
>>787
int func787(const char *sentence, const char *str)
{
int i, check_length;

check_length=str_length(str);
for(i=0;i<check_length;i++)
{
if(sentence[i]!=str[i])
{
return 0;
}
}
return 1;
}
797デフォルトの名無しさん:2006/11/18(土) 16:31:10
return 0;とreturn 1;ってどう違うの?3行以内で頼む。
798デフォルトの名無しさん:2006/11/18(土) 16:38:12
>>797
return 0;はint型の0が返る。
reutnr 1;はint型の1が返る。
799デフォルトの名無しさん:2006/11/18(土) 16:42:25
返っちゃったら実行できないんじゃないの?
800デフォルトの名無しさん:2006/11/18(土) 16:49:34
>798
なるほど!よくわかったよ、ありがとう。
801デフォルトの名無しさん:2006/11/18(土) 16:58:43
いいんかいそれで
802デフォルトの名無しさん:2006/11/18(土) 18:38:54
[1] 授業単元:情報技術英語U
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2994.txt
英文が書いてあるファイルdat.txtから単語を抽出し、その単語をabc順に並び替えるプログラム、
英文の空白や"."や","は表示しない、大文字は小文字にする。また、抽出した単語を並び替えるために
コマンドプロンプトで使うsortのコマンドをプログラム中に使う。
dat.txtは次のものとする。

This is a pen.
I am a student.
It is impossible to solve this problem.
When she relaxes, she slips back into the local accent.
 
[3] 環境
 [3.1] OS:windowsXP
 [3.2] コンパイラ名とバージョン:lcc
 [3.3] 言語:C
[4] 期限:11月19日まで
[5] その他の制限:fclose,fopenを使い、sortのコマンドを使う。

>>344 の問題は解くことができました。ありがとうございます。

上の問題ですが文字列をどうやって並びかえるのかが分かりません。
あと、配列を使うとしてもどう格納するべきかが分かりません。
803692:2006/11/18(土) 18:50:59
>>693-694
すみません、>>1をしっかり見ていませんでした。

[1] 授業単元:コンピュータ入門
[2] 問題文(含コード&リンク): ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2955.txt を改造し, バブルソートの要素の交換を, 逆順で行うプログラムを作成し, x[ ]={7,1,2,3,4,5,6} という列が一度でソートできるようにしなさい.
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:Borland C++ Compiler 5.5
 [3.3] 言語:C言語
[4] 期限:無期限

回答くださったプログラムをコンパイルしようとしたのですが、バブルソートの方がコンパイルできませんでした。
<stdio.h>を加えてもできず、自分にはわかりません。
よろしくお願いします。
804デフォルトの名無しさん:2006/11/18(土) 18:56:55
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
805デフォルトの名無しさん:2006/11/18(土) 18:58:55
1をしっかり見てこれか
806デフォルトの名無しさん:2006/11/18(土) 19:03:18
>>804-805
テンプレに従うかどうかは質問者の自由。
適切な書き方じゃないと思ったらスルーしようぜ。

>気に入らない質問やその他や発言はスルーの方向で。
807692:2006/11/18(土) 19:20:16
重ね重ね申し訳ないです。
回答くださったプログラムをそのままコンパイルしたところ、


エラー E2046 kadai24.1.1.c 4: include 指令のファイル名の書式が正しくない
エラー E2378 kadai24.1.1.c 13: For文に ; がない(関数 main )
警告 W8004 kadai24.1.1.c 15: 'i' に代入した値は使われていない(関数 main )
エラー E2377 kadai24.1.1.c 21: While文に ) がない(関数 bubblesort )
エラー E2378 kadai24.1.1.c 22: For文に ; がない(関数 bubblesort )
警告 W8004 kadai24.1.1.c 26: 'j' に代入した値は使われていない(関数 bubblesort )
警告 W8004 kadai24.1.1.c 26: 'i' に代入した値は使われていない(関数 bubblesort )
警告 W8057 kadai24.1.1.c 26: パラメータ 'a' は一度も使用されない(関数 bubblesort )
警告 W8057 kadai24.1.1.c 26: パラメータ 'n' は一度も使用されない(関数 bubblesort )
エラー E2303 kadai24.1.1.c 27: 型名が必要
エラー E2451 kadai24.1.1.c 27: 未定義のシンボル end
エラー E2040 kadai24.1.1.c 28: 宣言が正しく終了していない
エラー E2141 kadai24.1.1.c 28: 宣言の構文エラー
エラー E2293 kadai24.1.1.c 29: ) が必要
エラー E2190 kadai24.1.1.c 30: 不要な }
エラー E2190 kadai24.1.1.c 31: 不要な }
*** 11 errors in Compile ***

とでました。
よろしければ回答お願いします。
808デフォルトの名無しさん:2006/11/18(土) 19:28:23
>>807
コンパイラの吐いたエラーメッセージを読んでるか?
809デフォルトの名無しさん:2006/11/18(土) 19:37:43
main() とする奴を一度殺したい
810デフォルトの名無しさん:2006/11/18(土) 19:39:39
俺が見た694には#include<stdio.h>が最初からついていたし
俺のコンパイラでは694はコンパイル通ったので
きっと692は俺と別の位相で生きているのだろう
811デフォルトの名無しさん:2006/11/18(土) 19:40:12
>>808
読んで色々試しているのですがなかなかコンパイルが成功しません。
;や<stdio.h>が足りないだけならわかるのですが、()があるのにないというメッセージがきたり、途中の構文自体が間違っているみたいな場所があって、自分にはわかりませんでした…
812デフォルトの名無しさん:2006/11/18(土) 19:42:48
BCCはどんな仕様なんか知らないが
C++としてコンパイルしようとしてるんじゃないの?
813692:2006/11/18(土) 20:00:49
自己解決しますた…
なんというか申し訳ないですorz
814デフォルトの名無しさん:2006/11/18(土) 20:22:23
main(){return;}
815デフォルトの名無しさん:2006/11/18(土) 21:15:40
public static void main(stirng args[])
816デフォルトの名無しさん:2006/11/18(土) 22:54:10
int main(byVal argc as Integer, byVal argv() as string)
817デフォルトの名無しさん:2006/11/19(日) 00:11:02
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2999.txt
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: VisualStudio2003
 [3.3] 言語: C
[4] 期限: 11月20日
[5] その他の制限: 考えたんですけど、よくわかりませんでした。
         どなたかご教授ください
818デフォルトの名無しさん:2006/11/19(日) 00:15:15
>>817
その問題のリクエストをするのは君で三人目なんだ
819デフォルトの名無しさん:2006/11/19(日) 00:30:37
ナシ:1600に吹いた
820817:2006/11/19(日) 00:32:27
答えてくれるのかだめなのかはっきりして下さい。
だめなら他行きますから
821デフォルトの名無しさん:2006/11/19(日) 00:36:12
うっせハゲ
うっせハゲ
うっせハゲ
822デフォルトの名無しさん:2006/11/19(日) 00:37:08
>>820
このスレの回答者は誰かに統率されているわけではないので、
誰も答えが出るかどうか分からない。
823818:2006/11/19(日) 00:39:13
割と親切に教えたつもりだったのに
824デフォルトの名無しさん:2006/11/19(日) 00:51:53
割と じゃ駄目なんだろ。ここにリクエストするような人なんだから

>>731
825デフォルトの名無しさん:2006/11/19(日) 01:05:47
こんな問題が大学の課題としてだされ
それに答えられない人間が少なくとも3人もいて
そのうちの一人は818を読んでも既に解答済みであるという
可能性に思い当たらないレベルの池沼

なんという底辺大学
826デフォルトの名無しさん:2006/11/19(日) 01:26:46
実は小学生の宿題。嘘を嘘と…ってやつだな。
827デフォルトの名無しさん:2006/11/19(日) 01:35:04
他行けタコ
828デフォルトの名無しさん:2006/11/19(日) 01:45:38
>>270
>>817

一週間前にも宿題丸投げしておいてその態度は無いだろ
829デフォルトの名無しさん:2006/11/19(日) 01:53:56
>>825
そんな問題に回答できないおまえは・・・


830デフォルトの名無しさん:2006/11/19(日) 01:55:17
煽り下手っすねwwwwwwwwwwwwww
831デフォルトの名無しさん:2006/11/19(日) 01:59:03
>>828
ワロタ
これは来週も来るな
832デフォルトの名無しさん:2006/11/19(日) 02:04:21
宿題ではありませんが、質問です。
自分のC/C++の実力がどのていどあるかを知れることできませんかね?
中学、高校のときは全国模試等で自分が全国で大凡どのあたりにいるか
判断できたんですど・・・
833デフォルトの名無しさん:2006/11/19(日) 02:20:37
>>832
ソフトウェア開発技術者試験を受けてこい
834デフォルトの名無しさん:2006/11/19(日) 02:34:31
>>833
ソフ開はC/C++の問題は出ないでしょ。
基本情報もC(しかもすごく簡単な)だけだから資格でC/C++の習熟度計るのは難しいと思うよ。
835デフォルトの名無しさん:2006/11/19(日) 02:44:13
鉛筆を使う実力が全国何位とか消しゴムを使う実力が全国何位とか

そういったことを気にしても仕方あるまい?
836デフォルトの名無しさん:2006/11/19(日) 03:18:38
鉛筆を使う実力や消しゴムを使う実力であっても
全国1位ならたいしたものだと思いますけど・・・

あなたは、なにかの分野で全国TOP1%未満に入ったことあるのですか?
837デフォルトの名無しさん:2006/11/19(日) 03:21:51
>>836
多分たいていの人が何かのTop1になってる
838デフォルトの名無しさん:2006/11/19(日) 03:28:10
>>836
大体のことなら1%に入れる自信がある
だけど60億の1%って6000万だよね
839デフォルトの名無しさん:2006/11/19(日) 03:29:12
学校と社会で大きく違うのは、
学校では人と競争して、どれだけ多くできるか、ミスに関しては余り深く考えない。
社会では、95%は失敗と一緒。
如何に確実なモノとしてできるか。
例えば、自分のプログラムが人命に関わる部分に使われるとか考えてみればいい、充分に練り上げてテストしないと怖くて出せないだろう。
840デフォルトの名無しさん:2006/11/19(日) 03:29:42
>>837
「topから526438番目に近い」という項目でtopになったり
なんでもありだからな
841デフォルトの名無しさん:2006/11/19(日) 03:30:26
>>838
全国TOP1%って言ってるのに60億の1%とは意味不明

こんな人が
大体のことなら1%に入れる自信がある
とはw
842デフォルトの名無しさん:2006/11/19(日) 03:34:19
>>832>>836>>841
ぐぐれもしない人間は全国模試の受験資格はないらしいよ
843デフォルトの名無しさん:2006/11/19(日) 03:34:53
ぬるぽのTop1は漏れということで。
844デフォルトの名無しさん:2006/11/19(日) 03:35:28
>>842
よほど、悔しかったのかなw
845デフォルトの名無しさん:2006/11/19(日) 03:39:24
>>841
全国=全ての国
全日本ならまだしも、あんたばかぁ?
846デフォルトの名無しさん:2006/11/19(日) 03:39:50
何おう、ぬるぽは漏れのもんだぞ。
勝手に盗むな。

おなかが減ったので日清カップヌードルカレーを食べました。
(゚д゚)ウマ-
847デフォルトの名無しさん:2006/11/19(日) 03:42:33
>>846
漏れの手作りの餃子スープと交換しないか?
848デフォルトの名無しさん:2006/11/19(日) 03:47:19
>>845
全国=全ての国 ・・・
あの〜もう止めたら?w

学の無さを露呈する結果になってますよ
849デフォルトの名無しさん:2006/11/19(日) 04:04:17
>>847
ダメー
フツーにだめー
850デフォルトの名無しさん:2006/11/19(日) 04:10:45
>>848
一般的な使い方ではないが間違いではないようだな
ttp://dic.yahoo.co.jp/dsearch?enc=UTF-8&p=%E5%85%A8%E5%9B%BD&dtype=0&dname=0na&stype=0&pagenum=1&index=10538800
それよりも全国TOP1%って使い方の方がおかしいと思うぞ
C学ぶより日本語学んどけ
851デフォルトの名無しさん:2006/11/19(日) 05:05:28
>>836
全国0.01位未満ってことは
1位からドベまで全てが対象だ
852デフォルトの名無しさん:2006/11/19(日) 08:31:48
>845
君は悪く無い。悪いのはゆとりシステムを生み出した大人達だ。
853デフォルトの名無しさん:2006/11/19(日) 09:12:48
初心者勉強しても分かりませんでした。よろしくお願いします。配列のところを勉強しています。

[1] 授業単元: プログラミング
[2] 問題文:10個の数値を配列に入力し、その数値を昇順(小さい→大きい)に並べ替えて
表示するプログラムを作成せよ。
ソートは以下のアルゴリズムに従い実現する。
・配列を1回走査することで最小の値が配列の最初の要素に格納される
・2回目の配列走査は2番目の配列要素から大小比較を行い、走査後には
2番目に小さい値が配列の2番目の要素に格納される
・以下同様に、N回目の走査ではN番目の配列要素から比較を行う
[3] 環境
 [3.1] OS:windows
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:
[5] その他の制限:特になし
854デフォルトの名無しさん:2006/11/19(日) 09:49:22
>>853
インサートソート
855デフォルトの名無しさん:2006/11/19(日) 10:55:53
>全国=全ての国

もはや日本人ではn
856デフォルトの名無しさん:2006/11/19(日) 11:58:09
Cってヒッピーっぽいから順位なんて気にしないとおもってたのに、
C++になって変わっちゃってたんだね。
ベトナム戦争反対!
857デフォルトの名無しさん:2006/11/19(日) 12:01:19
>>856
まあ具体的には下げろってことだ。
858デフォルトの名無しさん:2006/11/19(日) 12:22:47
# include <stdio.h>
void swap(int *a, int *b) {
  int t = *a;
  *a = *b;
  *b = t;
}
int *min_element(int *array, int size) {
  int minv = array[0];
  int *minp = array;
  int i;
  for(i = 1; i < size; i++)
    if(array[i] < minv) {
      minv = array[i];
      minp = array + i;
    }
  return minp;
}
void sort(int *array, int size) {
  int i;
  for(i = 0; i < size; i++)
    swap(array + i, min_element(array + i, size - i));
}
int main(void) {
  int i;
  int a[10];
  for(i = 0; i < 10; i++)
    scanf("%d", a + i);
  sort(a, 10);
  for(i = 0; i < 10; i++)
    printf("%d\n", a[i]);
  return 0;
}
859デフォルトの名無しさん:2006/11/19(日) 12:38:40
どうも本当にありがとうございますm(__)m
860デフォルトの名無しさん:2006/11/19(日) 12:43:42
宣言と代入を同時にやるのってキモいよな。
861デフォルトの名無しさん:2006/11/19(日) 12:48:43
>>860
未初期化の変数を放置しておく方がキモい。
862デフォルトの名無しさん:2006/11/19(日) 12:51:09
キモさはコーディング独立。
863デフォルトの名無しさん:2006/11/19(日) 13:31:23
参照はどうすれば・・・
864デフォルトの名無しさん:2006/11/19(日) 14:13:44
>>863
NULL
865デフォルトの名無しさん:2006/11/19(日) 14:16:25
866デフォルトの名無しさん:2006/11/19(日) 14:24:14
>>860
初期化と代入を混同しているな。
867デフォルトの名無しさん:2006/11/19(日) 15:28:04
>>858
いまどき、コンソールで動くプログラムを使う人なんて
ほんの一握りのヲタクだけでしょ?
868デフォルトの名無しさん:2006/11/19(日) 15:33:35
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3002.txt
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:Borland C++ Compiler 5.5
 [3.3] 言語:C言語
[4] 期限:11月25日

ソケットプログラミングです。
少し面倒かもしれませんが、宜しくお願い致します。
869デフォルトの名無しさん:2006/11/19(日) 15:43:47
('A`) >>867
870デフォルトの名無しさん:2006/11/19(日) 17:00:03
>>866
どこを見たらそう見えるんだ?
871デフォルトの名無しさん:2006/11/19(日) 18:39:20
872こまったさん ◆LY1hBagPlw :2006/11/19(日) 19:19:29
>>732
遅くなりましたが、ありがとうございました。
873理大中退者:2006/11/19(日) 20:58:21
このスレは人としてダメだろ。宿題丸投げでそれを解いてる偽善ぶった暇人は死ねよ
こんなんで単位取っていいと思ってるのか?課題の意味分かってんの?糞野郎ども

















在学中はお世話になりました。ありがとう
874デフォルトの名無しさん:2006/11/19(日) 21:11:18
>>873
このスレの問題解けるようになった?
875デフォルトの名無しさん:2006/11/19(日) 21:17:53
>>873
卒業乙。次からは回答側な
876デフォルトの名無しさん:2006/11/19(日) 21:23:06
>>875
中退って書いてあるけど。
877デフォルトの名無しさん:2006/11/19(日) 21:29:22
>>876
質問者から卒業という意味


・・・まあ、過ちは認めないとな。正直、見逃した。
878デフォルトの名無しさん:2006/11/19(日) 21:43:07
>>873
質問
中退した後はどうしたのか詳しく教えてほしい
879理大中退者:2006/11/19(日) 21:52:31
法科大学院受験を目指して浪人中です。
この国で最後に笑うのはやっぱり文系だよ。
880デフォルトの名無しさん:2006/11/19(日) 22:13:29
>>879
文理の区別なんて日本位のもの。外国では通用しない。

まあがんばれ。人には向き不向きがある。たとえ簡単なCプログラムさえ書けないとしても、
代わりに一人でも多くの無罪の人を救う力があるのなら、それは価値のあることだと思う。
881理大中退者:2006/11/19(日) 22:21:31
>>874
解けるんだが先に回答する人のを見るとまだまだ全然。勉強になるw
>>875
以外に優しい・・・
>>876
ごめんなさい。中退しました
>>877
俺の出した問題を解いてくれて有難う御座いました。今でも回答者の頭のキレの速さには尊敬しちまうw
>>878
就職活動をしPGかSE希望で相当周りました。SE採用(嘘臭い)なのに深夜までPCカチャカチャさせられる('A`)
>>879
文系に未来はあるのだろうか???
>>880
>>879は俺じゃないw

これからもおまいらの知識を搾り取って成り上がる。あの時は(-u- )っ[お世話になりました。ノシ]
882デフォルトの名無しさん:2006/11/19(日) 22:25:05
ごめん
>>859が 「どう見ても精子です。本当にありがとうございました」に見えた
883デフォルトの名無しさん:2006/11/19(日) 22:30:05
>>881
向学心あり。採用!
884デフォルトの名無しさん:2006/11/19(日) 22:50:01
>>881
このまま人生も中退すれば?
885デフォルトの名無しさん:2006/11/19(日) 22:54:26
>>884
YOU もしかして NEET なのかい ???
886デフォルトの名無しさん:2006/11/19(日) 22:55:40
>>885
ちがうやい!ただのMEATだい!
887デフォルトの名無しさん:2006/11/20(月) 02:16:20
[1] 授業単元:計算力学
[2] 問題文(含コード&リンク):
  1.2つの1次元配列の内積を計算するプログラムを作成せよ。
  2.2つの2次元配列の積を計算するプログラムを作成せよ。
  3.上のプログラムを関数を用いて実現せよ。

[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語:C言語
[4] 期限:
[5] その他の制限:


888デフォルトの名無しさん:2006/11/20(月) 03:01:09
配列の内積?
配列の積?
889デフォルトの名無しさん:2006/11/20(月) 03:26:00
内積
外積について
3:5=6:10
890デフォルトの名無しさん:2006/11/20(月) 03:37:02
要はvectorの内積とmatrixの積をやりゃあいいんだろ?
簡単じゃないか。
891デフォルトの名無しさん:2006/11/20(月) 10:38:34
C言語でwebブラウザ(IE程度のもの)を作りたいのですが、
C言語だけで可能でしょうか?(C++は使用不可です。)
892デフォルトの名無しさん:2006/11/20(月) 10:40:13
諦めた方がいいと思うよ



可能か不可能かで言えば「可能」
893デフォルトの名無しさん:2006/11/20(月) 12:08:06
>>891
>IE程度
それはもちろん脆弱性も含めて?
894デフォルトの名無しさん:2006/11/20(月) 13:09:57
>>893
脆弱性はIEより低くてもいいです。
とりあえずページが表示できれば・・・
895デフォルトの名無しさん:2006/11/20(月) 13:16:51
入力した5つのデータ(10,20,-5,100,0)のうち、最大値と最小値を求める
サブ関数minmaxを作成せよ。ただし、入力するデータはdouble型の配列
に格納するものとする。また、minmaxは配列の先頭アドレス情報が代入
されたポインタで呼び出されるものとし、戻り値はvoid型とする。

実行結果
1個目のデータを入力:10
2個目のデータを入力:20
3個目のデータを入力:-5
4個目のデータを入力:100
5個目のデータを入力:0
最大値は100.000000です。最小値は-5.000000です。
896デフォルトの名無しさん:2006/11/20(月) 13:21:02
[1] 授業単元: コンピュータ基礎演習U
[2] 問題文(含コード&リンク):
http://www2.crypt.c.dendai.ac.jp/pukiwiki/pukiwiki.php?2006%C7%AF%A5%EC%A5%DD%A1%BC%A5%C8%B2%DD%C2%EA1

double a[]={1.5, 3.3, 6.7, 0.2, 2.9, -1};

のような正の実数の配列が与えられているとします。但し、最後の "-1"はデータの終りを意味している特別な値(番兵)であるとします。

バブルソートについて調べて、上のような任意長の配列の要素をバブルソートを用いて昇順に並べるプログラムを書け。
 [3.1] OS: (Windows/Linux/等々) windows
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
 [3.3] 言語: (C/C++/どちらでも可 のいずれか) C++
よろしくお願いします
897デフォルトの名無しさん:2006/11/20(月) 13:27:10
>>895
void minmax(double *in, int len, double *out_min, double *out_max);
void minmax_(double *in, int len, double *out_min, double *out_max);

void minmax(double *in, int len, double *out_min, double *out_max){
  //ものすごく殺伐としてる関数
  *out_min=-5.0;
  *out_max=100.0;
}

void minmax_(double *in, int len, double *out_min, double *out_max){
  //おまけ
  int i;
  double min, max;
  if(len>=0) min=max=in[0]; else min=max=0;
  for(i=0;i<len;i++){
    if(min>in[i]) min=in[i];
    if(max<in[i]) max=in[i];
  }
  *out_min=min;
  *out_max=max;
}
898デフォルトの名無しさん:2006/11/20(月) 13:35:43
>>896
Forbidden
問題文が読めないよ
899デフォルトの名無しさん:2006/11/20(月) 13:39:39
>>898
大学でログインしないと見れないのかも。
問題は

「double a[]={1.5, 3.3, 6.7, 0.2, 2.9, -1};
のような正の実数の配列が与えられているとします。但し、最後の "-1"はデータの終りを意味している特別な値(番兵)であるとします。
バブルソートについて調べて、上のような任意長の配列の要素をバブルソートを用いて昇順に並べるプログラムを書け。 」

で全文です。
900デフォルトの名無しさん:2006/11/20(月) 13:43:46
>>897
・lenが0のときに破綻する。
・lenが1以上を仮定していいなら、forループの初期値は1でいい。
901デフォルトの名無しさん:2006/11/20(月) 13:46:15
[1] 授業単元: 画像処理
[2] 問題文(含コード&リンク):フラクタル次元の算出(ボックスカウンティング法)
[3] 環境
 [3.1] OS: (WindowsXP
 [3.2] gcc 3.4 VC 6.0
 [3.3] 言語: どちらでも可
[4] 期限: 2006年11月25日12:00まで
お願いいたします。
902デフォルトの名無しさん:2006/11/20(月) 13:47:16
>>899
#include <stdio.h>
int main(void)
{
double a[]={1.5, 3.3, 6.7, 0.2, 2.9, -1}, t;
int i, j, n;

for (n = 0; n < sizeof(a) / sizeof(a[0]); n++)
if (a[n] == -1) break;

for (i = 0; i < n - 1; i++)
for (j = n - 1; j > i; j--)
if (a[j] < a[j - 1])
t = a[j], a[j] = a[j - 1], a[j - 1] = t;

for (i = 0; i < n; i++)
printf("%f ", a[i]);
putchar('\n');

return 0;
}
903デフォルトの名無しさん:2006/11/20(月) 13:48:39
>>900
> ・lenが0のときに破綻する。
あー
if(len>=0)じゃなくてif(len>=1)だね

> ・lenが1以上を仮定していいなら、forループの初期値は1でいい。 
('A`)
904デフォルトの名無しさん:2006/11/20(月) 14:03:05
[1] 授業単元: 卒研の授業の課題
[2] 問題文:
三次元self-aboidingウォークのプログラム
self-aboidingウォークとはランダムウォークしてるときに
一度通った道を通らないもの。
格子状でお願いします(上下左右の運動)
[3] 環境
 [3.1] OS: WindowsXP
 [3.3] 言語: C言語
[4] 期限: なるべく早めでお願いします
[5] その他の制限: cygwinを使います。gnuplotで表示させます

どなたかお願いします。。
905デフォルトの名無しさん:2006/11/20(月) 14:07:49
>>904
マルチポストは死んでね
906デフォルトの名無しさん:2006/11/20(月) 14:15:58
>>902
無事起動できました。
本当にありがとうございます。
907デフォルトの名無しさん:2006/11/20(月) 14:35:57
[1] 授業単元: C言語
[2] 問題文:
簡単なコンパイラをつくれ(字句解析、構文解析)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3004.txt
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] VC++2005ExpressEdition
 [3.3] 言語: C言語
[4] 期限: 今月中です
[5] その他の制限: linuxの元ではcc ファイル.c ファイル.c〜〜で実行したのですが VC++2005ExpressEditionでのリンク処理?
 プロジェクトなどが分かりません。いちお.cと.hは作ってあるのでVCでの設定や実行の仕方を教えてもらえるとうれしいです。
908デフォルトの名無しさん:2006/11/20(月) 15:48:47
typedefはカタカナでなんと読みますか?
909デフォルトの名無しさん:2006/11/20(月) 15:51:13
トゥーペデフィ
910デフォルトの名無しさん:2006/11/20(月) 15:56:33
>>903
>>・lenが1以上を仮定していいなら、forループの初期値は1でいい。
つーか、lenが0の時に最大値最小値を0にしていいかどうかって問題だね。
911デフォルトの名無しさん:2006/11/20(月) 15:57:21
>>908
ティーワイピーイーディーイーエフ
912デフォルトの名無しさん:2006/11/20(月) 16:31:51
>>901
評価画像と数値くらい出せ
913デフォルトの名無しさん:2006/11/20(月) 16:39:39
[1] 授業単元:プログラム演習
[2] 問題文(含コード&リンク):ファイルをよみこんで、そのファイルのワードカウントせよ。
 [3.1] OS:Windows XP
 [3.2] コンパイラ名とバージョン:VC
 [3.3] 言語: C
[4] 期限:今日の18時までにお願いします。

[5] その他の制限:
914デフォルトの名無しさん:2006/11/20(月) 16:48:37
>>913
これはひどい
915デフォルトの名無しさん:2006/11/20(月) 16:52:35
#include <stdio.h>

int main(){
FILE* fp;
int size;
fp = fopen("file", "rb");
fseek(fp, 0, SEEK_END);
size = ftell(fp);
fclose(fp);

printf("ファイルサイズは %d byte", size);
}
916デフォルトの名無しさん:2006/11/20(月) 16:53:19
return忘れたがまあいいか
917デフォルトの名無しさん:2006/11/20(月) 17:24:35
整数型変数nの値を1から25まで1ずつ変化させて、nの2乗、1/n,
nの平方根、nの立方根を求めよ。
よろしくおながいしまつ
918デフォルトの名無しさん:2006/11/20(月) 17:34:21
>>917
# include <stdio.h>
# include <math.h>

int main(void)
{
  int i;
  for(i = 1; i <=25; i++)
    printf("n = %d, nの2乗 = %d, 1/n = %f, nの平方根 = %f, nの立方根 = %f\n",
      i, i * i, 1. / i, sqrt(i), pow(i, 1. / 3));
  return 0;
}
919デフォルトの名無しさん:2006/11/20(月) 17:55:42
動かぬ…
920デフォルトの名無しさん:2006/11/20(月) 17:57:07
[1] 授業単元:データ構造とアルゴリズム
[2] 問題文 この状態だと逆順印字になってしまうので、正順印字にできるように書き換える
 [3.1] OS:rinux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C
[4] 期限:明日午後3時
921デフォルトの名無しさん:2006/11/20(月) 17:57:50
#include<stdio.h>
#include<stdlib.h>
typedef struct Node_template{
int number;
struct Node_template *next;
}node;
node *start = NULL;
int push(int date){
node *ptr = start;
start = (node *)malloc(sizeof(node));
if(start == NULL){
fprintf8stderr,"Nomore memory");
exit(1);
}
start->number = date;
start->next =ptr;[
return(EXIT_SUCCESS);
}
922921の続き:2006/11/20(月) 17:58:45
int main(void){
int input_date;
int i;
node *p;
while(fprintf(stdout,"\n Enter an integar")
,scanf("%d",&input_date) == 1
){
push(input_date);
}
fprintf(stdout,"\nMemory image\n");
i = 0;
for(p = start;p != NULL;p = p->next){
fprintf(stdout,"[%3d] = %5d\n",i,p->number);
i=i+1;
}
return(EXIT_SUCCESS);
}
923デフォルトの名無しさん:2006/11/20(月) 19:27:51
聞いたことの無いOSだな
924デフォルトの名無しさん:2006/11/20(月) 19:45:53
知らないのかよ
遅れてるな
925デフォルトの名無しさん:2006/11/20(月) 20:08:09
これ?
http://uncyclopedia.org/wiki/Rinux

node *start = NULL;
node *last = NULL;

int push(int date){
  node *ptr = (node *)malloc(sizeof(node));
  if(ptr == NULL){
    fprintf(stderr,"Nomore memory");
    exit(1);
  }
  if(start==NULL)
    start = ptr;
  ptr->number = date;
  ptr->next = NULL;
  if(last!=NULL)
    last->next = ptr;
  last = ptr;
  return(EXIT_SUCCESS);
}
926デフォルトの名無しさん:2006/11/20(月) 20:33:57
rinuxってスレイヤーズでつか?
927デフォルトの名無しさん:2006/11/20(月) 22:42:42
[1] 授業単元: 情報処理
[2] 問題文:整数型変数nの値を1から25まで1ずつ変化させて、nの2乗、1/n、nの平方根、nの立方根を求めて以下のような
       数表を作成させるプログラムを完成させよ

n n*n 1/n sqrt(n) n^(1/3)
1 1.00000 1.00000 1.00000 1.00000
2 4.00000 0.50000 1.41421 1.25992
3 9.00000 0.33333 1.73205 1.44225
4 16.00000 0.25000 2.00000 1.58740
長いので途中は略・・・・本当は4 5 6 7 8 ・・・・と続いてます
23 529.00000 0.04348 4.79583 2.84387
24 576.00000 0.04167 4.89868 2.88450
25 625.00000 0.04000 5.00000 2.92402



[3] 環境
 [3.1] OS: (Windows/Linux/等々) Windows
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) Microsoft Visual C++ 2005
 [3.3] 言語: C++
[4] 期限: 今日中に・・・
[5] その他の制限:


どうにかおながいします。
928デフォルトの名無しさん:2006/11/20(月) 22:45:54
>>927
>>918 を改造すべし
929927:2006/11/20(月) 22:50:38
おぉΣ(゚Д゚;

まったく同じだ・・・・・
同胞がいたのねww

928さん、ありがとうございます!!
930デフォルトの名無しさん:2006/11/20(月) 23:22:51
>>927
問題の意図はとりあえずCの関数を「自分で」調べてもらうことと
forの回し方と出力に慣れる事、発展として数値計算に興味を持ってチャレンジする
学生が出てこないかなぁなんて夢見てとりあえずだしてみた講師の思いは
このスレで無残に切り捨てられるわけか、南無。
931デフォルトの名無しさん:2006/11/20(月) 23:30:29
まぁいいじゃないの。
若手が育たなければ、我々年寄りが職を失わずに済むわけだから。
932デフォルトの名無しさん:2006/11/20(月) 23:32:22
>>931
若手が働かなくちゃ
年金はさらに遠のく
933デフォルトの名無しさん:2006/11/20(月) 23:32:58
[1] 授業単元:関数
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3006.txt
[3] 環境
 [3.1] OS:UNIX
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:明日の正午まで
[5] その他の制限:配列、乱数、文字列の処理は習いました。構造体とポインタはまだ習っていません

よろしくお願いしますm(_ _)m
934デフォルトの名無しさん:2006/11/20(月) 23:33:53
助かりました、ありがとうございました!
935デフォルトの名無しさん:2006/11/20(月) 23:36:33
>>927

#include<stdio.h>
#include<math.h>

int main()
{
int i,n;
printf("n n*n 1/n sqrt(n) n^(1/3)\n");
for (i=1;i<=25;i++){
printf("%d %1.5f %1.5f %1.5f %1.5f",i,n*n,sqrt(n),pow(n,1/3));
}
}
936927:2006/11/20(月) 23:48:42
ありがとうございます!
935をMicrosoft Visual C++ 2005 Express Editionを使用して実行してみましたが、
「オーバーロード関数の呼び出しを解決することができません。」
と出て実行できないのですが・・・・。

本当に、何もわからなくてすみません。
937デフォルトの名無しさん:2006/11/20(月) 23:56:07
>>933
シャッフルその1
for(i=52; i>0; i--) {
 j = rand() % i;
 temp = deck[j];
 for(;j<51;j++) deck[j] = deck[j+1];
 deck[51] = temp;
}

シャッフルその2
for(i=0; i<10000; i++) {
 a = rand() % 52;
 b = rand() % 52;
 temp = deck[a];
 deck[a] = deck[b];
 deck[b] = temp;
}
938デフォルトの名無しさん:2006/11/20(月) 23:58:22
>>936
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
939927:2006/11/21(火) 00:01:15
わかりました。

発生した行: printf("%d %15.5f %15.5f %15.5f %15.5f",i,n*n,1/n,sqrt(n),pow(n,1/3));

以下エラー内容

1>..\..\..\DATA\01.cpp(10) : error C2668: 'sqrt' : オーバーロード関数の呼び出しを解決することができません。(新機能 ; ヘルプを参照)
1> C:\Program Files\Microsoft Visual Studio 8\VC\include\math.h(581): 'long double sqrt(long double)' の可能性があります。
1> C:\Program Files\Microsoft Visual Studio 8\VC\include\math.h(533): または 'float sqrt(float)'
1> C:\Program Files\Microsoft Visual Studio 8\VC\include\math.h(128): または 'double sqrt(double)'
1> 引数リスト '(int)' を一致させようとしているとき
1>..\..\..\DATA\01.cpp(10) : error C2668: 'pow' : オーバーロード関数の呼び出しを解決することができません。(新機能 ; ヘルプを参照)
1> C:\Program Files\Microsoft Visual Studio 8\VC\include\math.h(575): 'long double pow(long double,int)' の可能性があります。
1> C:\Program Files\Microsoft Visual Studio 8\VC\include\math.h(527): または 'float pow(float,int)'
1> C:\Program Files\Microsoft Visual Studio 8\VC\include\math.h(489): または 'double pow(double,int)'
1> 引数リスト '(int, int)' を一致させようとしているとき
1>ビルドログは "file://d:\VC\Projects\ex\ex\Debug\BuildLog.htm" に保存されました。
1>ex - エラー 2、警告 0
========== ビルド: 0 正常終了、1 失敗、0 更新、0 スキップ ==========


以上です。よろしくお願いします
940927:2006/11/21(火) 00:04:59
訂正です。。。

発生した行: printf("%d %1.5f %1.5f %1.5f %1.5f",i,n*n,1/n,sqrt(n),pow(n,1/3));

でした
941デフォルトの名無しさん:2006/11/21(火) 00:07:46
>>939
printf("%d %15.5f %15.5f %15.5f %15.5f",i,n*n,1/n,sqrt((double)n),pow((double)n,1/3));
でなんとかならんか
942デフォルトの名無しさん:2006/11/21(火) 00:09:39
>>935のnって何に使ってるんだ?
943デフォルトの名無しさん:2006/11/21(火) 00:09:42
>>901
ボックスカウンティング法だと細線化が必要ですね。
読み込む画像に細線化を施して・・・
あとは本読んでみてください。
944927:2006/11/21(火) 00:12:47
941さん

エラーなく実行できましたが、プログラムが強制終了されて以下のような
メッセージが出ました。。。。

/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-

n n*n 1/n sqrt(n) n^(1/3)

ハンドルされていない例外: System.DivideByZeroException: 0 で除算しようとしました

場所 main() 場所 d:\vc\data\01.cpp:行 10
続行するには何かキーを押してください . . .

-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-
945デフォルトの名無しさん:2006/11/21(火) 00:12:58
>>939
VC8でやってみた。プログラムミスだね。こちらでやって
#include <stdio.h>
#include <math.h>

int main()
{
int i;
double n;
printf("n n*n 1/n sqrt(n) n^(1/3)\n");
for (i = 1; i <= 25; i++) {
n = i;
printf("%d %1.5f %1.5f %1.5f\n", i, n * n, sqrt(n), pow(n, 1./3.));
}
}
946デフォルトの名無しさん:2006/11/21(火) 00:16:19
>>945
1/nが消えてるぞ
947927:2006/11/21(火) 00:16:33
>>945さん
ありがとうございます!
無事に実行できました。感激です。
いろいろとアドバイスをしてくださった皆さん、ありがとうございました。
また何かありましたらよろしくです。
948927:2006/11/21(火) 00:18:06
あ、1/nは自分で追加しました。
949941:2006/11/21(火) 00:18:30
>>944
1/3は0になっちゃうのを忘れてた。1.0/3にしてみれ。
950デフォルトの名無しさん:2006/11/21(火) 00:19:40
#include <stdio.h>
#include <math.h>

int main(void)
{
int i;
double n;
printf("n\t\tn*n\t\t1/n\t\tsqrt(n)\t\tn^(1/3)\n");
for (i = 1; i <= 25; i++) {
n = i;
printf("%d %15.5f %15.5f %15.5f %15.5f\n", i, n * n, 1 / n, sqrt(n), pow(n, 1./3.));
}
}
951デフォルトの名無しさん:2006/11/21(火) 00:24:42
[1] プログラミング
[2] 配列 (の先頭アドレス) a とそのサイズ n を受け取り, 要素を逆順に並び換える
(a[0]=1, a[1]=9, a[2]=2, a[3]=6 を a[0]=6, a[1]=2, a[2]=9, a[3]=1 にする) 関数 array_reverse(int *a, int n) を作成せよ
[3]
 [3.1] winXP sp2
 [3.2] cygwin
 [3.3] C
[4] 2006年11月30日
[5] forを使ってできるだけ簡単なのがほしいです。関数だけでいいです。
自分で考えた時間は3時間ですが作れません。
952デフォルトの名無しさん:2006/11/21(火) 00:28:05
簡単な問題になんつ〜粗悪な回答プログラムの乱載。
ちっとは推敲しておくれ。
953927:2006/11/21(火) 00:30:53
>>944
参考書を確認していたら載ってました。ありがとうございます。

>>950さんので実行してみたらきれいに整列しました
ありがとうございます!
954デフォルトの名無しさん:2006/11/21(火) 00:33:30
>>951
void reverse_array(int *a, int n)
{
 int i, temp;
 for(i=0; i<n/2; i++) {
  temp = a[i];
  a[i] = a[n-1-i];
  a[n-1-i] = a[i];
 }
}
955デフォルトの名無しさん:2006/11/21(火) 00:34:08
>>952
粗悪な方がコピーしたと疑われなくてちょうどいいと思うがどうだろうかw
956ミスった:2006/11/21(火) 00:34:41
a[n-1-i] = a[i]; →a[n-1-i] = temp;
957デフォルトの名無しさん:2006/11/21(火) 00:36:15
orz 書き終えてさぁ貼ろうとリロードしたらすでに回答されてる・・・
こんな夜遅くまで何をやってるんだろうか私は・・・
958デフォルトの名無しさん :2006/11/21(火) 00:38:11
array_reverse(int *a, int n)
{
int i = 0;
int temp = 0;
for(i = 0; i < (n-1)/2; i++)
{
temp = a[i];
a[i] = a[n-i-1];
a[n-i-1] = temp;
}
}
959デフォルトの名無しさん:2006/11/21(火) 00:43:20
>>958
それだとnが偶数のときおかしくない?
例えばn=4のとき(n-1)/2は1になりa[1]とa[2]が交換されない。
960951:2006/11/21(火) 00:47:49
>>954さん+>>95
全角のスペースが含まれていたので除去したら
なんかへんなエラーでました。
家のコンパイラではなぜかコピーできないんですけど
underfined reference to '_array_reverse'とかなんとか

>>958さん
>>959さんの言うように、
{2,3,4,5,}の逆が{5,3,4,2}になったりします
961951:2006/11/21(火) 00:49:33
>>95でなくて>>956でした。

そこらへんのサイトで調べてきたやつも入れてみたり
いろいろ試してみるんですがどれも上手くいかないです。
まさか関数以外の部分が間違ってたりするんでしょうか。
この関数無しだと正常にそのままの数値で返ってくるプログラムになるのですが
962958:2006/11/21(火) 00:50:53
はい、すいません間違えました
963デフォルトの名無しさん:2006/11/21(火) 00:50:55
>>960
958がコピペで通ってるなら(n-1)/2のとこだけn/2にすればいいだろ
964958:2006/11/21(火) 00:53:25
<=にでもしといてください
965デフォルトの名無しさん:2006/11/21(火) 00:55:52
n/2の切捨てしたものを変数に入れる部分作って
for文の終了条件に入れときゃいいよ。
それだけのこと
966デフォルトの名無しさん:2006/11/21(火) 00:57:09
奇数の時は真ん中の入れ替え必要ないからn/2で切り捨てられてもなんの問題もないんだよ。
967デフォルトの名無しさん:2006/11/21(火) 00:57:35
実行速度に問題がないなら最適化はコンパイラに任せたほうがいいよ
968951:2006/11/21(火) 00:59:16
>>963>>964
解決しました。ありがとうございます。
できるだけ自力でやろうと思ってたんですが無理でした。
969デフォルトの名無しさん:2006/11/21(火) 01:02:21
わかんないのは別に良いけど紙に書いたら
小学生の算数レベルの簡単な話ですよ。
もう少し勉強したってください。
970951:2006/11/21(火) 01:06:11
>>969
n/2とかが全然思いつきませんでした><
971デフォルトの名無しさん:2006/11/21(火) 01:09:32
そう言うだろうと思って>>965書いといた。
いきなりうまくやろうとするよりまずは動くプログラム作って
それから改良しとき、うちはもう寝るわぁ。
972デフォルトの名無しさん:2006/11/21(火) 01:10:58
ありがとうございました。
973デフォルトの名無しさん:2006/11/21(火) 09:45:37
[1] 授業単元: プログラミング

[2]
以下のような3つのペアの実数をファイルに書き、
それらのペアを配列を使って読んで、
それぞれの四則演算を別のファイルに書き出しなさい。

5.0 3.0
2.5 1.0
4.0 1.5


[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: emacs
 [3.3] 言語: C

[4] 期限: 2006年11月21日14時まで
974デフォルトの名無しさん:2006/11/21(火) 10:22:05
マルチしまくる奴って2chしか頼るとこねーのかよと思うwwwwww
975デフォルトの名無しさん:2006/11/21(火) 10:24:54
今日貼る時点で終わってるし…
976デフォルトの名無しさん:2006/11/21(火) 11:17:12
973は質問の意味がわからない
977デフォルトの名無しさん:2006/11/21(火) 11:46:15
[1] 授業単元:プログラミングT
[2] 問題文(含コード&リンク):
   キーボードからa,b,c,の値を入力し、二次方程式 ax2+bx+c=0
平方根を求め、下記のように表示するプログラムを作りなさい。
但し、while文を用いて繰り返し計算ができるようにすること。
終了はaに0が入力されたときとする。
例:2実根の時 : 2実根 :x=1,2,3,4x2=-2,3,4
  重根の時 : 重根 :x=3,2,1
  複素根の時: 複素根:x1,x2=1,2±j3.4
※ルートは数学処理の#include <math.h> とsqrt(値)を使用する。

[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン: Microsoft Visual Studio 2005
 [3.3] 言語:C++
[4] 期限: 2006年11月23日19:00まで
[5] その他の制限:
for構文、if構文、while構文のみ習っています。

申し訳ありませんが、インデント付でお願いします。
978デフォルトの名無しさん:2006/11/21(火) 12:03:55
>>977
>申し訳ありませんが、インデント付でお願いします。
まず自分でやってみよう!
979デフォルトの名無しさん:2006/11/21(火) 12:07:41
>>977
あぁ?おめーらいい加減にしとけやコラァ!
図書館で算数の教科書見て自分で解けやバカが。
それとも高校レベルの数学も出来ないバカなんですか?
なら退学しろクズが
980デフォルトの名無しさん:2006/11/21(火) 12:15:42
まてまて、高校生かも知れないだろ
981デフォルトの名無しさん:2006/11/21(火) 12:24:59 BE:284013465-2BP(12)
C/C++の宿題を片付けます 77代目
http://pc8.2ch.net/test/read.cgi/tech/1164079451/

次スレ立てました
982デフォルトの名無しさん:2006/11/21(火) 12:55:32
今ひとつ977の例の意味がわからないのは俺だけだろうか
983デフォルトの名無しさん:2006/11/21(火) 13:00:29
大丈夫、漏れもだ。
984デフォルトの名無しさん:2006/11/21(火) 13:09:41
[1]単元名: 計算機演習
[2] 課題:整数nが与えられたとき、n×nのサイズで螺旋状に0から(n二乗ー1)までの数が並ぶ行列を作成し、
画面に表示させるプログラムを作成しなさい。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ:gcc
 [3.3] 言語:C
[4] 期限:11月24日(金)12:00厳守
[5] その他の制限: ポインタ、データ構造までは習っています。

宜しくお願い致します。
985デフォルトの名無しさん:2006/11/21(火) 13:10:01
俺もよく判らんけど、
多分、二次方程式作って、その解を求めるだけくね?
986デフォルトの名無しさん:2006/11/21(火) 13:12:30
>>984
螺旋状がよく判らない。
計算結果の例を載せるがよろし。
987977:2006/11/21(火) 13:12:52
ごめんなさい。高校生です。
皆さんにご迷惑をおかけし、申し訳ありません。
言われるようにまだ、自分で考えてみたいと思います。
988デフォルトの名無しさん:2006/11/21(火) 13:13:41
#include<stdio.h>
#include<math.h>
int main(){float a,b,c,d;while(1){printf("a b c:");scanf("%f %f %f",&a,&b,&c);if(a==0)return 0;d=b*b-4*a*c;
if(d>0)printf("2実根:%f,%f\n",(-b+sqrt(d))/(2*a),(-b-sqrt(d))/(2*a));
else if(d==0)printf("重根:%f\n",-b/(2*a));
else printf("複素根:%f±%fi\n",-b/(2*a),sqrt(-d)/(2*a));}}
申し訳ありませんが、検算とインデントは自分でお願いします。



正直、よく判らんかった
989デフォルトの名無しさん:2006/11/21(火) 13:16:50
誰か過去の宿題検索作ってくれないか?
990デフォルトの名無しさん:2006/11/21(火) 13:17:58
言い出しっぺがやるべきなんだよ?
991デフォルトの名無しさん:2006/11/21(火) 13:18:26
複素のとこ実部と虚部に分けれ
ネットにいくらでもあるし、解説してるサイトが。
それでもわからないなら高校ヤメレ

螺旋?
*
*
*
*
*
*
*
*
*
*
こういうのか。
こんな出力だけの問題じぶんでやれよ
992デフォルトの名無しさん:2006/11/21(火) 13:21:20
なんだよ、変な表示になったしまあいいや。
993984:2006/11/21(火) 13:23:09
>>986

例えばキーボードから5を読み込ませると(n=5にすると)
0 1 2 3 4
15 16 17 18 5
14 23 24 19 6
13 22 21 20 7
12 11 10 9 8

という感じになります。
994デフォルトの名無しさん:2006/11/21(火) 13:26:22
入力だろうが、埋め
995デフォルトの名無しさん:2006/11/21(火) 13:29:07
>>984
このスレくらい検索しろハゲ
996デフォルトの名無しさん:2006/11/21(火) 13:29:18
>>993
さっぱりわかんね

おれ
もう
だめ?
997デフォルトの名無しさん:2006/11/21(火) 13:35:55
ジエンド
998デフォルトの名無しさん:2006/11/21(火) 13:38:52
おまえ
んだは
しうも


999デフォルトの名無しさん:2006/11/21(火) 13:39:27
埋めついでに

>>977
なんで2実根の時のxとx2の数が違うのかとか
2実根の時はxとx2なのに複素根の時はx1とx2なのかとか
1000デフォルトの名無しさん:2006/11/21(火) 13:41:43
埋め
みんな自力で頑張ろうな
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。