3 :
デフォルトの名無しさん:01/12/09 22:01
Cでクエスチョン
int a=1;
a=a+-+a;
aの値は、環境依存?
4 :
デフォルトの名無しさん:01/12/09 22:10
a = a + (-(+a));
別に環境依存でもないんじゃ?
0 (VC6)
6 :
デフォルトの名無しさん:01/12/09 22:11
% gcc -v
Reading specs from /usr/local/gnu/lib/gcc-lib/sparc-sun-solaris2.8/2.95.2/specs
gcc version 2.95.2 19991024 (release)
0
o(^0^)/
怜ちゃんごくろーサマンサ
>>3 うーんとね、
単項の+,-は二項形高い優先順位を持つのね。で、右から左に結合するの。
だから、a=a+-+aっていうのは
→a=a+-(+a)→a=a+(-(+a)) っていうふうに解釈される。
だから、
>>4さんが言ってくれてるように、環境依存ではないと思うよ。
あら、書き間違えてしまったみたい。
>二項形高い優先順位
「二項形式より高い優先順位」ね。二項形式っていうのはa+bみたいなやつ。
単項は-aとかいう感じのね。
麻衣よりお姉さんだな。
>>前スレのハンターの話の生徒さん
その仕様って獲物クラスについてだけだよね?
ゲームを管理するクラスとか、ハンタークラスについて
スケルトンはもらってない?
メソッドについてはいくらでも追加していいと思うよ。
でも一応privateで宣言しようね。
新スレだ〜
デバッグは一応終わりました…
ダミークラスつくるのはちょっと方針上あきらめました。
コンパイルが通ったやつです。
↓
import java.util.*;
public class Game{
private int N; /* nxn の正方格子の定義 */
private int x,y; /* 正方格子のX座標 Y座標 */
private int see; /* 見える範囲のマス数 */
/* 5方向の箱を作ります */
int[] mode_dir=new int[5];
/* ハンターを監視するための箱を作ります */
int[][][] Hunt=new int[N+2][N+2][3];
Hunter[] h=new Hunter[3];
/** Game クラスのコンストラクター
@param i 獲物のx座標
@param j 獲物のy座標
*/
public Game(int i,int j,int n){
x = i;
y = j;
N = n;
for(int e = 0;e <= 4;e++){
mode_dir[e] = e;
}
for(int a = 0;a <= N+1;a++){
for(int b = 0;b <= N+1;b++){
for(int c = 0;c <= 2;c++){
Hunt[a][b][c] = 0;
}
}
}
}
/** nxn の正方格子数を設定します
@param n nxn の正方格子数
*/
public void setN(int n){
N = n;
}
/** 正方格子を設定します。
@param x 正方格子のX方向
@param y 正方格子のY方向
*/
public void setXY(int i,int j){
x = i;
y = j;
}
/** 見える範囲のマス数を設定します
@param see 見える範囲のマス数
*/
public void setSee(int s){
see = s;
}
/** X座標を取得します
@return X座標
*/
public int getX(){
return x;
}
/** Y座標を取得します
@return Y座標
*/
public int getY(){
return y;
}
/** 獲物の行動を決定します
@param h1,h2,h3 ハンターの位置情報
*/
/* ハンターの位置情報を箱に確保します */
/* 視界の中にハンターがいればフラグを立てます */
public void escapeGame(Hunter h1,Hunter h2,Hunter h3){
h[0] = h1;
h[1] = h2;
h[2] = h3;
int flag;
flag = 0; /* フラグの有無 */
for(int a = 0;a <= N+1;a++){
for(int b = 0;b <= N+1;b++){
for(int c = 0;c <= 2;c++){
if((0 < (x - h[c].getX())) && ((x - h[c].getX()) <= ((see-1)/2)) && (y == h[c].getY())){
Hunt[a][b][c] = h[c].getX() - x;
flag += 1;
}else if((0 < (y - h[c].getY())) && ((y - h[c].getY()) <= ((see-1)/2)) && (x == h[c].getX())){
Hunt[a][b][c] = h[c].getY() - y;
flag += 1;
}else if((0 < (h[c].getX() - x)) && ((h[c].getX() - x) <= ((see-1)/2)) && (y == h[c].getY())){
Hunt[a][b][c] = h[c].getX() - x;
flag += 1;
}else if((0 < (h[c].getY() - y)) && ((h[c].getY() - y) <= ((see-1)/2)) && (x == h[c].getX())){
Hunt[a][b][c] = h[c].getY() - y;
flag += 1;
}
}
}
}
/* ハンターが獲物の視界内にいればフラグを立てる */
/* 壁があります */
/* 壁がない方向の箱を拾って壁がある方向の箱は控除します */
if(x == 1){
mode_dir[0] = 5;
/* これ以上上に行けません(上への進路無効化)*/
}else if(y == 1){
mode_dir[1] = 5;
/* これ以上左に行けません(左への進路無効化)*/
}else if(x == N){
mode_dir[2] = 5;
/* これ以上下に行けません(下への進路無効化)*/
}else if(y == N){
mode_dir[3] = 5;
/* これ以上右に行けません(右への進路無効化)*/
}else{}
/* ハンターの位置が視界内・視界外の判定をします */
if(flag == 0){
for(int g = 0;g <= 100;g++){
int modeA;
int modeB;
int modeC;
modeA = (int)(Math.random() * 5 );
modeB = (int)(Math.random() * 5 );
modeC = mode_dir[modeA];
mode_dir[modeA] = mode_dir[modeB];
mode_dir[modeB] = modeC;
/* mode_dirの内容をシャッフルすることで入れ替えます */
}
}
else if(flag == 1){
for (int c = 0;c <= 2;c++){
if(Hunt[h[c].getX()][y][c] <= 1){
mode_dir[0]= 5;
}else if(Hunt[x][h[c].getY()][c] <= 1){
mode_dir[1]= 5;
}else if(Hunt[h[c].getX()][y][c] >= 1){
mode_dir[2]= 5;
}else if(Hunt[x][h[c].getY()][c] >= 1){
mode_dir[3]= 5;
}else{}
}
/* 〜ハンターがいない方向をランダムに選びそちらへ進みます*/
/* 視界にハンターがいますが近いハンターから遠ざかる方に動きます */
/* 移動可能な方向に限定してランダムに動きます */
}else if(flag >= 2 ){
for (int c = 0;c <= 2;c++){
if(Hunt[h[c].getX()][y][c] <= 2){
mode_dir[0] = 0;
}else if(Hunt[x][h[c].getY()][c] <= 2){
mode_dir[1] = 1;
}else if(Hunt[h[c].getX()][y][c] >= 2){
mode_dir[2] = 2;
}else if(Hunt[x][h[c].getY()][c] >= 2){
mode_dir[3] = 3;
}else {
mode_dir[4] = 4;
}
}
}
/* 塞がれて動けなければその場にとどまります */
if(mode_dir[0] == 5
&& mode_dir[1] == 5
&& mode_dir[2] == 5
&& mode_dir[3] == 5){
mode_dir[4] = 4;
}
/* 3. 獲物の行動を決定します */
private int p = 0;
private int r = 0;
private boolean breakflag = true;
do{
r = (int)(Math.random()*100);
p = (r)%5;
switch(mode_dir[p]){
case 0:/* 上に動く */
y -= 1;
breakflag = false;
break;
case 1:/* 左に動く */
x -= 1;
breakflag = false;
break;
case 2:/* 下に動く */
y += 1;
breakflag = false;
break;
case 3:/* 右に動く */
x += 1;
breakflag = false;
break;
case 4:/* その場にとどまる */
breakflag = false;
break;
case 5:/* 抽選しなおす */
p++;
break;
}
}while(breakflag);
}
}
以上です。
こっからやっといろいろいじくれます…
まだコンパイルが通っただけですが…。
コンパイルエラーはなくなったのね。
ここからが本当のデバッグの開始だからがんばっていこうね。
まず、mode_dirとHuntをコンストラクタの中で初期化してるけど、
これは、escapeGameを呼び出すたびに初期化する必要があるのよね。
まず、そこは直さないとね。
Hunt[a][b][c] = h[c].getX() - x;
ってやってるから、Hunt[a][b][c]にはマイナスが入ることもあるわよね?
だから、flag == 1のときに、
if(Hunt[h[c].getX()][y][c] <= 1){
}else if(Hunt[h[c].getX()][y][c] >= 1){
みたいな、判定をするのは、何か違う気がするの。0より大きい、もしくは小さい
でいいんじゃないの?
それにマイナスになる事考えると、
flag >= 2のときの、
if(Hunt[h[c].getX()][y][c] <= 2){
とかいうのも明らかにおかしいのよね。
Math.abs(x)とやれば、xの絶対値が得られるからこれも上手く利用するといいか
も。
まあ、とりあえず目についたのはこれくらいかな。
これくらいといっても、基本的な部分で問題があるから、修正すると他にも色々
間違えそうだけど。
プログラムなんて、デバッグをどれだけ頑張れるかで力がついていくものだから、
頑張ってね。
mode_dir , Hunt は
escapeGame の中で初期化させろということですか?
移動すればいいんですよね?了解です。
マイナスをつけているのは左←→右にいる、上←→下にいる、っていうのを
1回でわかるようにするためにつけています。
だから距離だけじゃなくて方向も導入した方がいいと思いまして。
ただ、それだと確かに全体で筋が通らないのも事実で…
これをどうしようかと今考えてます。
それと、自分がageるべきなんでしょうか?やっぱ。
flag に private つけるとエラーが出るんですけど…
なんでじゃ〜!!
そうね、質問するときはageてね。
>マイナスをつけているのは左←→右にいる、上←→下にいる、っていうのを
>1回でわかるようにするためにつけています。
その意図はわかるんだけど、だったらまず、flag == 1のとき、
if(Hunt[h[c].getX()][y][c] <= 1)
とかじゃなく、
if(Hunt[h[c].getX()][y][c] < 0)
とかすべきよね、ってこと。
あと、flag == 2のときも、
if(Hunt[h[c].getX()][y][c] <= 2){
じゃなくて、
if(Hunt[h[c].getX()][y][c] <= -2){
とか。
あと、publicとかprivateとかつけるのはクラスのメンバ変数(クラスのメソッド
の外で定義されて、クラス全体で使う変数のことね)だけで、メソッドの中で定義
される変数にはつけないものなの。
publicとかprivateとかの意味はわかる?
すんませんです、
>>18 の
private int p = 0;
private int r = 0;
private boolean breakflag = true;
はうそです…
自分がここにコピペする時つけてもいいだろうと思ってたのでつけましたが
コンパイル通すと叱られました…
これらと flag は escapeGame より上のクラスで
private 指定しないといけないものなのですか?
というより、こういうことするのはおせっかいですかね?
25 :
933(生徒):01/12/10 13:46
了解です。ageします。
public や private の意味とかはわかります。
語句の意味は。
だけど、そのプログラム的な扱い方なんかがホントわかってないんです。
言われて「あ、そっか…」と思ってます。
クラスのメンバ変数、っていう考え方があって
その上で「これからクラス内でこの変数を使いますよ〜」っていう宣言は
クラスより上で指定されなければいけないってことですか?
26 :
933(生徒):01/12/10 13:49
今回の
private int p = 0;
private int r = 0;
private boolean breakflag = true;
っていうのは private 外すとひょっとしたら class Game 外の他の値を
参照してしまう危険があるわけですよね?
だけど escapeGame 内で指定するのは間違ってるってことですよね。
えーっとね、そうじゃなくて・・
privateをつけると、クラスの外部から参照される事がなくなるとか、
publicをつけると、クラスの外部からも参照、書き換えができるように
なるとかそういうものなの。
クラス全体で使うものはメソッド(関数)の中ではなくて、
public class ●●{
の直下で、宣言しないといけないのね。
28 :
933(生徒):01/12/10 15:18
メソッドの中でだけ使う、というような考え方自体が
おかしいってことでしょうか?
一応 int p , int r , boolean breakflag , int flag
全て最初のクラスの下に private をつけて宣言しなおして
コンパイル正しました。
p = 0 ; , r = 0 ; , breakflag = true ; , flag = 0 ; は
全てそのままにしてあります。
こういう処理の方がいい、ということですよね?
29 :
933(生徒):01/12/10 15:22
それと main 文を作って
Nの大きさ、seeの範囲、3人のハンター及び獲物の位置情報などを
入力して実際に動作確認をしてみたいのですが、
どの場所に main を置くのが正しいのか
または完全に独立させてメイン文書いたほうがいいのか
よくわかってません。
オブジェクト思考がなんたるかに沿いながら解説していただけると
非常に助かります。
(ホントなんでおれ講義出なかったんだよ…)
30 :
933(生徒):01/12/10 15:30
※ちなみに
int[] mode_dir=new int[5];
int[][][] Hunt=new int[N+2][N+2][3];
Hunter[] h=new Hunter[3];
の前にも private をつけました。
現在の仕様:
↓
private int N; /* nxn の正方格子の定義 */
private int x,y; /* 正方格子のX座標 Y座標 */
private int see; /* 見える範囲のマス数 */
private int flag;
private int p;
private int r;
private boolean breakflag;
private int[] mode_dir=new int[5];
private int[][][] Hunt=new int[N+2][N+2][3];
private Hunter[] h=new Hunter[3];
public Game(int i,int j,int n){
x = i;
y = j;
N = n;
}
public void setN(int n){
N = n;
}
public void setXY(int i,int j){
x = i;
y = j;
}
public void setSee(int s){
see = s;
}
public int getX(){
return x;
}
public int getY(){
return y;
}
31 :
デフォルトの名無しさん:01/12/10 15:53
ひとつ質問。
この933ってのは何人もいるのか?
33 :
933(生徒):01/12/10 16:44
いや、今の所騙りはいませんが…
自分だけです。
>>31
34 :
デフォルトの名無しさん:01/12/10 18:25
35 :
味噌醤油醸造株式会社:01/12/10 18:32
>>34 int C(int n, int r)
{
return C(n-1,r)+C(n,r+1);
}
int main()
{
printf("%d\n", C(-100, -10));
return 0;
}
933君はなかなかの強敵だな。
>>29 テストするならダミークラスをつくらなくちゃ。
少なくとも、Hunterと、ゲーム進行を管理するクラスが必要。
ゲーム管理だからGameManagerとか名前付けたいんだけど、
獲物にGameなんてつけてるからそれじゃ解りにくくなっちゃうわね。
私なら獲物じゃなくて逃亡者(Runaway)とか命名するんだけどなぁ。
とにかくテスト用にこんな風にクラスを作ったらどうかな。
// 933君のGameクラス
class Game{
private int x;
private int y;
public void escapeGame(Hunter h1, Hunter h2, Hunter h3){
x = h1.getX() + h2.getX() + h3.getX();
y = h1.getY() + h2.getY() + h3.getY();
}
// デバッグ用データ出力メソッド
public void debugPrint(){
System.out.println("[Game] x = " + x);
System.out.println("[Game] y = " + y);
}
}
//テスト用Hunter
class Hunter{
private int x;
private int y;
public void setPos(int posx, int posy){
x = posx;
y = posy;
}
public int getX(){return x;}
public int getY(){return y;}
}
//テスト用Main
public class Main{
public static void main(String[] args){
Hunter hunter1 = new Hunter();
Hunter hunter2 = new Hunter();
Hunter hunter3 = new Hunter();
Game game = new Game();
hunter1.setPos(10,10); //hunterの位置をセット
hunter2.setPos(20,20); //hunterの位置をセット
hunter3.setPos(30,30); //hunterの位置をセット
game.escapeGame(hunter1,hunter2,hunter3);
game.debugPrint(); // escapeGameの結果出力
}
}
これをベースに、必要な処理を付け加えてね。
コンパイル、実行のやりかたはわかるわよね?
それから、ちょっと気になったんだけど。
933君はフィールドとローカル変数の違い、ちゃんと理解してる?
933は、授業中に2chで質問してるのか?
>>35 うそ教えちゃかわいそうよ。
int C(int n, int r)
{
if(r == 0 || r == n) return 1;
return C(n-1, r) + C(n, r-1);
}
int main()
{
printf("%d\n", C(-100, 10));
}
>オブジェクト思考がなんたるかに沿いながら解説していただけると
>非常に助かります。
とりあえず、本当にわかっていないっぽいので、簡単にオブジェクト指向について
説明するわね。ちょっと語弊ある言い方するかもしれないけど、感じをつかむという
意味でね。
オブジェクト指向っていうのは、簡単に言えばプログラムを部品化したいのね。
内部で何をしているかを気にせずに、ある機能を持つプログラムを使いたいと。
この場合獲物のクラスっていうのがあるわよね? この場合、獲物がどのような
事を考えて行動を決めるかっていうのは、ゲームを管理するクラスからは興味ない
の。単にこういう場合にどういう行動したか、その結果が欲しいだけなの。
だから、内部で色々分析するのに使った変数なんて、外部からは見たくないし、
また見せたくないのよね。だから、そういうのは全部privateで宣言するの。
それで、このGameクラスっていうのは、獲物そのものを表現してるのね。だから、
これ単独で使うことはないから、mainはここにはいれないものなの。
実際にどうするかっていうと、多分先生が用意するゲームを管理するクラスで
933クンが作ったGameクラスのインスタンスを作るの。インスタンスっていうのは、
なんていえばいいのかな。まあクラスに実体を持たせたものというか・・うーん。
その辺から説明しないといけないか。
今、獲物を表すクラスを作ったよね。でも、これは獲物の一般的な定義なわけね。
これに対し「獲物A」みたいなの作りたいの。だから、このGameクラスのインスタンス
っていうのを(まあ変数みたいな気分ね)作ることによって、「獲物A」ができるの。
何個もインスタンスを作ることで「獲物B」「獲物C」、とかも作れるわけね。
このときに、大切なのは、このクラスのメンバ変数っていうのは(ここでいうと
例えばNとかxとかy等のクラスの中で定義され、メソッドの外で定義されてるもの)、
「獲物A」「獲物B」「獲物C」それぞれ違う値をもっているの。だから、獲物Aに
逃げろっていえば、獲物Aのxとかyとかの値に従って、escapeGame()を実行すること
になるのよね。で、このメンバ変数っていうのは、「獲物A」とかが無くなるまで
保持されるの。でも、メソッドの中で定義された変数はそのメソッドが実行しおわって
しまうと消えてしまうわけ。
まあ、そのインスタンスを作って、それに「こういう状況だけど逃げろ」って感じ
でゲームを進めていくわけね。
・・・って、説明難しい。とりあえずオブジェクト指向については、少ししっかり書いて
あるページでもみてみてね。
43 :
933(生徒):01/12/11 21:44
長い間席を開けてしまいすいません。
共同制作の友達と大学で夜を明かして完成に至りました。
奇跡のように動くので感動してます。
(プログラムソースは…希望者があれば貼ります)
ここの住人の方々にはスレ消費などの迷惑をかけてしまい申し訳ないです。
以後もまたここでつたない質問などして茶を濁すかもしれません。
オネエさんの説明も今になってようやくわかります。
他にも砕身してくださった方、ありがとうございました。
へ
あへ?
よいしょ
前スレの1000、つまらん終わり方しやがって。
続き聞いてもいいかな?
While使うのはどうやって。。
素人なんでごめんなさい。
49 :
デフォルトの名無しさん:01/12/12 01:30
>>48 比べた後にフラグレジスターを見て条件付きジャンプ命令で飛ぶ。
チューリングマシンでwhileって?
万能機でも作るのか?
51 :
デフォルトの名無しさん:01/12/12 01:33
ごんぎつねの感想文
僕のかわりに書け
52 :
デフォルトの名無しさん:01/12/12 01:36
以前,佐賀県の過疎村にある小学校4年生の「ごんぎつね」の学習で感動を受けたことがある.
4年生はAちゃんという女の子一人しかいない小学校で,彼女は一生懸命ごんぎつねの感想文を書いた.
しかし,悲しいかなそれに答えてくれる同学年の子供は彼女の学校にはいないのである.
Aちゃんの感想文は先生の力によってホームページに載った.
それから暫くして日本中の学校から「感想文の感想」が送られてたのである.
いまでは「絵」あり「まんが」ありのとても充実した学習ページになっている.
彼女は一人ではなかったのである.
もちろんAちゃんの先生がコンピュータができるだけの人でなく,コンピュータの本来の使い方を知っていたということが最大のポイントであることは言うまでもない.
これもコンピュータがあればこそのことである.
乗算だけです
加算のチューリングマシンは
M+=(K2)^2LlTlB こんな感じになってました
>>52はコンピュータの「本来の使い方」なのだろうか?
エーちゃん萌えっ!
56 :
デフォルトの名無しさん:01/12/12 01:47
57 :
デフォルトの名無しさん:01/12/12 01:49
C言語ですが(for文だけで)
「人数を入力してその人数分の成績を入力すると
合計点、平均点、最高点、最低点が表示される
ようにせよ」という問題です。
for文だけじゃむりだなぁ
r 一駒右へ行く l(小文字のL)一駒左へ行くとか
B ヘッドが見ている駒にBを書く
らしいですが・・・
60 :
デフォルトの名無しさん:01/12/12 01:52
すいません、while文を使わずにです。
61 :
デフォルトの名無しさん:01/12/12 01:55
>>60 forでもwhileでもそれだけじゃ無理だ。
○×は禁止。ならともかく。
In article
>>57, デフォルトの名無しさん/57 wrote:
> C言語ですが(for文だけで)
> 「人数を入力してその人数分の成績を入力すると
> 合計点、平均点、最高点、最低点が表示される
> ようにせよ」という問題です。
変な課題出すひとですね。
でもまあ、そんな授業でも、聞いてなくて
こんなところで質問するのはかなりマヌケですが。
63 :
デフォルトの名無しさん:01/12/12 02:03
64 :
デフォルトの名無しさん:01/12/12 02:07
>>57 入力は分かるね。合計点は全部足せば良いし
平均点はそれを人数で割ればよい。
最高点は一番大きい数を更新すればよいし
最低点はその逆だ。何がわからん?
つか、「whileを使うな」という条件がどういう学習目的から来てるのか
小一時間問いつめたい。
むしろ俺なら「whileを禁止する無意味さ」を論文にして回答として提出するね。
#include<stdio.h>
#include<limits.h>
main()
{
int nin,i;
int ten,max=INT_MIN,min=INT_MAX,sum=0;
float avel;
printf("人数いれろ >> ");
scanf("%d",&nin);
printf("---------------\n");
for(i=0;i<nin;i++){
printf("点数いれろ >> ");
scanf("%d",&ten);
if(ten>max) max = ten;
if(ten<min) min = ten;
sum += ten;
}
avel = (float)sum;
avel /= nin;
printf("---------------\n");
printf("合計点%d\n",sum);
printf("平均点%f\n",avel);
printf("最高点%d\n",max);
printf("最低点%d\n",min);
}
In article
>>66, デフォルトの名無しさん/sage/66 wrote:
> #include<stdio.h>
> #include<limits.h>
こうやって書くやつは例の入門書読んだのだろうか? :)
68 :
デフォルトの名無しさん:01/12/12 02:25
eの値を小数点以下100桁まで求めるプログラムと
πの値を小数点以下100桁まで求めるプログラムを教えてください。
(´_ゝ`)
何だお前?
あっちこっちに書くな、鬱陶しいなあ
>>69 丸投げはダメって言ったでしょ?
どこがわからないか言ってごらん。
1.e.πをどうしう式で表していいかわからない。
2.それをどうプログラムで表現していいかわからない。
2の場合、特にどのあたりで困っているか。
100桁っていう、doubleとかで扱えない桁数の処理かな?
72 :
デフォルトの名無しさん:01/12/12 06:49
ファイルから数値を読み取り
バブルで昇順にするのなんですけど
整数のはできたけど小数が入っている場合が
よく分からないので
どこをかえればいいか教えてください。
In article
>>72, デフォルトの名無しさん/72 wrote:
> ファイルから数値を読み取り
> バブルで昇順にするのなんですけど
> 整数のはできたけど小数が入っている場合が
> よく分からないので
> どこをかえればいいか教えてください。
小数が入っているとどうわからないのか、
整数のときはどう書いたのか、が書いてあれば答えてもらえるでしょうね。
74 :
デフォルトの名無しさん:01/12/12 17:37
75 :
デフォルトの名無しさん:01/12/12 17:49
asciiなら、文字列でもらってきて、str[0..len]-='0'すればぁ?
判らないなら、
if(strcmp(str,"00000") == 0) return "0";
if(strcmp(str,"00001") == 0) return "1";
if(strcmp(str,"00010") == 0) return "2";
とか並べればぁ?
>>76 変換方法はわかってるって言ってるじゃん。
78 :
デフォルトの名無しさん:01/12/12 19:11
my $message;
my $message2;
my $msg;
$message = param('input');
$message2 = param('input2');
$substract = 2001-$message2;
if($substract>1981)
{
$msg="20以下は駄目";
}
ここまでなんとかやったんですけど
40以下は、駄目って表示したい場合、どうやればいいんですか?
andみたいな奴ってあります?
>>78 my $message;
my $message2;
my $msg;
$message = param('input');
$message2 = param('input2');
$substract = 2001-$message2;
if($substract>1981)
{
$msg="40以下は駄目";
}
#include <stdio.h>
main()
{
int a,b;
printf("やす君:消費税を計算できるもてもてやす君16歳だべ。\n");
printf("やす君:商品は何円っスか。\n");
scanf("%d",&a);
b=a*1.05+1;
printf("入力者:%d円です。\n",a);
printf("やす君:その商品は%d円になるぞ。\n",b);
}
80↑は間違って書き込んでしまったものです。
すみません。
(改めて)すみません。Cのプログラムみてください。
#include <stdio.h>
main()
{
int a,b;
printf("やす君:消費税を計算できるもてもてやす君16歳だべ。\n");
printf("やす君:商品は何円っスか。\n");
scanf("%d",&a);
b=a*1.05+1;
printf("入力者:%d円です。\n",a);
printf("やす君:その商品は%d円になるぞ。\n",b);
}
このプログラムだと
なんか900円くらいまでは大丈夫みたいなんですけど、
1000円以上になると値がおかしくなるんです。
なんでですか??
1をプラスしないと答えが合わないのはなぜですか??
(1000円以上だとこっちのほうは答えがあう)
誰か教えてください。
83 :
デフォルトの名無しさん:01/12/12 20:23
84 :
デフォルトの名無しさん:01/12/12 20:27
>>82 Cの初心者HP逝って「型」を調べてみてね。
85 :
デフォルトの名無しさん:01/12/12 20:28
>>84 int型にしているのは小数点以下を切り捨てるためだと思うが。
b=(double)a*1.05;
・・・・・無駄だな。
87 :
デフォルトの名無しさん:01/12/12 20:31
いずれにせよ、+1している理由が不明である。
88 :
デフォルトの名無しさん:01/12/12 20:33
なんでfloatにしないの?
89 :
デフォルトの名無しさん:01/12/12 20:34
90 :
とても親切な人:01/12/12 20:45
>>82 >1をプラスしないと答えが合わないのはなぜですか??
なぜ1をプラスすると答えが合うって言うんだい?
よし、仮に入力が1だったとしよう。
int(1 * 1.05 + 1) を計算すると答えは2だね。
で、キミの住む町というか妄想世界では1円の商品を購入
すると消費税1円が加算されて2円請求されるという事かい?
もしそうなら悪いことは言わない、早くその町というか
妄想世界から引越しなさい。
そうすれば、そのプログラムは b=a* 1.05; とするだけで
普通に答えが合うようになるぞ。
それとも「消費税を計算できるもてもてやす君16歳」
というのを忠実にシミュレートするプログラムだと
そうするしかないのかな?
91 :
デフォルトの名無しさん:01/12/12 20:45
どうでもいいが質問者が頭悪そうなので、次の問題にいこ〜
>>82 なんか、あってるんだけど。どこがおかしいの?
怜たんが居ないと荒れるなあ・・(w
取り合えず+1はやめれ 意味不明
全部floatでやって最後にintにキャストすりゃいいだろ
あ、コンパイルしたら合ってたって事。
1500→1575(+1無しで)
>>92 0を入力して見ろよ。
それでも合ってるって言うのかお前ってヤツは!!
20000→21000
何がおかしいのか分からん。
小数点以下もちゃんとでないし。ちなみにVC++6。
>>97 質問の意図をはずしていると思われる。
まず元のソースを変更せずにコンパイルし、
900以下の数値を入力して得られる結果を「正しい」と思い、
1000以上の数値を入力して得られる結果が「おかしい」と思う
ところからスタートしなさい。
>>99 じゃ、元のソースで。
800→841
20000→21001
だそうです。
ちゅうか、ソース見て+1の効果が分からんの?
消費税って切り上げだったっけ (^-^;
>>100 >ちゅうか、ソース見て+1の効果が分からんの?
+1の効果?
バグの原因て意味ならわかるけど正解を導く為に必要ってんならわからないです。
82は「800→841でOK」だけど「21000→21001はNG」と言っていますけど。
>>102 訂正
×:「21000→21001はNG」
○:「20000→21001はNG」
>>101 切り上げの店が多いな。
だから足すなら1じゃなくて0.5だ。
はい、次の質問〜
>>92 >82は「800→841でOK」だけど「21000→21001はNG」と言っていますけど。
841でOK、ってどこに書いてあるの?800円のモノ買ったら841円
請求されんの?マジで?消費税って5.125%になったの?
>>105 なんか900円くらいまでは大丈夫みたいですよ。
>>82より引用。
>このプログラムだと
>なんか900円くらいまでは大丈夫みたいなんですけど、
>1000円以上になると値がおかしくなるんです。
>なんでですか??
#スレ荒らしてしまったみたいなのでこれでやめる
>>107 「正解」の意味が変だって事だよ。そして電気科は最後まで現れなかった・・・と。
やす君はじつは消費税も計算できないし、もてもてでもなかった。
16歳でさえもなかったらモーサイコー!!
111 :
電気科の人:01/12/12 23:01
>83〜110さん
今までチャット&ご飯だった。
+1は結果を合わそうとして無理矢理付け加えたもの。
0としたら1円だった。それおかしいと思った。
ただ+1を抜かすと、100と入力したら104円になった。
要するに言いたいことは
〜〜〜〜〜+0除いたソースの場合〜〜〜〜〜
1.入力100とすると出力104←×
2.入力1000とすると出力1050←○
〜〜〜〜〜+1を付け加えたソースの場合(82のソース)〜〜〜〜〜
1.入力100とすると出力105←○
2.入力1000とすると出力1051←×
〜〜〜〜〜本来なるべき結果〜〜〜〜〜
1.100と入力すると出力105←○
2.1000と入力すると出力1050←○
文はごちゃごちゃになってしまいましたが(あしからず)
「〜本来なるべき結果〜」出力のソースお願いします。
では一旦お風呂タイムっす(笑)
入力がY円だとしたら、消費税込みでは
Y + (Y * 5) /100 円
113 :
デフォルトの名無しさん:01/12/12 23:16
>ただ+1を抜かすと、100と入力したら104円になった。
ならねーよターコ
約分したら
Y + Y /20 円
端数切り上げなら
Y + Y / 20 + (Y % 20 ? 1 : 0)
消費税は定数じゃなくて変数にしとかないとあとで泣くぞ。
116 :
デフォルトの名無しさん:01/12/12 23:59
117 :
電気科の人:01/12/13 01:20
>113さん
なるんです。ちなみにコンパイラは
LSIC(?)試食版で
エディタはLCPADです。
>115さん
へいっ!!結構貴重っぽいアドバイスありがとうございます。
>116さん
プリプロセッサ指令??
#include <stdio.h>
main()
{
int a,b;
printf("やす君:消費税を計算できるもてもてやす君16歳だべ。\n");
printf("やす君:商品は何円っスか。\n");
scanf("%d",&a);
b=a*1.05;
printf("入力者:%d円です。\n",a);
printf("やす君:その商品はd円になるぞ。\n",b);
}
これだと少なくとも(入力したら)100円の時と400円の時はおかしいス。
118 :
デフォルトの名無しさん:01/12/13 01:24
>>117 おかしくない。
ちなみにVC++6.0 Pro
だからfloatでやれっつてんだろ ヴォケ
感電して氏ね!!
120 :
デフォルトの名無しさん:01/12/13 01:27
>>119 自動型変換をするからfloatにする必要はないと思われ。
うまくゆかなかったらコンパイラが悪い。
>>117 > なるんです。ちなみにコンパイラは
> LSIC(?)試食版で
ずいぶん誤差が大きいんだな >LSI-C
とりあえず
>>104を欲嫁。
> エディタはLCPADです。
そんなもん誰も生糸欄。
sprintf のs はsecret のs?
123 :
デフォルトの名無しさん:01/12/13 01:42
124 :
デフォルトの名無しさん:01/12/13 01:44
>>122 プログラミング言語C第二版の189ページに書かれていることからして、
stringのsだと思う。
>>93 ありがとー。荒れるの防止に一役かえてるなら嬉しいわ(w
質問者が理解していない可能性があるから、ちょっとフォローしてくわね。
>>112 >>114さんが言ってくれたみたいにやればいいと思うよ。
これは、b = a * 1.05;
って書くとa * 1.05を計算するときには浮動小数点で計算されるの。
このときに、コンピュータの内部では二進数で計算するのね。
だから、微妙に誤差が出ちゃうわけ(丸め誤差っていうから覚えとこう)。
で、浮動小数点→整数に変換されるときには、小数点以下は切り捨てられるの。
だから、もしほんの少し誤差がでて、計算した結果が、
a = 104,99999999999999999999999
みたくなったら、a = 104 になってしまう。
誤差がどういう風に出るかによって結果が違ってくるから上手くいく場合といかない
場合があるのよね。
この誤差を防ぐには、
>>114さんが書いてくれたように全部整数で計算すればいいわけね。
>>116 消費税率かわるたびに再コンパイル?
そのうち地方によって消費税率が異なるようになったら大変だな。
大きさ11の配列rootの各要素に3.0、3.1、・・・・・4.0の平方根を求めてから、
各要素の値を少数第8位まで出力しなさい。
#include<iostream.h>
#include<math.h>
#include<iomanip.h>
int main(void)
{
double root[11];
for(int x=0; x<11; x++)
root[x]=sqrt(3.0+x/10.0);
cout << setiosflags(ios :: fixed);
for(x=0; x<11; x++)
cout << setprecision(8) << root[x] << endl;
return 0;
}
ってやったんですけどうまくいきません。何が悪いんでしょうか?
In article
>>127, デフォルトの名無しさん/127 wrote:
> 大きさ11の配列rootの各要素に3.0(I$3.1(I$%%%%%4.0の平方根を求めてから、
文字化けしてます。
> 各要素の値を少数第8位まで出力しなさい。
少ない数?
> #include<iostream.h>
> #include<math.h>
> #include<iomanip.h>
この書き方...へんな入門書でも読みましたか? :)
> for (int x = 0; x < 11; x++)
> for (x = 0; x < 11; x++)
> ってやったんですけどうまくいきません。何が悪いんでしょうか?
うまく行かないってのは、コンパイルエラーでも出たのですか?
だったらそのエラーを読めばいいじゃん。
129 :
デフォルトの名無しさん:01/12/13 14:04
>>127 二つめのfor(x=...)で引っかかってるでしょう。
for(int x=..)で解決。
130 :
デフォルトの名無しさん:01/12/13 15:29
ねぇねぇ、
Kusakabeってマジ?それともネタ?
じつは日下部なんて人間は最初から存在しない
fjの昔からある荒し専用コテハン
2ちゃんではごく最近なので誤解している人多数
「くさかべ」は、fjに常駐している4人のやさぐれプログラマ集団
の名前だという説もある。フランスのブルバキみたいなもの(そんな
立派ではないか)。
133 :
電気科の人:01/12/13 17:54
>125怜さん
わかりました。それ理解することできました。
でも大変申し上げにくいことが・・・w
>一緒に考えてくれた人達
LSIC(?)でも成功する方法を発見しました。
これは先パイの友に聞いた方法なんですが・・・
#include <stdio.h>
main()
{
int b;
float a,c;
a=1.05;
printf("入力せよ\n");
scanf("%d",&b);
c=a*b;
printf("%.0f\n",c);
}
でLSIC(?)でもできます。
100と入力したら105。となる。
1000と入力したら1050。となる
・・・一緒に考えてくれたみなさん。ありがとうございました。
とりあえず万事解決です!!
>>133 だからそれが丸め誤差だっつーの。
覚えときなさいよ、まったく。
>>133 うん、それでも大丈夫だね。
浮動小数点型をprintfで表示したときは、問答無用で切り捨てたりしないのよね。
>>127 使ってるコンパイラは何?VC6ならそれでうまくいくんだけど、
g++だと
>>129の言うようにしないとだめ。
for文の()内のスコープがコンパイラによって違う。
このへんの話しはKusakabeちゃんが大好きな話しだよね。
素直に話しちゃくれないだろうけど。
話し。
138 :
デフォルトの名無しさん:01/12/14 00:22
age推奨
In article
>>136, デフォルトの名無しさん/sage/136 wrote:
> for文の()内のスコープがコンパイラによって違う。
標準規格に適合しているかどうかの問題でしょ?
> このへんの話しはKusakabeちゃんが大好きな話しだよね。
はなしし?
「話し」は「話す」の連用形です。連用形は単独で名詞的に使われますね。
In article
>>140, デフォルトの名無しさん/sage/140 wrote:
> 「話し」は「話す」の連用形です。連用形は単独で名詞的に使われますね。
連用形と名詞は別箇ですよ。
(連用形が名詞化したものは多いですが)
>>133 あれだけfloatにしろって言われたのに友達の先輩から
言われるまで頑なに拒み続けた電波科の人。何しにこのスレに来たのか?
>>142 説明不足が悪い。
floatにして、floatのままprintfで表示することが大切だが、そこまで説明
してなかったから。floatにして、intにキャストしてたら結果は一緒だよ。
初めて書き込みします。
JAVAで二分探索木を作りたいんですが
ポインタがないジャバでノードとパスをどのようにすればいいんでしょうか?
そのようなクラスとかメソッドがあるんでしょうか?
145 :
デフォルトの名無しさん:01/12/14 15:15
>>144 次の人のインスタンスを自分自身のメンバに持っちゃうクラスを作る
>>144 Javaのクラスを表す変数は気分的には全てポインタと思ってもらって構わないよ。
ポインタがないというより、ポインタしかないと言うべきかな。
c++とか知ってると少し混乱するかも。コピーコンストラクタとかないからね。
intとかdoubleとかの基本型はまた別。
148 :
デフォルトの名無しさん:01/12/14 21:51
初歩的なことで悩んでいるのですが・・・・
ルンゲクッタで数値計算するときに、
double x1[100][720]のように配列を指定すると実行できるのですが、
double x1[50][7200]にすると実行できなくなります。
同じようなソースで、double x1[150][1200],x2[150][1200]ですると動きます。
配列:50*7200=360000、150*1200*2=360000なので
メモリーに問題は無い気がするのですが、どうなんでしょうか?
上手く実行する方法ないでしょうか?
メモリーを節約する方法とかないでしょうか?
お願いします。
149 :
デフォルトの名無しさん:01/12/14 21:58
>148
スタックが不足してる、コンパイラのHELP見てスタックを広げるか
constにしちゃえ、或いは*x1[50]としてmallocするか
ルンゲクッタはちょっと勘弁 w
あ、変な事言ってる、逝って来ます
151 :
デフォルトの名無しさん:01/12/14 22:26
点を配置して3次元に図をプログラムで書くとき、
ただの丸(Z軸は考えない)は(sin(x),cos(x),0)のxを変えて書けたんですが、
Z軸が入る球はどうすればよいのでしょうか・・・?
なんか頭がこんがらがってきました。
ちなみにC++です。
>>148 149の言うようにヒープから確保すればよい。
>>151 何が問題?
一次変換、投影、陰線処理などは解決済?
>>144 配列のインデックスをポインタ代わりに使うってのも楽かもしれない
球の方程式がわからないってこと?
x=sinθ cosφ
y=sinθ sinφ
z=cosθ
>>149,152様ありがとうございます。
調べてやってみます。
158 :
デフォルトの名無しさん:01/12/15 00:22
double x[50][50]の配列設定で
関数f1が→double型で f1= exp(1/x[k][i])で表現できる時、
main文の前に
double f1(double x)
{
return();
}
のように宣言したいのですが、
double f1(double x[50][50])
{
return(exp(1/x[k][i]);
}
にするとコンパイルできません。
配列を使って宣言する方法を教えて下さい。
ちなみにmain文の中に、
double f1とf1= exp(1/x[k][i])をいれると動きます。
>>158 mainからはどういうカタチで呼び出したいのかも書いてくれ。
>>158 kとiを受け取っていないからじゃないか?
こういうこと?
double f1(double x)
{
return exp(1/x);
}
main()
{
double x[50][50];
double ans;
int k,i;
ans = f1(a[k][i]);
}
誤 ans = f1(a[k][i]);
正 ans = f1(x[k][i]);
>>158 double f1(double (*x)[50])
{
return exp(1/x[k][i]);
}
そりゃー、全角のカッコ使ったりカッコの数が合ってなかったりしたら、
コンパイルは通らん罠。
164 :
デフォルトの名無しさん:01/12/15 01:15
>>161 やらせたいことを具体的に数式で表現してくれ
俺は質問者じゃない。
double f1(double x[50][50], int k, int i)
{
return (1/x[k][i]);
}
main(){
double x[50][50];
double ans;
int k,i;
k = hogehoge1(); // 1次元の配列番号決定処理
i = hogehoge2(); // 2次元の配列番号決定処理
ans = f1(x, k, i);
}
こういうことをしたいのかな?
へんなプログラムだけど。
>>167 そうなんだけど、
>>158にあるのは
>double f1(double x[50][50])
>{
>return(exp(1/x[k][i]);
>}
だから、無理に合わせてみました。
>>161 ごめん。
どう見ても通らなそうだったから、つい。
170 :
デフォルトの名無しさん:01/12/15 01:50
皆様ありがとうございます。
遅くなって申し訳ありません。
実際の概略はこんな感じです。
void ans(x[50][50],y[50][50])
{double k1;double k2;double k3;double k4;
k1=exp(1/x[k][i]);
k2=exp(1/(x[k][i]+k1/2);
k3=exp(1/(x[k][i]+k2/2);
k4=exp(1/(x[k][i]+k3);
y[k][i+1]=y[k][i]+(k1+k2+k3+k4)/6;
}
main()
{
double x[50][50],y[50][50],z[50][50];
int k,i,a;
a=3;
for(k=0;k<50;++k){
x[0][0]=0;
y[k][0]=1;
for(i=0;i<50;++k){
ans(x,y);
z[k][i]=10*y[k][i];
}
x[k+1][i]=x[k][i]+a*z[k][i];
}
}
これを
double f(double x[50][50])
{
return(exp/(x1[k][i]));
}
void ans(x[50][50],y[50][50])
{double k1(double x[50][50]);double k2(double x[50][50]);
double k3(double x[50][50]);double k4(double x[50][50]);
k1=f(x[k][i]);
k2=f(x[k][i]+k1/2);
k3=f(x[k][i]+k2/2);
k4=f(x[k][i]+k3);
y[k][i+1]=y[k][i]+(k1+k2+k3+k4)/6;
}
main()
double x[50][50],y[50][50],z[50][50];
int k,i,a;
のように書きなおしたいのですが、できませんでした。
実際はもっと代入する式が多いので、f=exp(1/x[k][i])を
k1,k2,k3,に代入しない形にしたいのです。
何かよい方法ないでしょうか?
もとのコードがまず動かない。
どうせルンゲ-クッタだろ?
本にかいてある通りに書き写しなさい。
>>170 >k1,k2,k3,に代入しない形にしたいのです
概略のソース見る限りでは再帰呼び出しで解決しそうだけど。
174 :
デフォルトの名無しさん:01/12/15 05:33
>>172 ルンゲです。ここに書いたのは概略だったので、動かないと思います。
申し訳ないです。
175 :
デフォルトの名無しさん:01/12/15 05:37
#include <stdio.h>
void main(){
char s[100],m[100];
scanf("%s",s);
gets(m);
printf("%s\n%s\n",s);
}
でgetsが飛ばされて実行される理由は何ですか?
176 :
デフォルトの名無しさん:01/12/15 05:39
あ、最後の間違い
printf("%s\n%s\n",s,m);
です
>>175 入力バッファに'\n'が残っていてgets()はそれを取ってきてしまう。
対処法はgets()のまえにffluch(stdin);
これって宿題なのか?
man gets↓
バグ
gets() は絶対に使用してはならない。データを知ることなし に
gets() が何文字読むかを先に知る事はできず、 gets() がバッ
ファの終りを越えて書き込み続けるため、使用は大変危険 で あ
る。この事はコンピュータのセキュリティを破るのに使われてき
た。代わりに fgets() を使うこと。
>>177 折れんとこそれ駄目だったよ(gcc on Linux)?
#include <stdio.h>
int main()
{
char s1[100], s2[100]; /* ←名前が悪いから176みたいなことになる */
scanf("%s\n", s1); /* ←こうすればよい */
fgets(s2, sizeof(s2), stdin); /* ←178参照 */
printf("%s\n", s1);
printf("%s\n", s2);
return 0;
}
>>179 ダメって fflush 使ってもちゃんと動かなかったって話?
ffluch (c じゃないだろ) が無いとかいう話?
fflushってパイプとかの時結構コケルんじゃ無かったかな(うろ覚え)
# と言うかスペル間違えてるよー (^ ^;
$./a.out[RET]
first_str[RET]
firat_str
$
↑聞きやがらねぇ
fgetsを二つ続けて、sscanfや、strtolすれば済む話では?
>>177 読み込み用にオープンされたFILEに対するfflush()の動作は、
未定義じゃなかったか。
たまたまペンディングされたデータを捨てる処理系もあるが。
>>179 glibcにはfpurge()というのがあるが、Linuxではサポートされ
てないと書いてあるな。
185 :
デフォルトの名無しさん:01/12/15 11:35
えふふらっちage
>184
>未定義
あっ、そうだったんすか…
>185
iyan...
187 :
デフォルトの名無しさん:01/12/15 13:22
ここって、宿題に答えてもらえるんではなく、
宿題を出されるスレだたのか!(((( ;゚Д゚)))ガクガクブルブル
ルンゲの子はもうどうでもよくなったのか?
>>187 fflush はバッファの中を消すのでなく (消すのは fpurge)
行使 (変な表現ですが…) するのですね。
しかし、行使するにあたって、出力用バッファは書き出すところが決まっているのに対し、
入力用バッファは書き出す (というか受け取る) ところが決まってないので、
入力用バッファは行使 (fflush を適用) されるべきものではない。
みたいな感じでしょか?
って入力用に関する話でなく fflush の機能にレポートか…
fflush は入出力にあたってバッファリングされているもので
宛先が決まっているもの (つまり出力用ストリーム) を行使する。
fflush に出力用にオープンされたストリーム (FILE*型) を渡すと
そのストリームのバッファを書き出し、
NULL が渡されると、すべての出力用ストリームのバッファを書き出す。
以上、こんなかんじで勘弁して下さい。
192 :
名無しさん:01/12/16 17:49
以下の級数Srを計算する関数sr(r)を定義し、sr(10)を計算し、出力するプログラムを作成せよ。
[for文 関数文を使用する事]
Sr=1/(1・2)+1/(2・3)+1/(3・4)+・・・・+1/{r・(r+1)}
注意:上記の級数はr→∞で1に収束する。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
っつー問題が出されたんですけど、プログラム知識ない状態で授業とったんで
何がなんだかサッパリ判りません。
やってもらえませんか。
193 :
デフォルトの名無しさん:01/12/16 17:57
>>192 int sr(int r)
{
double n = 0.0;
int i = 0;
start:
n += 1/(double)r*(r+1);
i = i +1;
if (i < r) goto start;
}
194 :
デフォルトの名無しさん:01/12/16 18:04
>>192 float sr(int n)
{
float r ;
r=1-1/(n+1.0) ;
for(;0;) ;
return r ;
}
日曜日は、やさしい人は休みか。
>>192 >>1に書いたけど、丸投げすると怒っちゃうよ。
判らないからやって、じゃなくて、解ろうと努力したんだけどこの辺
がわからないとかどういう部分で詰まってるかとかを書いて頑張ってる
姿勢みせてくれないと、チョット教えてあげる気にならないなぁ。
>>196 すいません
だけど、判ろうとして全部解らなかったんで丸投げしちゃいました。
>>192 まずは先生に「"関数文"って何ですか?」って聞くことが先決だな。
200ゲトー
ずさささーーー
>>192 これでどうよ?
#include <stdio.h>
double sr(int n){return n?sr(n-1)+1.0/(n*(n+1)):0;}
int main(void){printf("%f\n",sr(10));return 0;}
fflush(my_brain);
怜ちゃんぶつじょーーー
■ポインタを使って配列の各要素を0に設定するプログラムを書きなさい。
と出題されました。
今週の宿題のラスト一問なのです。他は出来たのですが、
一日中Cプログラムの本調べてたんですけど 最後のきてもう頭が回りません。
よろしければお願いします。すみません。
#define SIZE 256
main()
{
int a[SIZE];
int *p = a;
memset(p,0,sizeof(int)*SIZE);
}
しもたー、for文使ってなかったー。
んで、修正。
#include <stdio.h>
double sr(int n){return n?sr(n-1)+1.0/(n*(n+1)):0;}
int main(void){int i;for(i=0;i<1;i++)printf("%f\n",sr(10));return 0;}
>>204 まあポインタを使えっていう要求をそのままとれば、
>>205のmemsetのところを
for(int n = 0; n < SIZE; n++) *(p++) = 0;
みたくすれば。
なんでよー、
ちゃんとポインタつかってるじゃんよーー
>>208 配列の要素の型が float だったらどうするの?
210 :
美咲キティー:01/12/16 23:40
文字列tを文字列sの後ろにコピーする関数strcat2(s,t)を、ポインタを使って定義しなさい。
ごめんなさい、投げてます。
よろしければお願いします。
>>211 void strcat2(char* s, const char* t)
{
memcpy(s+strlen(s), t, strlen(t));
}
sは十分なメモリ領域を指しているものとする(ゲラ
またsとtが指す領域は重なっていないものとする(ゲラゲラ
> ごめんなさい、投げてます。
あやまる前に、自分で少しは考えてみたら?
> よろしければお願いします。
いやです。(私が書いたことを逆説的にとらえれば、何すべきか分かる筈)
>210
別解
#include <string.h>
char* strcat2(char* s, const char* t)
{
char* (* pointer)(char * dst, const char * src);
pointer = strcat;
return (*pointer)(s, t);
}
>>211 自分に突っ込んでるよオイ…
もちろん、211で突っ込んだのは美咲キティーチャソに、です
>>211-212 もう少し気の利いた回答の仕方を勉強しれ。
この文章、君の普段の行動パターンが目に浮かぶようで非常に痛いよ・・・
205 207 208 209 214様。
返信有難うございます。速くてビックリしています。
おかげで提出課題がお全て終わりました。
他にもここのページを見ている大学の仲間(残り組み)も助かったと思います
いや、わたしだけかな。。。
なにより本当に有難うございました。
しっかしわざわざ金を払って仕事をしょいこんでくるとはキモイ連中だな。
>>215 212は私ではないよ。
努力を放棄して人に迷惑をかけて平然とするやからには、
普段でも同様の対応をします。
それを痛いと言われれば、それまでです。
219 :
デフォルトの名無しさん:01/12/17 01:18
まったく持って歯が立たないのです。調べたところでヒントも見つけ切れません。
ほんのちょっとしたヒントでも何でもかまいませんので返信下さい。
文字列s1の文字のうち、s2にある文字と同じ文字を全て取り去る関数squeeze(s1,s2)を作りなさい
>>192 double Sr(int r) /* わざと一ヶ所バグを仕込んである */
{
double n;
double sum=0.0;
if (r<=0) /* 引数が自然数でない場合は0.0を返す */
return 0.0;
for (n=1.0; n<=(double)r; n+=1.0)
sum+=1.0/n*(n+1.0); /* (*´Д`*)ハァハァ... */
return sum;
}
質問者はせめて言語を明記すれ
(特にまる投げ)
222 :
デフォルトの名無しさん:01/12/17 01:38
まったく持って歯が立たないのです。調べたところでヒントも見つけ切れませんでした。
ほんのちょっとしたヒントでも何でもかまいませんので返信下さい。
文字列s1の文字のうち、s2にある文字と同じ文字を全て取り去る関数squeeze(s1,s2)を作りなさい
すみませんC言語です。
ASCII、MBCSは無視。あと、微妙に仕様と違うかもな。
wchar_t *squeez( const wchar_t *s, const wchar_t *excl)
{
wchar_t *ret = (wchar_t*) malloc( wcslen(s) + 1 );
wchar_t *p = ret;
for( int i=0; i<wcslen(s); i++ )
{
if( wcschr(excl, s[i] ) )
continue;
*p++ = s[i];
}
*p=0;
return ret;
}
ヒント1:ループ
>>219 なんだかなぁ…
> まったく持って歯が立たないのです。
弱い歯ですね:)
> 文字列s1の文字のうち、s2にある文字と同じ文字を全て取り去る関数squeeze(s1,s2)を作りなさい
ゴメン、愚痴らせてくれ。
なんで命令口調?
問題丸投げどころか、“問題文”をコピペですか:)
とか言いたくなりません?
sub squeeze {
my($s1, $s2) = @_;
$s1 =~ s/$s2//g;
return $s1;
}
while (s2[i] != '\0')
for (j=0; s1[j] != '\0'; j++)
if (s1[j] == s2[i])
s1[j] = s1[j+1];j--;
こんな感じ?
もうしわけありません。私の無礼をお許し下さい。
今後は特に注意します。
その上の御返答まことに有難うございます。
まあ頑張ってくれ、そう言うのは最初に冗長なやり方で
体当たりすれば何とかなるよ
229 :
デフォルトの名無しさん:01/12/17 02:04
function squeeze(s1, s2: string): string;
var
I: Integer;
begin
Result := '';
for I := 1 to Length(s1) do
if Pos(s1[I], s2) = 0 then
Result := Result + s1[I];
end;
板住人たちによる質問者苛めが始まった!!(w
231 :
デフォルトの名無しさん:01/12/17 02:12
文字列s1の文字のうち、s2にある文字と同じ文字を全て取り去る関数squeeze(s1,s2)をお願いします。
私はわからないなりにこう考えてみました。
char squeez(char s1[],char s2[],int a,int b){
int i,j;
for(i=0;i<a+1;i++){
for(j=0;j<b+1;j++){
if(s1[i]=s2[j])
s1[i]=0;
}
}return(s1[256]);
}
しかし、指定した消す文字の後ろから全部が消えてしまうのです。。。
そりゃそうだ。文字列は0までだからな
>>231 s1[i]=0
を
s1[i]=0x20
にしたらどぉ?
>>231の文章を見るかぎりでは、
s2[]="abc"のとき、s1[]のなかのa, b, cを個別に消したいんじゃないのか?
それはこの関数を使えば実現できる(指摘されていることを正しくあらためれば)。
#include <string.h>
char *strpbrk(const char *s1, const char *s2);
あと、「消す」というのは、s2="abc"のときに
"Kusakabe Youichi" → "Kus k e Youi hi"
なのか
"Kusakabe Youichi" → "Kuske Youihi"
なのかはっきりさせるべきだ。
int sqeeze(char *s1, const char *s2)
{
int i,j,k,flag;
char *tmp;
printf("%sから%sに含まれる文字を削除します\n",s1,s2);
i = 0;
k = 0;
if ((tmp=(char *)malloc(strlen(s1)+1))==NULL){
printf("メモリの確保に失敗\n");
exit (0);
}
while (s1[i] != '\0'){
flag = 0;
for (j=0; s2[j] != '\0'; j++){
if (s1[i] == s2[j]){
flag = 1;
}
}
if (!flag) {
tmp[k] = s1[i];
k++;
}
i++;
}
tmp[k] = '\0';
strcpy(s1,tmp);
}
ダサいdeath、tmp使わないやり方教えてください。。。
s2が"下"のときに、
"日下部"を"日部"にしたいんです。
文字コードはISO-2022-JPとUTF-8でお願いします。。。
>"Kusakabe Youichi" → "Kus k e Youi hi"
これは空白への置換になるから後の方で良いんじゃないかな
つーか答え出てるな
242 :
カオリネコ:01/12/17 03:15
Cソースプログラムから全てのコメントを取り去るプログラムを作くってくれる方お願いします。
In article
>>242, カオリネコ/242 wrote:
> Cソースプログラムから全てのコメントを取り去るプログラムを作くってくれる方
> お願いします。
自分でつくりましょう。
案外簡単だし、ちょうどいい練習になりますよ。
" " の中みたり \ を処理したり、
#defineの中にあったらどうするか、とか。
最初のうちは
なかなか「完全」なものが作れなくて、
しばらく練習になるでしょう。
(機能的には同じ程度の完成度でも(たとえば8割り程度)、やりかたによって
コードがすごく複雑になったり簡単になったり、おもしろいですよ)
でも、100%の完成度を求めると一般性を持たせたCのparserまでかくはめになるでしょうね。
> (たとえば8割り程度)
8わりり?
>>244 そっとしておいてあげなさい。
久々に自分でも回答できそうなネタがあったので、
嬉々として慣れない長文を書いているのですから…
In article
>>245, デフォルトの名無しさん/sage/245 wrote:
> そっとしておいてあげなさい。
> 久々に自分でも回答できそうなネタがあったので、
> 嬉々として慣れない長文を書いている
「ということにしたい」が抜けてますよ :)
247 :
カオリネコ:01/12/17 03:32
> Cソースプログラムから全てのコメントを取り去るプログラムを作くってくれる方
> お願いします。
自分のプログラムですが。。。
char reverse(chaq *c){
int count=0;
int i;
char *s;
char t[count];
while(*c!=0x20){
t[count]=*c;
count++;
*c++;
}
for(i=count;i>0;i--)*s=t[i-1];
return(0);
}
ってかんがえたんだけど。
*cは文字列がはいっています。
エラーがでてしまってダメです。。。
どなたかお願いします。
コメントって云うのはスペースの事?
ネタ疑惑93パーセント(w
In article
>>249, デフォルトの名無しさん/sage/249 wrote:
> 重傷ですね。
ケガなのですね?
Kusakabe Youichi は受け売りだと思うからそっとしてあげて。
完全版は自分も作れなくていま様子うかがってるとことよ
>>251 先生、避難スレでみんな待ってるんですから
こんなところで油を売らずに早く来てください。
>>253 プ。
来てほしくないから避難してるんじゃなかったのか。バーヤ
255 :
カオリネコ:01/12/17 03:44
>>248 Cソースプログラムから全てのコメントを取り去るプログラムを作くってくれる方
お願いします
*コメントはプログラムの説明で\*〜*\で区切られている部分です。
256 :
デフォルトの名無しさん:01/12/17 03:44
>>236 こういう考えもあるよ。リングバッファの応用。読み込みポインタと書き込みポインタ。
void sqeeze(char *s1, const char *s2)
{
char *pw, *pr;
pw = pr = s1;
while(*pr){
if(strchr(s2, *pr) == NULL)
*pw++ = *pr;
pr++;
}
*pw = '\0';
}
>*コメントはプログラムの説明で\*〜*\で区切られている部分です。
の意味がわからないわ。
/*〜*/の間違いに決まっている。
259 :
デフォルトの名無しさん:01/12/17 03:57
>>257 おそらく /* 〜 */ と言いたいのでしょう。
バックスラッシュの \ とスラッシュの / を勘違いしていると思われ。
260 :
カオリネコ:01/12/17 03:57
char reverse(chaq *c){
int count=0;
int i;
char *s;
char t[count];
while(*c!=0x20){
t[count]=*c;
count++;
*c++;
}
for(i=count;i>0;i--)*s=t[i-1];
return(*s);
}
まで出来たんですけど。。。エラーはまだ。。。
なんでreverseなんだ。何か勘違いをしてないか?
262 :
カオリネコ:01/12/17 03:58
263 :
カオリネコ:01/12/17 04:00
訂正です。
>>259 おっしゃるとおりです。m(__)m
chaqって何ですか?
むぅ、コメント以外を取り除いてはいけないとは書いてないので、
全部取り除けばOK.
266 :
デフォルトの名無しさん:01/12/17 04:11
素晴らしい! って俺質問者では無いですけど (^^;
>>256さん、有難う。きっとこれが模範解答でしょうね。
こう言うのを見るとポインタって良いなぁと思ってしまいます。
>カオリネコ
Perlじゃ駄目なの? ^^
268 :
カオリネコ:01/12/17 04:20
この際何でもよろしいです。お願いします。
プリコンパイラに通せば全部空白になりませんでしたか?
そのかわりヘッダも展開される。
カオリネコ たんはオナニーとかするの?
第一弾
#!/usr/local/bin/perl
use strict;
open (SRC,"hoge.c");
> でも、100%の完成度を求めると一般性を持たせたCのparserまでかくはめになるでしょうね。
cppのparser程度で充分と思われ。
276 :
カオリネコ:01/12/17 06:02
おはよう、昨晩は質問がいっぱいだったみたいね。で、ちょっと、
丸投げクンに一言。
宿題って出す方としても、全員が自力で解けるなんては思ってないわ。
だから、人が書いたソースを参考に自分も書くっていうのは許容され
る範囲ね。でも、せめてそこで人のを参考に書き直す際に何をやって
るかくらいは理解して欲しいの。これが最低限要求することかな。
だから、ここで答え聞いてソースを書いてもらったら、それが何を
やっているかくらいは理解して欲しい。全く解ってない人には、それ
を見ても何をやっているか理解できるわけないから、教えてもしょう
がないと思ってしまうのよね。最低限、答え教えてもらったら、そこ
で何をやっているかは理解できるくらいにはなってから質問して欲し
いなって、こと。みんなキミタチのこと思って冷たくあしらってるん
だから、その辺のこと理解してね。
In article
>>252, デフォルトの名無しさん/sage/252 wrote:
> Kusakabe Youichi は受け売りだと思うからそっとしてあげて。
「と思いたい」のですね? :)
> 完全版は自分も作れなくていま様子うかがってるとことよ
そう思いたいのですね? :)
In article
>>253, デフォルトの名無しさん/sage/253 wrote:
> 先生、避難スレでみんな待ってるんですから
> こんなところで油を売らずに早く来てください。
書いてもいいのですか? :)
(だれかダメだって言ってたような)
In article
>>255, カオリネコ/255 wrote:
> *コメントはプログラムの説明で\*〜*\で区切られている部分です。
変わったコメントですね。
In article
>>269, デフォルトの名無しさん/sage/269 wrote:
> プリコンパイラに通せば全部空白になりませんでしたか?
そういうコンパラーもありますね(第1フェイズで全部とりのぞく)、
でもそういうのはごく少数ですよ。
In article
>>274, デフォルトの名無しさん/sage/274 wrote:
> > でも、100%の完成度を求めると一般性を持たせたCのparserまでかくはめになるでしょうね。
> cppのparser程度で充分と思われ。
同じことでしょう。
>>279 じゃあ、このスレにも書いちゃダメって言えば今後書かないでいて
くれますか?
>>281 コンパラーとかプリコンパイラってのははつみみだが、
通常のCプリプロセッサは、デフォルトの動作としてコメントを取り除く。
極めて古いものだと空白も入れないかも知れない。
In article
>>283, デフォルトの名無しさん/sage/283 wrote:
> じゃあ、このスレにも書いちゃダメって言えば今後書かないでいて
では向こうには書いていいのですか? それは保証してくれます?
In article
>>284, デフォルトの名無しさん/sage/284 wrote:
> 通常のCプリプロセッサは、デフォルトの動作としてコメントを取り除く。
プリプロセッサーが別パスになっているものはいまどき少数派ですよね。
>では向こうには書いていいのですか? それは保証してくれます?
保証するから出てって!!!
>>286 > > 通常のCプリプロセッサは、デフォルトの動作としてコメントを取り除く。
>
> プリプロセッサーが別パスになっているものはいまどき少数派ですよね。
プリプロセッサがコメントを取り除くことと、プリプロセッサが別パスに
なっているかどうかということに何の関係があるんでしょうか。
In article
>>288, デフォルトの名無しさん/sage/288 wrote:
> > プリプロセッサーが別パスになっているものはいまどき少数派ですよね。
>
> プリプロセッサがコメントを取り除くことと、プリプロセッサが別パスに
> なっているかどうかということに何の関係があるんでしょうか。
何か関係があるとだれか言ったのですか?
>288 冬厨は放置だよぃ
>>288 たぶんほとんどの処理系では、プリプロセスは独立したパスになってると思う。
独立したプログラムになっていないものもあるかも知れないが。
今数の√をもとめたいんですけど
Sqrt 関数をつかえない状況なんです。
これを使わずに求める方法ありませんかね?
たとえばルート2 とか3とか・・・
>>293 ニュートン法か
筆算と同じ方法でやればいんじゃない?
俺は忘れたけど(笑)
いや・・ニュートン方とかそんな高度なことはできないので・・
筆算ってどうやるんですか?
>>295 キーワード教えてもらったら、とりあえず検索してみなよ。
うむ。
>>293 > Sqrt 関数をつかえない状況なんです。
他に何か縛り(使えない関数)はありますか?
そもそも対象言語は何ですか?
> いや・・ニュートン方とかそんな高度なことはできないので・・
あなたにはできなくてもサンプル探してくれば、
賢いコンピータちゃんが計算してくれます。
294さんがキーワードくれたんだから、まずは調べてみては?
ちなみに“ニュートン方”で検索しても中々見つからないかもしれません。
“ニュートン法”で“平方根”を求めるんでしょ?
あら、ニュートン法でgoogleで検索したら、4つめにそのものずばりが載ってた。
1 4 1 4
1 √2 00 00 00
1 1
24 1 00
04 96
281 4 00
001 2 81
2824 1 19 00
0004 1 12 96
2828 6 04
こんなかんじだったかな。
まぁ、x*x - n = 0をニュートン法で解く方が早いな。
いや。やっぱりニュートン方とか使うと写したってばれるので(文系だし
おとなしく電卓でやっときます。・・
レスありがとう。
ニュートン法ってゆー名前がついてる、ってことは、ニュートンがめっけたんだ。
つまり、300年前にガイシュツってこと。
>>295 は大至急、タイムマシンにのって300年前のイギリスに逝って直接ニュートンに質問してこい。
ついでに「りんごが落ちたのは万有引力のせいですよ」って教えてやれ。
条件がsqrt()を使わないことなんだったら exp(log(x) * 0.5) でいいんじゃないの?
305 :
デフォルトの名無しさん:01/12/18 00:26
電卓?
>>304 あらかじめ計算して、定数をコードに書いておくのかな?
ルート8を求めたいときに
3*3=9だから
3より小さいだろう
2*2=4だから
2より大きいだろう
以下同様
ってやつじゃないの
それなら0.0000から0.0001づつあげていって、2乗値が7.9995〜8.0001の間に入ったらOKってやればいいね。
ちゃうちゃう二分法がはやい。
まあ、それを高速にやるのがニュートン法ってことで。
311 :
デフォルトの名無しさん:01/12/22 14:46
休日age
312 :
デフォルトの名無しさん:02/01/02 15:28
配列の文字列を昇順にソートするやつなんですが、segmentation faultが
でます。よろしくお願いします。
#include<stdio.h>
void qsort(char v[],int left,int right);
main()
{
char *data[]={"zbr","uuuuu","sa","ki","niino","aaa"};
int i;
for(i=0;i<5;i++){
printf("%s\n",data[i]);
}
qsort(*data,0,5);
for(i=0;i<5;i++){
printf("%s\n",data[i]);
}
}
void qsort(char v[],int left,int right)
{
int i,last;
void swap(char v[],int i,int j);
if(left >=right) return;
swap(v,left,(left+right)/2);
last=left;
for(i=left+1;i<=right;i++){
if(v[i]<v[left]) swap(v,++last,i);
}
swap(v,left,last);
qsort(v,left,last-1);
qsort(v,last+1,right);
}
void swap(char v[],int i,int j)
{
char *temp;
*temp=v[i];
v[i]=v[j];
v[j]=*temp;
}
313 :
デフォルトの名無しさん:02/01/02 15:34
>>312 segmentation faultが出る以前に、swapでコンパイルエラーに
ならないか?
>>313 いや、いちおうgccはとおるんですが。どこが間違ってるんですかね?
315 :
デフォルトの名無しさん:02/01/02 15:42
あ、すまん。
エラーにはならないね。
でも、文字列の交換にはなってないね。
317 :
デフォルトの名無しさん:02/01/02 15:45
swapで文字リテラルを書き換えてるのが原因かな?
318 :
デフォルトの名無しさん:02/01/02 15:54
void swap(char v[],int i,int j)
{
char temp;
temp=v[i];
v[i]=v[j];
v[j]=temp;
}
319 :
デフォルトの名無しさん:02/01/02 15:59
>>318 あぁ、ごめん間違えたわ。swap だけ見てた。
とにかく、
void swap(char v[],int i,int j)
{
char *temp;
*temp=v[i];
v[i]=v[j];
v[j]=*temp;
}
これだと、未初期化の temp が指す場所に v[i] を代入して
segmentation fault になるとだけ言っておく。
320 :
318=319:02/01/02 16:07
基本からしっかりやり直した方がいいよ。
#include <stdio.h>
#include <string.h>
void qsort(char* v[],int left,int right);
main()
{
char *data[]={"zbr","uuuuu","sa","ki","niino","aaa"};
int i;
for(i=0;i<6;i++){
printf("%s\n",data[i]);
}
puts("");
qsort(data,0,6);
for(i=0;i<6;i++){
printf("%s\n",data[i]);
}
}
void qsort(char* v[],int left,int right)
{
int i,last;
void swap(char* v[],int i,int j);
if(strcmp(v[left], v[right]) >= 0) return;
swap(v,left,(left+right)/2);
last=left;
for(i=left+1;i<=right;i++){
if(strcmp(v[i], v[left]) < 0) swap(v,++last,i);
}
swap(v,left,last);
qsort(v,left,last-1);
qsort(v,last+1,right);
}
void swap(char* v[],int i,int j)
{
char* temp;
temp=v[i];
v[i]=v[j];
v[j]=temp;
}
>>320さんのでいちおうエラーはでなくなったんですけど
昇順にソートされてないのはなぜなんですかね?
322 :
デフォルトの名無しさん:02/01/02 16:29
デバッガ使ってトレースしてみたの?
323 :
デフォルトの名無しさん:02/01/02 16:35
>>320 でキチンとソートされているけど、
zbr
uuuuu
sa
ki
niino
aaa
aaa
ki
niino
sa
uuuuu
zbr
それとも前のプログラムのどこが間違っているかをしりたいってこと?
ポインタのポインタと、標準の文字列関数 str---() を勉強しましょう。
ポインタの配列じゃねーのか。
>>323 おかしいなあ。なぜかうちのだと
zbr
uuuuu
sa
ki
niino
aaa
zbr
uuuuu
sa
ki
niino
aaa
となってソートされないんですよ。なんでなんだろ。
326 :
デフォルトの名無しさん:02/01/02 17:02
>>312 >qsort(data,0,6);
6?
>>320はバグってるな。
main():
× qsort(data,0,6);
○ qsort(data,0,5);
qsort():
× if(strcmp(v[left], v[right]) >= 0) return;
○ if(left > right) return;
すいません。ついでに質問良いですか?
swapの引数のchar* v[]はchar*vじゃいけないんですか?
あと、こういう宿題の時に最適化とかして良いものなのでしょうか?
すまん、こう。
qsort():
× if(strcmp(v[left], v[right]) >= 0) return;
○ if(left >= right) return;
どうでもいいけど、標準関数とおんなじ名前の関数作るなよ。
>>328 > swapの引数のchar* v[]はchar*vじゃいけないんですか?
いけない。
> あと、こういう宿題の時に最適化とかして良いものなのでしょうか?
コンパイルオプションの話?
それとも、再帰を使わないようにするとか、
ある程度短くなったら選択ソートに切替えるとかいう話?
void my_swap(char*a,char*b){
_asm{
push [a]
mov [a],[b]
pop [b]
}
}
//??
そなのか…
明示的に配列であることを引数の時から示さないといけないのですね…
いつもそう言う風にしてた(ぉ
勉強に為りました。
最適化は329さんみたいにアセンブリにするのも含みます。
(なんか変ですが。
332でした。いってきます…
335 :
デフォルトの名無しさん:02/01/02 17:26
>>328 ちょっと待った!
char* v[] と char*v の違いは
>明示的に配列であることを引数の時から示さないといけないのですね…
という話とちょっとずれていると思うよ。
何をスワップしているのか、もしくは char* v[] とは「何もの」であるかを
自分の知る限りにおいてレポートしてみて。添削してあげるから。
あんまり賢い事すると「おとーさんにやってもらったろ?」って言われるぞ。
げ。char**vの間違いでした(汗
すいません。
>336
いえ、便乗質問ですw
さすがに厨房相手にcで書いて来いなんて宿題はナイでしょう。
今の日本に。
>>337 > げ。char**vの間違いでした(汗
それは正しい。
339 :
お願いがあります…。:02/01/02 21:52
1.「プログラムを実行したときに」ディスプレイ上に自分の 学生証番号、氏名、住所 を表示するプログラムのソースを作成すること。
2.キーボードから入力された学生証番号、氏名、住所をディスプレイに表示するプログラム(このとき実行した人がキーボードから入力した学生証番号などが表示されるようにする)
3.ディスプレイに 整数nを入力するように表示し、0 からキーボードから入力された n 以下の偶数の和を求めその結果をディスプレイに表示するプログラム(2づつ数を増やすには +=2 を用いる)
4.ディスプレイに和を求める 番号 n を入力するように表示し、1,6,11...のような 5飛びの数の1から入力された番号nまでの和を求めてディスプレイに表示するプログラム(注意。k番目の数は 1+5*(k-1) で与えられる。)
5.10人の身長のデーターをキーボードから入力して、その平均をディスプレイに表示するプログラム(繰り返し文を使用すればよい)
6.ディスプレイに二つの 実数を入力するように表示して、キーボードから入力された二つの実数の 和、差、積、商(始めに入力された数割る二番目に入力された数)をそれぞれディスプレイに表示するプログラム
7.優、良、可にする最低点を実行時初めに設定できるようにし、その後キーボードから入力された学生の点数によって成績を優、良、可に振り分けるプログラム
8.キーボードから二つの実数を入力するように表示し、入力された二つの数を大きい順に並べて表示するプログラム
9.個人情報として、 氏名、年齢、住所、電話番号、趣味 を含んだ構造体を用いて、個人情報を入力できるプログラム
10.乱数を用いて 丁半 を表示するプログラム
解ける人は全て解いてみてください。…というよりお願いします(涙)
さっきも突っ込んだが8.はネタなのか?
かわいい弟クンのために、宿題みてあげるね。
でも、丸投げとかしたらおこっちゃうよ。まずは自分で考えてね。
申し訳ないです…。
俺は大学行ってなくて、友達から「この問題、なんとかならん?」と頼まれた物です。
「ネットで質問すれば何とかなるかもしれない」と思い、質問させてもらったんですが…。
>340
これはそんなに簡単な問題なんですか?
プログラムとか、俺には全然わからない事なので…(汗)
339が友達の代わりに頭下げる必要はないと思う。
できるなら本人つれてきた方がいいんでない?
ここで聞いて1時しのぎにはなってもそん次で困ることになるだろうし。
>>339 >>343さんが良い事言ってるね。
その友達は大学生なんですね。
もしプログラマ志望なら今すぐ諦めるように言ってやってください。
>343
本人、一応自分で頑張ってみると言ってて、1と2が出来たらしいんですが…。
自宅にパソコンが無いらしく、大学行かないとネットに繋げない…との事なので代わりに俺が…という事情なんです(汗)
レポート?提出の期間が迫っていて、一時しのぎでもいいから、という事なんだと思います。
友達として、第三者の力を借りてでも協力できれば…と思っていたのですが、ちょっと甘かったですね…(^^;
それでも何とか答えて貰えないでしょうか?う〜ん…。
>343
いや、彼は全然そういうタイプじゃないと思います(笑)
何を目指しているかは知りませんが、マスコミ関係かな・・・?バイト先を考えると。
パソコンの事とか、あんまりわかってないみたいなので、プログラマー志望では無いんじゃないかと思います。
ちなみに…ここはsage進行ですかね?(^^;)
なんで大学に600万も払う金があるのに自宅にマシンが無いの。
やっぱり氏んだほうがいいよ。
>>345 まあ、この板には後輩に教えたりとか、TAやったりとか、
宿題出す側の人間が多いのよ。
だから、丸写しさせるために教えてあげたいとは思わない
人がおおいんじゃないかな。
今回はお正月ということで、特別サービスね。
丸写しされちゃ困るから、ところどころ空欄にしとくから、
これ以上は自分で考えるように言ってね。
あと、全部#include<stdio.h>は必要よ。念のため。
3番
main(){
int k, n;
<nを入力するように表示し、変数nに入力された値を代入>
k = 0;
while(■){
printf("%d ", k);
<kに2を足す>
}
}
4番(番号nまで、というのはn番目の数までと解釈)
main(){
int k, n, sum;
<nを入力するように表示し、変数nに入力された値を代入>
sum = 0;
for(k = 0; k < ■; k++){
sum += ■;
}
printf("%d", sum);
}
5番
main(){
int k, sum, l;
for(■){
<lに数を入力>
sum += l;
}
printf("%d", sum / 10);
}
6番
main(){
float k, l;
scanf("%f", &k);
<lに実数を入力させる>
printf("和:%f", k + l);
<k,lの差、積、商をそれぞれ表示>
}
7番
main(){
int a, b, c;
printf("優の最低得点を入力してください\n");
scanf("%d", &a);
<良の最低得点をbに、可の最低得点をcに入力させる>
<判定したい得点を入力させる>
if(■){
printf("優");
}else if(■){
printf("可");
}else if(■){
printf("良");
}else{
printf("不可");
}
}
8番
main(){
float a, b;
<a, bに実数を入力させる>
if(■){
print("%d\n%d", a, b);
}else{
print("%d\n%d", b, a);
}
}
9番
struct parson{
char name[16];
int age;
char address[32];
char tel[11];
char hobby[32];
}
main(){
struct parson a;
printf("氏名=");
scanf("%s", a.name);
<以下略>
}
10番目
#include <stdlib.h>
main(){
int t;
t = rand() % 2;
if(t == ■){
printf("丁");
}else{
printf("半");
}
}
あと、参考までに。
実際のプログラムで、rand() % 2で、二つのうちどちらかを
ランダムに選択させようとすると、処理系によっては痛い目に
あうことがあるから気をつけてね。
#rand()は下位ビットはランダム性がない場合があるの。
あ、5番。ちょっと間違えてる。
for文の前に一行入れる必要があるね。
8番もprintfの中の%dっていうのが嘘だわね。
他にも何か色々間違えてそう。
9.はparsonじゃなくてperson。
つづり間違えて提出すると起こられちゃうよ〜
細かいdebugは自分で。と言うことで。
にしても怜さん親切。
お年玉だねw
いざとなったら友達に家に来させてという手も。
>>355 あ、やっちゃった。
どっちだろうと思ったときは辞書ひかなきゃ駄目ね・・。
>>357 まあ、本人には頑張ってもらってね。
なぜ geocities にサイトを作ってるんだろ。
大学でスペースくれないのか?
半
にはワラタ
362 :
デフォルトの名無しさん:02/01/03 21:46
”付録 4つの自然数に四則演算を施し10を作れるかを調べる問題”
についてるcheck10.cppって、なんかすごいぞ、なんつか、まぁいいや。
ほかのも見てみよう…
>>357のサイト
プログラミングの教育について、考えさせられるページですね。
ださっ!ていうより、学生がかわいそうっていうか…
>>363 そこまで壊滅的にダサくはないだろ。
もう少し読みやすくはしてほしいが。
>>364 リテラシーについては、あんなもんだと思うが…
第12章 クラスの概念のcalculator.hとかみてみそ、すごいから。
>>365 見たよ〜。あのソースにツッコミたいけど(多すぎるから)やめとくよ〜。
>>363 >学生がかわいそうっていうか…
激しく同意だよ〜。
このサイトのコードをエレガントに教育的に書き直すという企画はどうか(藁
↑の課題、cin>> と cout<< を使わないと、減点されそう。
371 :
デフォルトの名無しさん:02/01/04 18:29
ファイル入力のプログラムなんですが、fgetsのところでエラーがでます。
配列aをcharにするとちゃんとできるんですが、intではなぜだめなんですか?
#include<stdio.h>
main()
{
FILE *fp;
int a[30];
int i;
fp=fopen("data1","r");
fgets(a,30,fp);
for(i=0;i<30;i++){
printf("%d\n",a[i]);
}
}
372 :
デフォルトの名無しさん:02/01/04 18:43
>>371 それは、fgersがchar*を前提に作られてるからです。
fgets((char *)a,30,fp);
にすれば、コンパイル時のエラーはでなくなるでしょうが、あなたの思ったとおりの動作にはならないでしょう。
>>372 ではintでファイル入力を行うにはどうすればいいんですか?
>>373 どういう形式でファイルに入力をしたいかによるわね。
まあ、基本的には、
fgets((char *)a, 30 * sizeof(int), fp);
ってやればいいのかしら。ちょっと自身ないけど。
そのファイルを保存するときも同じ方法でね。
もし、別のプログラムとかエディタで書いたデータを読ませたいんだったら
その形式にしたがって読んでいく処理を書かないと駄目ね。
>>373 fread()を検討してみてはどうか?
376 :
デフォルトの名無しさん:02/01/04 23:37
>>371 intは32bit環境ではたいていの場合4バイトの領域を占める。
fgetsはaから始まる領域に読んだデータを詰め込んでいく。
したがって、371の例ではint7.5個分読み込まれている。
>>376 55 4 3 89 ・・・というばらばらの数字をファイルからとって
昇順にソートするという課題なんですよ。ソートのやり方はわかるんですけど
入力の方法がわからないんです。
>>379 テキストファイルなのかぁ?
それだったら, fscanfとか。
>>379 fscanfか、一文字ずつ読んでいってatoiでがんばるか。
好きなほうを選んでくれれば、もうちょっと詳しい説明つきます。
>>381 なるほど。ではatoiでやろうと思うんですが、どういうふうにやれば
いいんですかね?
383 :
デフォルトの名無しさん:02/01/05 18:10
>>382 1文字づつ読む方法は調べてね。
atoiも調べてね。
そしたら自ずと答えが。
384 :
吉野家オフ:02/01/05 19:39
int ch, digit = 0; int array[MAX_ELEMENT], int ptr=0;
while( ch = fgetch(fp), ch != EOF ){
if( isdigit( ch ) )
digit = digit*10 + ch - '0';
if( isspace( ch ) )
{ array[ptr++] = digit; digit = 0; }
}
行末に\でダメかな?
ゴメン、誤爆。
怜はヒゲ面のおっさんなんだろなぁ・・・・(萎
339本人じゃないけど、339の答え、俺にもわからん
難しいじゃねーかドルァァァァ!
hage
392 :
デフォルトの名無しさん:02/01/11 03:45
>>339 正直漏れは丁と半という意味がわからん…。聞いたことはあるが。
奇数と偶数という意味か?
逝ってこよう・・・。
>393
そうだよ。
なんど見ても「宿題あげてみるっ」に見えるんだ、病気だな、おれ。
395 :
デフォルトの名無しさん:02/01/11 06:01
396 :
デフォルトの名無しさん:02/01/11 06:33
麻衣タン…ハァハァ
398 :
デフォルトの名無しさん:02/01/11 13:27
1.標準入力から英文テキストを読み込みfile1に格納する。
2.file1に格納されたテキスト中に出現する全ての相異なる単語の出現回数を求めその一覧をfile2
に格納する。ここで単語はテキストに出現した順に並べるものとする。
また、大文字は小文字に読みかえ、両者は区別しないものとする。
3, 2と違い単語をアルファベット順にならべてfile3に格納する。
4,file1,2,3をそれぞれの見出しをつけて標準入力に書き出す。
1は簡単だしできたんですけど、2がさっぱりわかりません。
どうやって単語という単位で処理するんでしょう?
文字数なら簡単なんだけど・・・
自己参照構造体を使うと聞いたけどどうやって
使っていいのかわからない・・・
麻衣は単語の区別は英字以外を区切りにしたらいいんじゃないかと思うよ
ファイルに格納してるからファイルサイズは判るよね?
だからメモリ上に読んで、英字以外の文字を 0 にしてしまうと簡単だよ。
それで単語数を数える方法は、
うんとね、ポインタ+カウンタの配列を作って
”挿入ソート”と同じ方法で
一致するのがあれば カウンタを1増やす
一致が無ければ挿入
でいいと思うんだけど?
麻衣はお兄ちゃん バカ怜に取られて落ち込んでたけど、もう大丈夫。
すいません、よくわかりません・・・
ファイルサイズ? も何のことかわからないですけど
スペースが出たら1単語と言うやり方でできますよね?
それと挿入ソートと言うものを知らなかったので検索して調べたんですけど、
それを単語処理にどう使うかわからないです・・・
4の標準入力に書き出すって、たとえば、キーボードのキーが勝手にかちゃかちゃって…
>>400 >麻衣は単語の区別は英字以外を区切りにしたらいいんじゃないかと思うよ
やっまり麻衣ちゃんは子供ね(^^)
英文の中には数字もあるし、「英字以外を区切り」にしたら
I'm や don't みたいな単語が二つに分かれちゃうわよ。
単語ごとなんだから
きっと「I'm」は「I」と「am」に分けるんです!
難しい問題ですね!
麻衣タンを子ども扱いしないでください!
>>401 fseek(fp,0,SEEK_END);
size=ftell(fp);
fseek(fp,0,SEEK_SET);
これでsizeにファイルサイズが入る。
麻衣タンがいってるのは
This is a pen This is a cat
をカウントしながら辞書順にソートして
-----------------------
a cat is pen this
2 1 2 1 2
-----------------------
こうだよ。
>ここで単語はテキストに出現した順に並べるものとする。
あ、やばい。
ごめん麻衣タン…君を守れなかったよ。
∧||∧
( ⌒ ヽ
∪ ノ
∪∪
...
>>398 自己参照型構造体を使うのは3.だけだね。
ちなみに2.も3.もソートなしで書けるよ。
>>怜タン
>英文の中には数字もあるし、「英字以外を区切り」にしたら
>I'm や don't みたいな単語が二つに分かれちゃうわよ。
さすが怜タン。頭イイね!
あ、ホントだ。
はやとちりで逝くところだったよ。
ちょっとまとめてフォローしてくね。
>>398クンは、「線形リスト」は理解してる?
もしわかってなければそこから。挿入ソートというのも基本的に線形リ
ストを使ってする処理だからね。知らなかった下のページとかも参考にし
てみて。(まあ、リストを教えないで自己参照構造体とか教えることはな
いだろうから、授業で教えてくれたとは思うけど・・・)
http://www.d1.dion.ne.jp/~ecb/c/14_03.html 構造体に、その単語が何回でてくるかっていう要素を持たせちゃってもい
いいかな。
で、2の処理をしたい場合は、ドキュメントを前から順番に単語ごと区切
って読んでいく。で、今単語を一つよみ終わったとしよう。
ここで線形リストを前から順に辿っていって、同じ単語がないか探すわ
けね。で、みつからなければ、新しくその構造体をmallocして、リストの
最後に付け足すの。みつかれば、その単語の出現回数を+1すればいいわ
ね。
3の場合は、リストは常に辞書順にならんでるようにしとくわけ。
これをどうすればいいかっていうのが、挿入ソートの話ね。
ある単語を読んだら、リストを前から順に辿っていって、目的の
単語か、その単語よりも辞書順で後に出てくる単語を探すわけ。
目的の単語が見つかった場合はカウントを+1して、辞書順で
後ろの単語がみつかったら、新しくmallocしてその単語の前に
挿入するのね。
# 辞書順で後ろの単語が見つかったら、それより後に目的の
#単語がないことが保証されるからね。
って、読み返してみたけど少し説明わかりにくいなぁ。わからないところ
はきいてね。
411 :
デフォルトの名無しさん:02/01/11 23:39
C++でエレベータのシミュレーションをするプログラムを
(ある割合で客が来てエレベータに乗って行くような)
作れという課題が出たんですけど、
時間の概念ってどう考えればいいんですか?
>>411 うーん、難しいなぁ…。
Stateパターンを使うとか…。
398の問題はどこかで見たような…。
まさか関西の私立大学の課題じゃないよね…。
問題が一語一句同じなんだけど…鬱だ。(漏れはもう終わらせたが)
>>411 時間の概念は、適当に決めちゃえばいいんじゃないかな?
while文か何かでグルグルまわして、1stepを時間の最小単位と
するのね。で、1stepにある確率で客が到着するように設定する
のね(1人来るか、1人もこないかの二択ね。これを二択にする
のがいやならポアソン到着とか考えるべきなんだけど、今回は必
要ないでしょう)。
で、エレベータは扉あいてから、何ステップ待つか、階を1つ
上げ下げするのに何ステップかかるか、とかを適当に決めて、1
stepごと動かしていくわけ。
エレベータはどういうアルゴリズムで動かすのかな。まあ、円
運動が基本とかいう話もあったような。
>410
おお、解説ありがとうごぜーます!!
今日は無理なのでまた明日やってみます!
>413
そのとおりだ・・・R大学。
どこのクラスよ?
俺はDクラス。
416 :
デフォルトの名無しさん:02/01/12 00:11
>>415 本気で打つだし脳。
というかポインタ、文字列の扱い、構造体、ファイル操作をそれぞれ一週間で教えている時点で糞なんだよな。
課題には「事故参照構造体を使うと点数アップ」なんてDQNなこと書いているから
みんなこぞって事故参照構造体に突っ込んでる。リスト構造も満足に教えないくせに。
あのハゲの授業では大半の人が理解不可能だろうな。
とりあえず望洋のポインタ本かっとけ。
後半にリスト構造がわかりやすく載ってる。
実際のやりかたは怜さんの説明で完璧だしな。
418 :
413=416:02/01/12 00:26
望洋のポインタ本で思い出したけれど、新たにメモリ確保をするときは
mallocとcallocどちらがいいんですか?
漏れはmallocを使ってたんだけど、ポインタ本ではcallocのほうがいいようなことを書いてるし。
どうせmalloc呼んでるんじゃん?
>>419 mallocで十分だと思うけど、望洋がcallocのほうがいいって言うとちょっと考えてしまう。
mallocではだめでcallocにしないといけないなんていう状況はあるんだろうか?
422 :
デフォルトの名無しさん:02/01/12 00:34
callocだと0で埋めてくれるんだっけ?
424 :
デフォルトの名無しさん:02/01/12 00:35
Linux使ってればmallocでとった領域は0で埋められてることが
保証されてるうよ
通はallocaで自滅、これ。
Bohyohもびっくり!
426 :
デフォルトの名無しさん:02/01/12 00:37
>>423 callocはゼロクリアが全ての処理系で保証されてるわけじゃないからね。
>>428 まあね。ごとむさんもびっくりってやつだ
>>417 あ、ごめん、駄目サイトだった? 検索でひっかかった中で、普通に説明
してそうなところを抜き出してきたので・・。
>>410のサイト
「1.1アルゴリズムとは」を見た瞬間、ダメダメ。
>>427 >callocはゼロクリアが全ての処理系で保証されてるわけじゃないからね。
手元の「新ANSI C言語辞典」には、0クリアされると書いてあるけど…
435 :
仕様書無しさん:02/01/12 01:47
>>434 そこいらじゅうの処理系がみんな ANSI 準拠だったらねえ。
でも現実は、一番普及している処理系が一番 ANSI から遠いのだ。
その「1.1アルゴリズムとは」より。
>フローチャートは何のために作るのでしょう?
>図で示されているので、文章だけよりもわかりやすく、プログラムにしやすい
>バージョンアップなど改良する際に効率よくできる
>1つのプログラムを複数人で作るときに、手分けしやすい
>同じような処理は、再利用できる
最初の項目は分からなくもないんですけど…。
残りの3つは僕の理解を大幅に超えてます。
誰か詳しい解説きぼんぬ!
437 :
デフォルトの名無しさん:02/01/12 01:52
R大学って立教大学?
漏れ、本人の目の前で
「お前の教え方、すっげーわかりにくいよな」
って直接ゆーのが趣味なんだ。
その教授の名前おしえてちょ。
>>434 だいたいの環境ではゼロクリアされるらしいけどね。
全てじゃないってのがちょっと…。
まぁmallocで十分でしょ。
440 :
デフォルトの名無しさん:02/01/12 02:22
>>435 広く普及してる処理系なら、たいてい大丈夫だと思うが。
calloc()で0クリアされない処理系とは、たとえばどれ?
鹿鳴館大学
きのうゼミで出た宿題・・・。
「蟻の捕食活動シュミレーションによるマルチエージェントシステムと遺伝的アルゴリズム」
という題材でVC++を使ってプログラミング。
概要;蟻はたくさん
餌もたくさん
蟻は前後左右に動く
餌があれば捕食
終了条件;餌を全部捕食
規定時間をオーバー
んで、そっから遺伝させて、繰り返して
優秀な蟻軍団をつくっちゃおう!!
これを人生初プログラミングでやれって・・・。
ちなみに提出は1月20日・・・、これってできんのってかんじ??
444 :
デフォルトの名無しさん:02/01/12 04:06
>>443 何を遺伝させるんだろうね・・・
「右に動くのが好きな性格」 とかを遺伝させるの?
>>443 はっきりいって、それをはじめてのプログラミングでやるのは
無理じゃないかなぁ
先生に「プログラム経験ないんですよ〜」と言ってなきつくし
かないと思うわ・・。
>>444 一種のライフゲームだよね。
おそらく、動き方を遺伝させるんでしょうね。
マルチエージェントだから、みな同じように動くと同じところに
集まってしまって、餌を全部とれないわけだからぁ・・・
上下左右に自由に動けばいいのかなぁ・・・と思っても、全くの
ランダムだと壁の近辺と、中心部分に密度の差ができちゃうかな。
この辺をうまくバランスがとれた蜂集団ができればいいってこと
なのかなぁ・・・。ランダムウォーク的な要素をプログラムの段階から
組み込んで、ある方向にn歩歩いたとき、どのような確率でどの方向
に曲がるか、っていうのを遺伝子として持ってがんばるのかなぁ・・。
それとも、動きに全くランダム要素を入れないのかな。遺伝子から
一意に動き方が決まって・・・、軍団としてみるときれいに役割分担
してるように見える・・とか、なんかこっちの方がそれっぽいかな。
でも、収束しそうもない気はするわね。
うーん・・・
446 :
デフォルトの名無しさん:02/01/12 04:25
>>443 >ちなみに提出は1月20日・・・、これってできんのってかんじ??
むりっぽいね。
友達に頼ってください。
最近ゲーム理論にはまってる私には簡単だが
掲示板で聞かれても地道にやりなさいとしか
言いようがない
>>443 アリを一日観察し続けてパターンを見極めるか
ファーブル昆虫記を読みなさい。
アリはあれでなかなか賢い生き物だよ。
2分木の全節点の個数を求めるプログラム
2分木の高さ(根の高さ=1)を求めるプログラム
以上2つを適当な例を使ってFORTRANで作成して下さい。
お願いします。
FORTRAN、サパーリわからない…。
と言うか、全てを他人任せにしちゃダメだよ。
(;´Д`)怜タンハァハァ…。
>>450 Cでよければ簡単だな。
チミがCとFORTRANの両方を知っていれば、Cでの解答を書く
ところだけど、文面からしてそれは無理くさいのでヤメ。
あー、すいません、やっぱりわかりません・・・
プログラム作る以前の問題で自己参照構造体がわからない・・・
ttp://www.ht-net21.ne.jp/~sgwr-t/sec15-5.htm ここの例みてるんですけどadd_listをループさせるところ、
なんでデータが順番に入ってくかわからないんです。
mallocも初めてなもんで。
データってstruct list型のポインタpに順番にはいってくんですよね?
最初に*pを作ってデータを入れて、2回目も*p作ってデータ入れたら
上書きされるんじゃないんですか?
mallocで領域確保する意味もわからなくて、*pを宣言したらその中に
そのままデータ入れればいいじゃないかと思ったのですが、
もしかしてmallocで領域確保するとそこにあったデータは後ろにずれるんですか?
*pのデータは*(p+1)に行くってことかな?
う〜ん、でもループで毎回*pを宣言する意味もわからないなぁ・・・
キチガイは放置の方向で
>>398 疑問点と問題点をはっきりさせろ。
457 :
デフォルトの名無しさん:02/01/13 14:48
In article
>>455, デフォルトの名無しさん/sage/455 wrote:
> お前、どこを指しているんだよ・・・・
失礼、
>>453でした。
陽一さんと違って手作業で書いてるからたまにミスをします。
----------------------------------
||//
(@_@) Kusakabe Keiko
----------------------------------
459 :
デフォルトの名無しさん:02/01/13 14:49
>>458 てめー、せっかくフォローしてやろうと思ったのに割り込みやがって。
In article
>>459, デフォルトの名無しさん/459 wrote:
> ここはいいよ。
よくないですよ。
ウソが多い。
----------------------------------
||//
(@_@) Kusakabe Keiko
----------------------------------
>>461 具体例を挙げなければ荒し煽り以外の何者でもない。
人の揚げ足取りをする前に、まず自分が有益な言葉を吐いたらどうだ?
スレの主旨とも外れてきているだろう。
In article
>>462, デフォルトの名無しさん//sage462 wrote:
> 具体例を挙げなければ
たとえば「printf()はCRT画面に出力する」など、
おかしい部分がたくさんありますよ。
初歩的なことが多いので自分でわかって欲しいですね。
----------------------------------
||//
(@_@) Kusakabe Keiko
----------------------------------
そのサイトの話題は何処から出てきたんだ?
個人サイト叩きならどっか他所へ逝け。
>>453=
>>398 今解いてる問題は2.だよね?
君が書きたいプログラムは、あのサイトを見ただけでは難しいと思うよ。
>最初に*pを作ってデータを入れて、2回目も*p作ってデータ入れたら
>上書きされるんじゃないんですか?
mallocで確保される領域は毎回別の場所になる。
だから上書きされる事はないよ。
>mallocで領域確保する意味もわからなくて、*pを宣言したらその中に
>そのままデータ入れればいいじゃないかと思ったのですが、
関数を抜けたらローカル変数は無くなるんだよ。
だからpにデータを入れても意味ないよ。
mallocで確保された領域は関数を抜けても無くならないよ。
>もしかしてmallocで領域確保するとそこにあったデータは後ろにずれるんですか?
そんな事ない。
しかし…、mallocも使った事なくて自己参照構造体を使わせられるのは厳しいね。
どういう教育されてんのかなぁ…。
>>454のサイト
まぁ、とんでもなくへんなわけでも、すごくわかり易いわけでもなく。
気にするようなサイトじゃないっすね。
467 :
453=398:02/01/13 19:05
ああ、なるほど、とりあえずこのサイトのは理解できました!
ちなみにmallocは全然習ってないわけではないんですけど
よくわからなかったもんで・・・
自分で使ったことは無かったんです。
さぁ本題に挑戦しようかな・・・
>>466 かなりダメダメなサイトだと思うが。
Cで初心者が間違えやすい有名な落とし穴っていくつかあるけど、
そういうの落ちまくってるし。
469 :
半角住人の宿題:02/01/13 20:37
470 :
467=398:02/01/13 21:41
WINDOWSだとEOFのを返したいときはCtrl+Zですよね?
何も起こらないんですけど・・・
ただ^Zって表示されるだけで。
しかもどうにもならないから一回閉じてもう一回実行すると
共有違反・・・
どうすればいいんでしょう?
471 :
デフォルトの名無しさん:02/01/13 21:42
GUI中のボタンからファイルログを出し、入出力ファイルを指定するとこまでは出来
たのですが、それを利用してボタンを押したらソフトを動かすコマンドをJavaのGUI
で作りたいのですが・・・(ソフト名<入力ファイル>出力ファイル)
>>470 今2.を解いてるんじゃないの?
2.ってファイルから読みこむんだよね?
473 :
470=398:02/01/13 22:07
え〜っと、1は学校のUNIXでやったんですけど
今家だからWindowsで1もやり直したんです。
そしたら予想外の壁に・・・
474 :
デフォルトの名無しさん:02/01/13 22:21
0,1の世界を考える。
0+0=0,0+1=1+0=1,1+1=0
っていふうになるとして、
k次元のベクトルa1,a2,a3....を考える。
n1,n2,n3...が0か1の数だとして
あるK次元のベクトルsを
s=n1*a1+n2*a2+n3*a3...(有限個)
って表すために
n1,n2....を決める。
もし、s=n1*a1+n2*a2+n3*a3...(有限個)
となるn1,n2...がない場合はFalseを返す。
いいアルゴリズムありますか?
>>474 最初の0,1の世界ってかいてあるってことは
ベクトルの要素もすべて0か1ってこと?
いずれにしても、sのある要素に対して、左
辺の該当要素を計算してやれば済むことじゃ
ないかな。
とくに凝ったアルゴリズムは必要ない気がす
るけど。
>>470 >>473 うーん・・・。
データをファイルからでなく、標準入力から手打ちで入れたって
ことだよね? UNIX環境だとCTRL+Dってやればうまくいってたのが、
WINDOWSだとCTRL+Zっていれても上手くいかないってこと?
うーん、ちょっと症状聞いただけだとわからないなぁ。とりあえ
ず、a.out < hoge.txt みたいにファイルで入力してみたら?
まちがい、訂正。
左辺の → 右辺の
478 :
デフォルトの名無しさん:02/01/13 22:35
ベクトルの要素もすべて0か1ってこと?
そうです。
例えば、
a1=(0,1,0,1,0,1)
a2=(0,0,0,1,1,1)
で
a3=a1+a2なら
a3=(0,1,0,0,1,0)
となります。
つまり
左から1bitずつ割り当てた場合
ベクトルの足し算は
エクスクルーシブオアで計算できます。
479 :
デフォルトの名無しさん:02/01/13 22:37
>いずれにしても、sのある要素に対して、左
>辺の該当要素を計算してやれば済むことじゃ
これだと
最悪2^(足し合わせるベクトルの数)回試さないとダメですよね。
もっと、効率のよいアルゴリズムはないでしょうか?
>>474 >>475さんも書いていてくれてるけど、n1, n2, n3.....を決定したい
だけならn1, n2,,,の全ての組み合わせを考えればいいと思うよ。
a1, a2, a3,,,,を定めたいなら・・・0, 1しかなくても、やっぱ
a1, a2, a3を一次独立になるようにとればいいのかな。
481 :
473=398:02/01/13 22:39
>>476 そうです。
まぁとりあえず2番やります・・・
>だけならn1, n2,,,の全ての組み合わせを考えればいいと思うよ。
それだと遅過ぎて・・・
>a1, a2, a3を一次独立になるようにとればいいのかな
一次独立かどうかのチェックも結局は全部しらみつぶしになってしまう
ような・・・
しらみ潰しをしないアルゴリズムが知りたいっつーことか・・・
うーん
>>482 うーん、遅すぎるのね・・・。
ちょっとしっかり考えてないけどこういうのはどうかしら。
ベクトルの各要素に着目するのね。で、そこで、制約式を出すの。
もちろん、この制約式の導出段階でfalseがわかることもあるわね。
例えばa1 = (1, 0, 1), a2 = (1, 1, 0), a3 = (0, 1, 1)
とすると、
s = (1, 1, 1)なら
n1 + n2 = 1
n2 = 1
n3 = 1
さらに、ここで左辺を引き算して、式を簡単にしていく。
行列を使った連立一次方程式の解法が応用できるかな。
(ここで書く+は全部排他和ね)
何か間違ってそう。。
485 :
デフォルトの名無しさん:02/01/13 22:57
ベクトルが4つ以上だと・・・
何書いてるんだろう・・・
制約式は
n1 + n2 = 1
n2 + n3 = 1
n3 + n1 = 1
ね。
>>a1, a2, a3を一次独立になるようにとればいいのかな
>一次独立かどうかのチェックも結局は全部しらみつぶしになってしまう
>ような・・・
一時独立かどうかは、同じベクトルがあるかどうかできまるんやないかな
(あ、反転ベクトルも考えないかんけどね。)
だから、一次独立の判定だけなら、そんなに負荷にならないはずやけどな。
この手の問題は学生のころ以来だからちょっとあやしいけど
|n1|
|n2|
|n3| を ベクトルN、 |a1,a2,a3,...|を行列A
|n4|
|: |
として、Aの逆行列を ^A とした場合、
問題から
s = N × A
したがって
s × ^A = N
というわけでAの逆行列を計算する問題にできるけど、
それって高速にできるのかな。
489 :
デフォルトの名無しさん:02/01/13 23:00
>一時独立かどうかは、同じベクトルがあるかどうかできまるんやないかな
それは違うと思うよ。
>>484の
a1,a2,a3は一時独立でしょ
>>485 んー、k次のベクトルがl個あると・・
うーん、解が一通りとも限らないしね・・。
全部のパターン求める必要あるのかな・・・。
ちょっとしっかり考えてみるね。
解があるかないかだけでいいの?
493 :
デフォルトの名無しさん:02/01/13 23:04
>全部のパターン求める必要あるのかな・・・。
いえ、答えが一つでればOKです。
>>488 それは0,1の世界の場合使えるのでしょうか?
もし可能であれば、LU分解っていう便利なのがあるんですが
a1,a2,a3,a4...は固定なんです。
>>493 とりあえず、足し算、引き算、掛け算は定義できるよね?
だから、可能なんじゃないかな、と思うけど。
495 :
デフォルトの名無しさん:02/01/13 23:07
>解があるかないかだけでいいの?
解がある場合は、係数を求めたいのです。
というか、確率的なアルゴリズムでもOKです。
10%の確率で、解があるにもかかわらず
FALSEを返してしまうとか・・・
>>493 0,1でも問題は無いと思われ。
LU分解、rank、懐かしい言葉だな。忘れてしまったが。
s/一次独立/一次従属/ って事やで。
498 :
デフォルトの名無しさん:02/01/13 23:15
あ、係数は0か1で,-1はないです。
逆行列が求められるなら、LU分解もできるので
できるかもしれませんね。
ちょっと考えてみます。
499 :
デフォルトの名無しさん:02/01/13 23:17
あー、でも割り算ができないとできない気がしてきた。
rankを忘れたオレが0,1でも問題ないというのはおかしな話だな。
スマソ。自信ないす。
・・・数学板向きカモ。
>>499 うーん、0か1の二通りしかないから、割り算しなくても大丈夫じゃ
ないかしら。
502 :
デフォルトの名無しさん:02/01/13 23:26
よくわからん
mod2なら、-1=1なんやないの?
506 :
デフォルトの名無しさん:02/01/13 23:34
>>504 そうだった
とりあえず、また明日にでも
ちょいと検証したけど、LU分解でいけるみたい。
あとは、k<Nの場合の処理を入れれば終了やね。
>>474 ちなみに、どんな教科での宿題なの?というか、どういう問題から派生してきた問題なの?
509 :
デフォルトの名無しさん:02/01/14 15:16
>>507 やっぱ無理です。
LU分解って正方行列じゃないと使えない。
だから〜。
k<Nのばあい、前述した、一次従属条件で引っかけて、
k=Nにもちこめるでしょうが。k>Nの場合は、Sが一次従属
でない限り解はない。
スマソ。違うな。
512 :
481=398:02/01/14 17:38
そこそこ眺めた限り。
> fprintf(fp2,"%10c :%3d \n",p->word,p->count);
の%10cが間違い。
その実装では、Am 4 が与えられたとき、
am : 1, 4m : 1という出力になるとおもう。
最初の初期化は止めて、compする前に
NULL文字を詰めてはどうか。
getchをうける c はintであるべき。
514 :
512=398:02/01/14 18:49
>>513 もう少し詳しくお願いします・・・
初期化はtempのことですよね?
最初に初期化するのを止めてcompの前に初期化って事ですか?
compする時にはtempに単語が入ってるんですけど・・・
それとgercうけるのはintということは文字は全部intで処理したほうが
いいのかな?
でも単純にこの中に出てきたcharを全部intに置き換えても
うまくいかない・・・・・
temp[i]='\0';って事さ。null terminatedの意味をもちっと
考えようや。
getcの返す値のうち、EOFのみがcharの範囲にない。
だから、その部分だけintで処理すればいい。
あとついでに、isalphaとかつかおうや。
516 :
514=398:02/01/14 19:27
>> fprintf(fp2,"%10c :%3d \n",p->word,p->count);
>の%10cが間違い。
(´Д`)y-~~ とっととなおせや。
519 :
516=398:02/01/14 20:06
あー、すいません。
これってどこがちがうんですか?
printf("%10c\n", "hello World!");
printf("%10s\n", "hello World!");
521 :
519=398:02/01/14 20:42
コンパイラの警告を無視すんなよ‥‥
少なくとも3つ出ているはずだが。
523 :
521=398:02/01/14 20:57
え?警告でてませんけど・・・?
ファイルから取り出した単語が登録されていなかったら、comp()の戻り値はなに?
>>398 compのロジックが間違ってるよ。
もう一度見直したほうがいいね。
それと、ホントに警告出ないの?
むぅ。gcc version 2.95.3なら、たしかに何も云わないな。
「-Wallをつけなければ。」 gccで -Wallをつけるのは
常識だと思っていたが。
527 :
523=398:02/01/14 21:25
>>398 じゃあ仮に、まずfooという単語を最初に登録する。
この時main内のFの値は?
>>509 LU分解じゃなくて、行列を基本変形させていく方法で解けない?
531 :
527=398:02/01/14 22:43
ああ、できた!!!
ありがとうございます!
でも単語出てきた順番が逆・・・
まぁいいや、次がんばろう・・・
>>531 今、add_listで、リストの先頭に付け足してるよね?
そうじゃなくて、リストの最後に付け足すようにしないとね。
>>398 怜タンの言う通り、先頭に付け足すとマズイよ。
て言うか、あのサイトのコピペしたでしょ?
(;´Д`)ハァハァ…。
534 :
531=398:02/01/14 23:12
コピぺといか自己参照構造体がはじめってなのでみながら・・・
ってほとんどコピペしたのとかわらんけど・・・
後ろに付け足す場合、一つ目のデータをmallocした時にまだ二つ目の
データのアドレスがわからないですよねぇ?
これはどうやって指定するんでしょう?
NULLでターミネートしとけばいいやん。
>>534 えーと、*P以外にもう一つポインタ作って、headから辿っていけばいいん
じゃないかしら? あと、新しく作られた構造体は、一番最後につくはずだ
から、nextはnullが入るよね?
蛇足かもしれないけど、compの中で、最後まで読んでみつからなったとき
に、addした方が二回リストを辿らなくていいから効率いいと思うよ。
>>398 新しくmallocした時に、nextをNULLにしておく。
それでheadから辿って、nextがNULLの場合に
新しいデータを付け足す。
怜タンと被っちゃったよ。
(;´Д`)ハァハァ…。
>>527 Windows 用の gcc もあるって。
Cygwin 入れろ。
540 :
デフォルトの名無しさん:02/01/14 23:52
>>537 mallocした構造体の数が膨大になると辿るのも時間かかるから、
最後にmallocした構造体のポインタを記憶しておく
>>540 でも、mallocするときってのは、無い単語のときだけだから
結局一回最後まで辿るんじゃないの?
542 :
534=398:02/01/15 00:06
>>542 ソースはまだ見てないけど、NULLにしといて、head == NULLの場合だけ
別の処理をするようにするのが普通かな?
headをダミーノードにするってのもありかも。
545 :
デフォルトの名無しさん:02/01/15 00:25
決定性有限状態オートマトンについて。
SとIとp∈Sを固定した時、決定性有限状態オートマトン(S,I,δ,p,F)
は全部でいくつあるか。|S|と|I|の式で表せ。
547 :
542=398:02/01/15 00:41
う〜ん、うまくいかない・・・
putlistのところ、最初にint i=0;をつけて
ループのところを
while(i<=1){
fprintf(fp2,"%15s :%3d \n",p->word,p->count);
p=p->next;
if(p=NULL)
i++;
}
としたんですが、コンパイルしたあと実行すると応答が無くなって
閉じてからもっかいやり直すと共有違反がでて再起動しないと
直らなくなります・・・
まず、iの意味を教えてくれ
漏れの流儀ではこう。
for(p=head; p ; p=p->next)
fprintf(fp2,"%15s :%3d \n",p->word,p->count);
あ、547のは、if(p=NULL)がtypoかどうかにかかってると思う。
>>545 要するに、初期状態と、遷移関数の組み合わせの数だよね?
初期状態は、|I|(ちょっと記号に自信ないけど、入力アルファベットの数
でいいんだよね?)通り。
遷移関数だけど、ある状態A∈Sから、入力iがきたときに考えられる遷移
は|S|通り。これを考えられる全ての入力について考えなければいけないか
ら、一つの状態について、|S|^|I|通り考えられわけね。
そして、これを全ての状態について考えなければいけないから、
(|S|^|I|)^|S|通りの状態遷移関数が考えられるわけ。
だから、答えは、
|I|*(|S|^|I|)^|S|
かなぁ・・・。あんまりしっかり考えてないから間違ってるかもだけど。。
あと、i=0で初期化して、whileの条件が i<=1、脱出フラグで
i++;ってのも止めた方がいいよ。それにしても、i<1だろうけど。
>>547 とりあえず、if(p=NULL) はif(p == NULL) じゃないかしら?
>>547 単に無限ループしてるだけとちゃうんかい。
iに構造体のポインタ代入しないと。
554 :
547=398:02/01/15 01:07
あー、だめだ。
えーと、headは最初がNULLなので2回目のNULLでおわらそうと思って
それを数えるためにiをつかったんです。
p==NULLにしてもだめだった・・・
>>549 この関数の中にはheadはないんです。
mainのheadをpに読み込んでるので・・・
あとforの真中のpってどう言うことですか?
>554
なら、headを引数でもってこいや。
if( p ) は if( p != 0 )と等価。
ちょっとまて。headが最初NULL? いったいどこの「最初」の話だ?
putlistに入ったとき、headがNULLなら、そのまま帰るべきだし、
(そうでないなら、NULL->nextを実行させたい、ってことやで)
そうでないなら、「最初NULLだから2回目の」なんて妙な条件を
付ける必要はないし、つけてはいけない。
557 :
554=398:02/01/15 01:18
headを引数で持ってきてpとしてるんです。
549のpはどういう意味なんですか?
headを引数で持ってきてpとしてるように思えますが・・・
でもそれだとこの関数の中にはheadがないし・・・
558 :
557=398:02/01/15 01:24
おっとかぶった・・・
えーと、最初にmainでheadを定義したときheadの先頭ポインタをNULLと
したんです。
で、それに続けてデータを入れていく、という風にしている(つもり)です。
う〜〜ん、わけわからん用になってきた・・・
関数ごとに、関数の目的と、何をどんな手順で処理していくのかを
箇条書きでもなんでもいいから、もう一度考えて書いてみることを薦める。
560 :
558=398:02/01/15 01:32
一応出てくる順番が逆ならできたのでそんなに大きく
はずれてはないと思うんだけど・・・
あぁ、今日1日中やってるのにできない(;´Д`)
明日中に4番まで終わらせたいんやが・・・
オチンチン見て
562 :
558=398:02/01/15 01:38
みた
勃ってる?
564 :
558=398:02/01/15 01:59
縮んでる
565 :
558=398:02/01/15 02:08
これって考え方としてはheadの最初にNULLを入れないようにすればいいんですか?
それともheadの最初のNULLを避けるようにputlistのループをまわすんですか?
リストに要素が追加された時点で、headは実体化される。
次の要素が入ったときには、head->nextが実体化する。
headがnullってことは、リストが空って事さ。
567 :
565=398:02/01/15 02:19
mainで最初headの先頭ポインタをNULLにしてるじゃないですか?
これで先頭がNULLになるんですよね?
で次のデータはNULLの後ろに入るのではないんですか?
だからheadの最初がNULLだからputlistのループがすぐ終わってしまって
結果がこうなる↓のじゃないかと思ってるのですが・・・
http://www2.nasicnet.com/~hila/file2.txt その考え方自体ちがうのかな・・・??
568 :
565=398:02/01/15 02:20
でもよく考えたらtheだけってのはおかしいな・・・
君がどうheadを処理しているのかは判らないが、
head=NULL;で、
head->next = malloc(,,,);
などという愚行をやっていないことを祈る。
570 :
デフォルトの名無しさん:02/01/15 02:33
とりあえずNULLな領域を
fprintf(fp2,"%15s :%3d \n",p->word,p->count);
とするのは止めないといけないのでは?
572 :
565=398:02/01/15 02:39
うぅ・・・もうみんな寝ちゃったのかな・・・
また明日がんばろう・・・
573 :
565=398:02/01/15 02:43
お、それってheadの最初に入ってるNULLを避けてループするってことですか?
headの最初にNULLをいれないじゃなくて。
・そもそも、add_listでhead = NULLのときの処理をきちんと行う
・getcのループが終わったとき、変数headがリストのケツを指している。
のをなんとかしろ。
>>573 レスの目をとおしてないで聞くのは申し訳ないんだが、
このプログラムは結局何をさせるの?
576 :
デフォルトの名無しさん:02/01/15 02:49
>>570 あってないと思ったら、自分の回答書いてみたら?
>>573=
>>398 そもそもputlistの時点でheadがNULLを指しているのがおかしいと思うよ。
レスの目を→レスに目を通して
581 :
573=398:02/01/15 02:54
う〜ん、すぐにはわかりそうにないなぁ・・・
また明日考えます・・・
582 :
おわんねー:02/01/15 03:16
明日の朝、発表の課題です。
レイトレの並列化してます。
エラーの意味がわかりません。
neg**non-integral: DOMAIN error
これって、どんなときにでるエラーですか?
ねむくてしにそう・・・
ん? 582 != 398だとおもうが。
いずれにせよ、head == NULL のとき、
q=head;
q->next=p;
で、core。
失敬。もう一度修正するね。
when head == NULL
q=head;
while(q->next != NULL){
q->nextでcoreかと。
>>587 headも最初にmallocで確保して作るということでいい?
あちしに訊かれても困るけど、まぁ、いいんでないか。
ごめんっす。
ぼくは、ここにきたの初めてでした。
ログ読む暇もないくらいテンパってます・・・
>583さん
みれないよー(涙)
麻衣タン…ハァハァ
594 :
連立方程式が解けません・・:02/01/15 09:29
どこがまずいのでしょうか
#include <stdio.h>
#include <math.h>
#define N 5
#define EPSILON 1.0E-10
float a[N][N]={{1.0, 1.0, 0.0, 0.0, 0.0},
{0.0, 0.0, 1.0, 1.0, 0.0},
{0.0, 1.0, 1.0, 0.0, 1.0},
{0.0, 0.0, 1.0,-1.0,-1.0},
{1.0,-1.0, 0.0, 0.0, 1.0}};
float b[N]={10.0, 10.0, 20.0, 0.0, 0.0};
int k;
float x[N];
void main()
{
int i,j;
void gau_sei();
printf("\n\n ===係数行列と定数 ===\n\n");
for(i=0; i<N; i++)
{
for(j=0; j<N; j++) { printf("%10.4f",a[i][j]);}
printf(" %10.4f\n",b[i]);
}
gau_sei();
printf("\n\n ===解 ===\n\n");
printf("繰り返し回数 = %d\n\n",k);
for(i=0; i<N; i++) printf(" x[%d] = %10.4f \n",i+1,x[i]);
}
void gau_sei()
{ int i,j;
float Nk,xx;
k=0;
for(i=0; i<N; i++) x[i]=0.0;
do
{
k=k+1;
Nk=0.0;
for(j=0; j<N; j++)
{
xx=b[j];
for(i=0; i<N; i++) if(i!=j) xx=xx-a[j][i]*x[i];
xx=xx/a[j][j];
Nk=Nk+fabs(xx-x[j]);
x[j]=xx;
}
} while(Nk>EPSILON);
}
595 :
連立方程式が解けません・・:02/01/15 09:32
解のところで
x[2]=1.#INFとか出るんですけどこれの意味が
あと同じく 1.#INDってのも
>>595 ソースしっかり読んでないけど(どういった手法で解こうとしてる
かくらいは書いて欲しいな・・・)、xx=xx/a[j][j];ってところで、
0で割っちゃってるんじゃないかな?
597 :
連立方程式が解けません・・:02/01/15 10:02
ガウスザイデル法っていう奴です。
すいません
ちょっと出直してきます
474さんではないです。
>>600 あ、人違いだったのね、ごめんね。
で、問題のプログラムだけど、前に書いた通りxx=xx/a[j][j];で0で割ってる
のがいけないんだと思う・・。
ガウスサイデル法知らなかったから、今調べてきたところなんで余りアテ
にはならないかもしれないけど、対角成分は全部0であったらまずいんじゃな
いかな? だから、行を入れ替えて対角成分が全部0にならないようにする
んだと思うわ。 もし行を入れ替えて対角成分を全部0じゃなくできないなら
答えがあることは保証できないしね。
遅レスですいません。
>>414のエレベータの円運動って何なんですか?
あとエレベータのアルゴリズムはまださっぱりわかりません。
>>602 エレベータが今、6階にいるとするよね?
それで、3階と9階でボタンが押されてたとしよう。
このとき、エレベータはどっちにいけばいい?
うまくやらないといつまでもエレベータが来なくなっちゃうよね?
そのため円運動みたいなことを考えるの。
今、1階から上に上っていって、6階で客を降ろしたとすると、
今、上に上っている最中だから、まず最上階までで下に下りてくる
の。ただ、このときに6階から上で全くボタンが押されてなければ、
最上階まで行って、6階まで降りていくというのは無駄だよね?
だから、この過程を省略したと考えて、この場合は下りはじめる
ってことね。
>>603 ありがとうございます。
話が戻ってしまうんですけど時間の概念で
whileで1stepずつ増やしていくのはわかるのですけど
エレベータの移動に10stepかかるとしたら
10step後までエレベータは何もしないようにするには
どうすればいいのですか?
happyou damedesita----
>>604 何step待ってるかというのを、何か変数でもって、10溜まるまでは
単にその変数を+1するだけ。で、その変数が10になったならば、
エレベータを動かす処理をする。じゃだめかな?
>604
RTOSの下で? それともWindowsアプリとして?
>>607 ただのC++の課題です。
UNIXで作っています。
クラスを何にしていいのかすらわからない状態で
課題が終わりそうにないです。
>>411 色んな実現方法があるから困ってしまうよね
麻衣なら
1)操作ボタンクラス 外の上・下のボタン 中の階ボタン類
これらは1インスタンスで1ボタン
押されたら管理クラスにメッセージ
2)管理クラス
エレベータ現在位置とボタンクラスからのメッセージからどこに行くか決定
到着したらボタンクラスにメッセージ
3)コントロールクラス
次にどの階に行くかを実際にコントロールするクラス
4)エレベータシミュレータ
重力、慣性を適当に作る
5)タイマー 10mS毎にそれぞれのインスタンスにメッセージを送る
こんな感じで設計するかな
>>609 エレベータクラスは作らないのですか?
それともエレベータクラスがこれらのクラスを持っているということですか?
JAVAならエレベータクラスも作るだろけど、
もしかして同時に2台以上動かすとか必要?
612 :
デフォルトの名無しさん:02/01/15 13:19
#include<stdio.h>
main()
{
printf("おまんこ\n");
}
このプログラムは何点ですか?
613 :
デフォルトの名無しさん:02/01/15 13:21
#include<stdio.h>
main()
{
printf("山崎ホウセイはlinuxユーザー\n");
}
なんてん?
3点
減点要素
×main は帰値型を付けていないのでintを返さなければいけない
×mainの定義が正しくない
×将来性のかけらも感じられない
×ギャグにもなっておらず寒すぎ
>>611 エレベータは2台あるので同時に動かさないといけないです。
616 :
デフォルトの名無しさん:02/01/15 13:29
617 :
デフォルトの名無しさん:02/01/15 15:43
> エレベータシミュレータ
エミュ
411クンはどれくらいプログラムできるの?
それによってアドバイスが変わってくるから・・・
>>618 エレベータとフロアと客をクラスで作ろうかなと思っているくらいで
まだ先が見えてこない状態です。
いや、プログラムできてるの?
じゃなくて、
プログラムできるの?
ね。
どれくらいプログラミング経験あるのかなーとか、
どの程度、複雑なプログラムなら組んだことあるのかなーとか、
もういいよ
C++でクラス作ったり継承ができるくらいかな?
プログラムは大学で習ったくらいです。
そんなに複雑なプログラムは作ったことないです。
今回出た課題が一番難しい課題です。
一応クラス使えたり継承使ったりはわかるのね。
じゃあ、麻衣ちゃんを見習って私ならこうクラスを設計する、
っていうの書いてみようかな。
★乗客クラス
乗客のクラスね。●階から○階へ移動したいと思ってるという
情報を持ってるのね。
★フロアクラス
各階の情報ね。待ってる乗客のオブジェクトを持っていたりする。
で、上・下のボタンが押されているかどうか、というのも持ってる
のね。
●エレベータクラス
エレベータのクラスね。
まず、中に乗ってる乗客のオブジェクトを持ってないとね。
あと、各階のどのボタンが押されてるかも知りたいから、
各階のクラスへのポインタでも持たせておくといいかな。
もちろん、今何階にいるとかいう情報ももたせないとね。
どうやって動くかというロジックはここに書くのかな。
このときもう一方のエレベータとも連携させないといけ
ないから、もう一方のエレベータへのポインタも持たせて
おこうね。
とりあえずは、こんなところかな?
で、時間についてだけど、実時間(シミュレーションしていると
きに、その結果をリアルタイムで観察させたいなら、ってことね)
と対応させるにはどうすればいいかってことだけど。
麻衣ちゃんが言ってたみたいにタイマー使ってもいいし、それ
が面倒なら課題レベルならビジーループ(時間をかけるために無
意味にループさせる)させてしまっていいと思うよ。
char str[][]={"怜=","ひげおやじ"};
626 :
581=398:02/01/15 22:12
>>591 ありがとうございます!!
見ながらやってなんとかできました!(あたりまえ)
う〜ん、こうやるんですねぇ・・・
で、いくつかわからないところがあるんですけど、
僕がexit(1)でおわらしてるところreturn(0)に書き換えてますよね?
これはなんでなんでしょう?
あとstruct dataのメンバは3つだけど、struct data型の引数は3つですよね?
これもOKなんでしょうか?
>>626 >僕がexit(1)でおわらしてるところreturn(0)に書き換えてますよね?
>これはなんでなんでしょう?
特に理由はないんだけど・・。(w
main関数は基本的にint型の返値を持たせるため。
exit(1)でもいいよ。
ただ、gccとか使ってコンパイルすると警告がでてきてしまう。
>あとstruct dataのメンバは3つだけど、struct data型の引数は3つですよね?
>これもOKなんでしょうか?
headとpとqのことかな?大丈夫だよ。
これは単にmallocで作ったデータの住所を保持してるだけだから。
このプログラムを実行すると
[]→[]→[]→[]→[]→[]→NULL
↑
head
という構造ができて、その先頭のオブジェクトの住所がどこかを記憶してるのが
headというポインタ変数。だから、
struct data *temp;
だけだと、tempは何も指さないNULLデータ。
mallocでオブジェクトを生成させると、そのオブジェクトの住所が入る。
で、temp=head->next;とすると、
[]→[]→[]→[]→[]→[]→NULL
↑ ↑temp
head
となって、headの次のオブジェクトにアクセスできるようになる。
630 :
626=398:02/01/15 23:47
2のプログラムにパイプつけてsortを呼び出すのは、無しなんだろうな‥‥
それはともかく、mainで、中括弧{}がそろってない。
まともなエディタ使ってるか?
>>623 乗客クラスはいらないんじゃないかな?
次に何階に行くかは、エレベータクラスが情報として持っていればよい。
何階で呼んでいるかは、フロアクラスが持っていればよい。
実際、エレベータに人が乗らなくても、ボタンさえ押せば運行できるわけ
だから、そのほうが自然だと思う。
>>630 プログラムはエラー箇所が結構あると思う。
3番のような問題は2番のような線形リストではなく、
二分検索木などを使う。
スタックを使ってもできるかもしれないけど、ちょっと強引かな。
あ、でも、シミュレーションするには必要か・・・
635 :
630=398:02/01/16 00:19
てことはもう一回最初からかかないとだめなんですかね・・・?(;´Д`)
明日の朝学校にもって来たいから今日の夜中におわらしたいけど
むりかなぁ・・・・
>>635 二分木を使わなくても、
線形リストに加える時に,リストの最後につけるのではなく,
ソートしながら加えていけばできるよ。
先頭からstrcmp()を使って比較して、strcmp()の返値が
負になったら、前のデータと、今比較したデータの間に
加えたいデータをつなげる。
>>630 まあ、課題だし二分木使わなくても十分でしょう。
とりあえず、if〜elseの中括弧の対応関係がおかしいよ。
あと、一度新しい単語を登録したら、compから抜けようね。
639 :
636=398:02/01/16 00:32
二分木はわからないので線形リストでがんばってみます・・・
ところで標準入力でCtrl+ZをおしてもEOFが返されないみたいで、
^Zと表示されるだけでなにも起こらないんですけど・・・
あ、Windowsでの話です。
>>639 うーん、どういう環境(コンパイラとかそういうのね)で実行
してるの?
641 :
639=398:02/01/16 00:37
642 :
デフォルトの名無しさん:02/01/16 00:43
>>641 どこまで逝った?
問題2、3のソースを見せて、たのむ!
>>641 EOFは大概中括弧の数が合っていない。
644 :
デフォルトの名無しさん:02/01/16 00:45
誰か覆面算の解くプログラム作ってください
ちなみに言語はprologかc言語でお願いします
learn+linear+logic=prolog
>>639 ・・・ってソース読んでみたら、これって、標準入力から受け取ってる
んじゃなくて、ファイルから読み込んでるんじゃないの?
それだったら、何も起こらないのはあたりまえだけど・・・
>>int main()
mainの型が宣言されていない。
>>comp(char *cdata,struct data *p)
構文がおかしい。括弧の数などが違う。
647 :
641=398:02/01/16 00:56
>>645 え〜と、
>>398みてもらえばわかると思いますけど、ほんとは標準入力
からよんでfile1に出力し、そのfile1を読み込みfile2を出し、
またfile1を読んでfile3を出し、最後にfile2とfile3を出力するという
ひとつのプログラムなんです。
標準入力からEOFをかえせないから飛ばしてファイルよむところから
やってるんです。
だいぶ警告減ってきました、もう一息。
>>646 main()にも型の宣言いるんですか?
648 :
641=398:02/01/16 01:03
>>647 なくてもコンパイルできるけど、関数の前には
型をつける癖をつけておいた方がいいよ。
>>648 えっとね・・、
compにはhead->nextじゃなくて、headを渡すべきじゃないかな?
651 :
デフォルトの名無しさん:02/01/16 01:12
654 :
648=398:02/01/16 01:15
>>651 やっぱりうちの学校か・・・
2はできたけど3はまだやから。
まぁ何とか今晩中におわらしたい。
あと課題は全部くっつけなあかんやろ?
あと丸写しはせんといて、微妙に変えて使ってくれ・・・
while(!p->next){
n = p->next;
f = strcmp(n->word,word);
if(f == 0){ /* 等しい */
m = makeNewItem();
strcpy(m->word,word);
m->next = n;
p->next = m;
break;
}
elseif(f>0){ /* wordのが小さい */
m = makeNewItem();
strcpy(m->word,word);
m->next = n;
p->next = m;
break;
}
elseif(f<0){ /* wordのが大きい */
if(n->next == NULL){
m = makeNewItem();
strcpy(m->word,word);
m->next = NULL;
n->next = m;
break;
}
p=p->next;
}
}
struct data* makeNewItem(void)
{
return (struct data*)(malloc(sizeof(struct data)));
}
リスと入れ替え部分のみだが、こんなんかな?
656 :
デフォルトの名無しさん:02/01/16 01:17
誰か覆面算の解くプログラム作ってください
ちなみに言語はprologかc言語でお願いします
learn+linear+logic=prolog
簡単すぎて誰も相手にしてくれないのかな?ほんとお願いします。
覆面算の例でもいいからだれか書いておいてください
657 :
654=398:02/01/16 01:17
かぶった。
てかうちの学校何人おるんやろ。
番号!
いーち!
>656
理論的に、解ける、というので十分かね?それだと、ブルートフォースで終わりだけどな。
矢張り、実用的な時間内に解かないといけない?
しまた、
whileの下3行は
}
p=p->next;
}
こちらです。
ブルーとフォースでも一瞬だろ
>>656 だから、丸投げすると怒っちゃうって。考え方だけね。
文字の種類は、a, c, e, g, i, l, n, o, p, r
の10種類? 覆面算って全部違う数字である必要があるんだっけ?
だったら、10^10通りの組み合わせを全部試して・・・しまったら
ちょっときついかな。枝狩りをしていくしかないね。
じゃあ、
各桁について、式をたててみようか?
g = (c + r + n) % 10
o = ( (c + r + n) / 10 + r + a + i ) % 10
l = ( (c + r + n) / 10 + r + a + i ) / 10 + a + e + g
みたいな式がたつよね。
これを上から順に決めていくの。
まず、一つ目の式にあうようにg, c, r, nを仮定する。
で、次に二番目の式にあうように、新たに、o, a, iを仮定する。
ここで、上手くo, a, iを定められなかったら、g, c, r, nを決めなおす。
で、次に三番目の式にあうように、新たに、e, gを仮定する。
これが決めれないなら、o, a, iを決めなおし。
で、あと全体の式が合うように、pが定まればいいわけね。
662 :
657=398:02/01/16 01:25
>>655 おお、なんか書き方がうまいなぁ・・・
で、内容についてですけど場合わけ3つもいるんですか?
F==0の時はmallocしなくていいのでは・・・?
あと410の怜さんのやり方だと辞書式にあとの単語が出てきたときに処理すれば
いいのでF<0の時だけでいいと思ったんですけど・・・
それはまた別なやりかたなんでしょうか?
僕のやりかたってまったく検討違いなのかなぁ?
あ、661に名前入れ忘れちゃった。
2!
665 :
デフォルトの名無しさん:02/01/16 01:29
>657
にーって、俺がいちだな。解けた?
だって解らないからしょーがないじゃん。
オリジナルで覆面算作るのもいがいとできないしさ。
だれかほんとお願いします。
>658
プログラムが必要なんです。ブルーフォース?何ですかそれ。
666 :
デフォルトの名無しさん:02/01/16 01:29
653ではないけど僕も同じ学校!に。
>661
べつにどーでもいい話やけど。
全部違う数字なら、総当たり回数は10!になるんやないの?
669 :
デフォルトの名無しさん:02/01/16 01:33
666訂正三人目。頑張ってるけど全くムズカシー。
>>661 あと、
l = ( (c + r + n) / 10 + r + a + i ) / 10 + a + e + g
は
l = ( ( (c + r + n) / 10 + r + a + i ) / 10 + a + e + g ) % 10
ね。念のため。
>>662 >F==0の時はmallocしなくていいのでは・・・?
まったくそのとおりです。脳みそ眠ってました(藁
>・・・いいのでF<0の時だけでいいと思ったんですけど・・・
そうなのですが、もう一度ループまわすのが嫌いなのでそうしました(藁
枝狩りするならab+cd=efgのとき、e=1しかない、っていうような制限も使えるよね。
ryuukokutte hisannna gakkou dane puppupu
>>398 K&R見ればほとんど答え載ってるんだけどなぁ…。(;´Д`)
持ってないよね…?
676 :
デフォルトの名無しさん:02/01/16 01:44
怜さんありがとーございます。
先生は簡単に作れるみたいな事言ってたけどできないんすよ。自分で作ったのを
(例えば haha+titi=ryousin)
と打ったら成り立つか、成り立たないかを判定してくれるHPはあるんですけど意外と成り立たないんですよ。適当に考えても無理なんですかね?
>676
?覆面算をつくるのか解くのか両方か、どっちでもないのか、どれさ?
少し言っておくと、ここのスレに限らずこの板の人は、頑張ろうとして
いる人にはやさしいけど、丸投げクンには冷たいよ。
覆面算作るのは、適当に式作って、1はnとか適当に決めて各桁の数字を
置き換えるだけでいいんじゃないのかな? 意味をもたせたいなら、辞書
用意しないと無理だしね・・。
679 :
657=398:02/01/16 01:46
>>671 m->next = NULL;
って言うところありますけど、新しい単語をmに作って
次のポインタNULLにしたら辞書順に後ろの単語はどこへいくんでしょう・・・?(爆)
ちなみにおいらはryuukokuちゃうますぜ
>>676 んーと入れ違い・・。
簡単に作れるっていうから、きっと単に意味なくてもいいん
じゃないかな?
681 :
デフォルトの名無しさん:02/01/16 01:48
僕もちゃいます。もっと頭悪いとこです(爆)
きっと単に→きっと単語に
683 :
679=398:02/01/16 01:50
684 :
デフォルトの名無しさん:02/01/16 01:51
単語適当にって、それなら僕は
send+more=money、base+ball=games
とかの有名問題のことばを入れ替えるだけでできますよね。そんなのでいいのかな〜
>>684 あー、自分でってプログラムじゃなくて、手で作るってこと?
それはどうだろう・・・。覆面算の作るコツなんて知らないなぁ・・。
検索したら何かコツみたいなのが引っかかるかも。
>>683 398 みたいなのは Perl や Ruby で書けば 20 行くらいだと思うが C じゃないとだめなの?
>>679 strcmpの返り値が逆でした(鬱
(f>0)とf(<0)をそれぞれ逆にしてください。
whileもwhile(!p->next)じゃなくてwhile(p->next)でした。
これじゃループは入れません
で、m->next = NULL;は一番後ろに入れる場合です。
辞書順に入れる場合では、いらない処理です。
大学生は今ほとんど期末試験かな?
学期末のレポート提出も近いのか。。
>>686 >398 みたいなのは Perl や Ruby で書けば 20 行くらいだと・・
まぁ、そうだよね。
だが、それがいい。
690 :
デフォルトの名無しさん:02/01/16 02:26
何かいい例が書いてあるHPないですかね。覆面算の
>>683 世界一有名なC言語の入門書なんだけど…。(-_-;)
692 :
683=398:02/01/16 02:29
成立している覆面算が欲しいなら、適当な足し算を作って、
それを覆面にすりゃいいじゃないか。まぁ、解が1つだけって
保証はないが、ブルートフォースなら、最低1つはみつかるだろ。
なんつーかな。
compが0返すとき、引数の文字列が、リストに加わらないんだが。
>>692 とりあえず途中にデバグルーチン入れて見れ。
>>692 つーか、最初head->nextはNULLだろ?
で、whileいってwhile(p->next != NULL)じゃループは入れないぞ。
ヒント
>>while(p->next!=NULL)
698 :
692=398:02/01/16 02:44
>>628みたいに、リストとポインタの絵を髪にかいたらどうだろう?
700 :
698=398:02/01/16 02:46
昨日からずっと紙に書きながらやってます、でもできません(;´Д`)
in function comp :
strcmpの結果が常に>0で、その結果制御がreturn 0;のところまで来たら、
リストのケツにその文字列を追加しなきゃいけねぇ、って事さ。
そうしないと、その文字列が、リストから、「漏れる」。
>>698 デバッグ用の処理だべさ。
怪しそうなとこにprintfいれて変数の値を表示させてみな。
704 :
700=398:02/01/16 02:56
>>701 わはは、つっこみ所だと思ったよ<髪
>>698 <デバグルーチン
comp()のstrcmp()のところで、なにを比べてるか表示してみたらどー?
706 :
704=398:02/01/16 03:14
う〜〜、わっかんねぇ(;´Д`)
>705
F=strcmp(cdata,p->word);
のあとに
printf("%s %s",cdata,p->word);
つけるだけですよね?
なぜかすぐ実行終了してなにも表示されない・・・
head->'a'->'c'->'d' というリストになってるとするわな。
で、これに'b'を追加する、と。
72行の時点で、pは'c'をさしてるわな。rは'd'。
q->next=r; //'b'->'d',
p->next=q; //'a'->'c'->'b'->'d'
つなぎかたがまちがっているのは一目瞭然やね。
>>706 まず、おちつけ。
プログラムが始まって、最初のcomp()の呼び出しの時、headとかhead->nextは、なにを指してる?
(これ、前にも書いたな)
今リストがこうなっているとする(矢印はnext)
[head]→[abc]→[bcd]→[cde]→[efg]→NULL
p p->next
== r
で、比較単語が[def]。
pの中身と比較してるので、1ループ目[head]は素通り、p=p->nextで、[abc]へ
[abc],[bcd],[cde]と比較していって、問題はココ。
[head]→[abc]→[bcd]→[cde]→[efg]→NULL
p p->next
== r
ここで、strcmpが<0になるので、新規登録になる。(q)
リストは、
[cde]→[def]→[efg]とならなければいけないが、ソースでは、
q->next=r、p->next=qとなっているので、
[head]→[abc]→[bcd]→[cde]→[efg]→[def]→NULL
p p->next
== r
こんなリストができちゃう。
>>707 ケコーンですか。(ワラ
で、また次に同じ奴が来ると、また変なとこに入ってしまう(count++されない)
なので、出力結果に同じ単語が、count 1でいくつも表示されちゃう。
711 :
706=398:02/01/16 03:53
>710
微妙に違う内容の話でないかい?
>709のは、ループ終了条件のバグの話で、
>707のは、リストの挿入につかうポインタのバグの話。
>711
headのmalloc直後の head->next = NULL;を復活させとくように。
それとtempが空のときいcompが呼ばれるのを抑制しとく事。
713 :
711=398:02/01/16 04:02
>>712 >headのmalloc直後の head->next = NULL;を復活させとくように。
これがあるとcompのwhileループが回らないのでは・・・?
それは、>709が指摘したバグだが。
715 :
711=398:02/01/16 04:13
>>715 空白が2度続いたりとか、空白改行とかの場合は、temp[0]="\0"のまま
compにとんでしまう。
で、それが登録されてしまう。
"in ,.\nhello"みたいな文字を喰わせるとどうなるか、という話。
まぁ、headの表示を抑制する事で誤魔化す手もあるだろうが。
最初にcomp()が呼ばれたときは、head->wordは、どーなってる?
719 :
715=398:02/01/16 04:30
ふむふむ・・・
temp[i]='\0';
if(temp[0]='\0');{
F=comp(temp,head
temp[0]='\0';
i=0;
}
こうしても上手くいかないんですけど何ででしょう?
tempが空ってのはtemp[0]='\0'というのとは違うんですか?
比較演算は==ね。(大丈夫だと思うけど)
で、temp[0]='\0'なら飛ばしちゃダメです。
temp[0]!='\0'で。
722 :
719=398:02/01/16 04:38
723 :
722=398:02/01/16 04:40
ああああああ、できた!!
putlist(head)じゃなくてputlist(head->next)だぁ!
残すは4番のみ!
fp1=fp2=stdin;でおわりやないの(w
思ったんだが、単語は左揃えのが感じよくない?
(書式固定なの?)
726 :
723=398:02/01/16 05:00
>>726 最初のほうが表示されてないって事でしょ?
出力が80行を超えるからだね。
DOSだとgetch()を使って表示を止める事ができるけど…。
>729
つか、DOSやろ。LCC試食版でコンパイルしてるし。
間違えた…。
24行だった…。
鬱…。
指定行出力したら、
press enter key to continue..
みたいに入力を求めるようにすれば??
>>730 一応、学校ではUNIXらしいからどうかな…、と思って。
僕はUNIXほとんど知らないけどgetch()みたいな関数あるの?
fgetsで改行まてばええやん。
>>726 for(int i = 0; (i < 1) && ((ch = getchar()) != EOF) && (ch != '\n');i++ );
↑一文字入力待ち。こんなのでもいいよ。
738 :
723=398:02/01/16 05:30
いやぁ、おかげさまでなんとか
>>398の問題終わることができました!
後はあお4つをひとつにまとめるだけ・・・
教えてくれたみなさん、ほんとありがとうございました!!
>>732 素敵なご褒美ありがとう(笑)
>>737 今日はもうこんな時間な上、明日はやく学校行かないと閉まるので
余裕があったら明日考えてみます(^^;
頭混乱してた。。。
>737
それってch=getchar()とどうちがうわけ?
>>741 配列構造に取り込む時に使うソースだった。。。(^^;
743 :
連立方程式が解けません・・:02/01/16 05:48
ガウスザイデル法は解ける係数行列が限られるみたいですね。
>>738 for(int i = 0; (i < 256) && ((ch = getchar()) != EOF) && (ch != '\n');i++ );
一応、書いてしまったので、何を言いたかったのか書いておきます。(^^;
getchar()で文字を待つ場合、ユーザが間違って1文字以上の文字を入力すると、
例:)aaa[enter]
それがストリームに残ってしまうので、次のストップがとばされたりします。
そこで、常にストリームを空にするために上のようなコードにします。
ただし、256文字以上一度に入力があったらバグがおきるので注意。
参考までに。
>>735さんのfgetsが一番いいと思う。
>>398 昨日は寝ちゃってたんだけど、完成したのね。
頑張ったね。お疲れ様。
>>743 とりあえず、
>>601でも書いたけど、基本的に解があれば前処理を
すれば、解けると思うよ。
係数行列の対角成分のうち、どれか一つでも0となるといけないの
ね。これは行を入れ替えることで対処できるわ。例えば
1 2 3 X1 1
4 0 6 X2 = 2
7 8 0 X3 3
って、式は
4 0 6 X1 2
7 8 0 X2 3
1 2 3 X3 1
と、等価よね?
こうすることによって、解ける形にするんだと思うわ。
なるほど
こういう輩がのうのうと単位を取って卒業してくるのか・・・
>>748友達のを丸写しするよりよっぽどマシだよ。
宿題はここで聞けage
>>749少なくとも、何処で質問すればよいかを知っているのは重要。
まぁ2chってのもアレだが。
自分でやってみようという根性すらない学生の方が最近多いYO!
752 :
デフォルトの名無しさん:02/01/18 12:07
>>411ちょうど卒研で同じことやってるYO!
ただ、俺はJavaだけど…。
皆が言ってるみたいにStepとかは考えてないけどね。
ただスレッド使ってsleep()で制御してる…。
疑問に思ったことです
while(scanf("%d",&a)!=EOF)
これは『^Dが「入力されない間」繰り返す』ってことですよね…
(ここがすでに自信ないんですけど)
これを for でやってみようと思って
for(i=1; i<100; i++) /* 仮に百回繰り返すことにして */
{
scanf("%d",&a);
if(a==EOF) break;
}
としてみた所、いくら^Dを入れてもループを抜けなくなりました。
んで、ためしに
scanf("%d",&a);
printf("a = %d",a);
if(a==EOF) break;
としてみて、「a」に格納された数値を出力して見れるようにしてみて、
実行してaに^Dを入力すると、
a=10640000 (間違ってると思いますけどこんな感じの数字)
とでて来ました。EOFってたしか -1 ですよね。
これだったらたしかにif(a==EOF) break;にしても、^D(=1064000)
とEOF(=-1)は等しくならないから、if=「真」 にはならなくて、breakしないのはわかります。
でも上の while(scanf("%d"),&a!=EOF) で^Dを入れたらループを抜けるのは
^D!=EOFでwhileが「偽」、つまり^D==EOFになるからループを抜けるんですよね
なぜfor〜if() breakに書き換えた時に^d=1064000になって、ループを抜けれなくなたのでしょうか
ただのコンパイラのエラー?
In article
>>753, 超初心者/753 wrote:
> for(i=1; i<100; i++) /* 仮に百回繰り返すことにして */
> {
> scanf("%d",&a);
> if(a==EOF) break;
> }
これはこうですね。
int res;
for(i=1; i<100; i++) /* 仮に百回繰り返すことにして */
{
res = scanf("%d",&a);
if(res==EOF) break;
}
# っていうか、scanf()つかうプログラマはドキュソ決定
----------------------------------
||//
(@_@) Kusakabe Keiko
----------------------------------
ありがとうございます。
sacnf()全体==EOF
なんですね…
式よく見たら確かにそう書いてあるような気が…
ついでにもうひとつだけお願いします
教科書にはscanfが最初に載ってるんですけど、
これは普通は使わないものなんですか?
別の所でもお薦めしないといわれました
超初心者ということですいません。
聞く人周りにいないんで…
今さらっと見てきました。
ちょっとそこに書いてること実際にやってみて確認しないとまだ
理解できないレベル(僕が)なんですが、
(知らない単語も結構あったし)
一般的にscanfは扱いにくいということに
なってるんですね。
もう一度後で詳しく見てこようと思います。
ありがとうございました。
758 :
デフォルトの名無しさん:02/01/18 17:28
>>752エレベータの問題を普通に課題として出されたんだけど…
759 :
デフォルトの名無しさん:02/01/18 18:41
すいません ヒントください
>759
何のヒントですか?つか、あなただれですか?
>>759すげー気になる、何のヒントなのかせめてヒントくらいくれ ヽ(`Д´)ノ
怜たんの姿が薄く消えていく・・・。
麻衣たんの姿も消えていく・・・。
ひげずらおやじも冬には弱いか・・・。
日下部さんはたくましい。
怜たんは消えてないとは思うが・・・。
新スレたったら、また新キャラ登場するのかな?
冫─' ~  ̄´^-、
/ 丶
/ ノ、
/ /ヽ丿彡彡彡彡彡ヽヽ
| 丿 ミ
| 彡 ____ ____ ミ/
ゝ_//| |⌒| |ヽゞ
|tゝ \__/_ \__/ | | __________
ヽノ /\_/\ |ノ /
ゝ /ヽ───‐ヽ / /
/|ヽ ヽ──' / < 麻衣たん、私の家にこないか?(;´Д`)ハァハァ
/ | \  ̄ / \
/ ヽ ‐-  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
ピッ! ∩∧,,∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
ミ,,・∀・ミ < 怜たん! とっとこヒントください!
ミ " "ミ \______________
\ ̄ ̄ ̄ ̄ ̄U ̄ ̄\
||\ \
||\|| ̄ ̄ ̄ ̄ ̄ ̄ ̄|| ̄
|| || ̄ ̄ ̄ ̄ ̄ ̄ ̄||
.|| ||
768 :
ビル・ゲイツ:02/01/19 00:11
冫─' ~  ̄´^-、
/ 丶
/ ノ、
/ /ヽ丿彡彡彡彡彡ヽヽ
| 丿 ミ
| 彡 ____ ____ ミ/
ゝ_//| |⌒| |ヽゞ
|tゝ \__/_ \__/ | | __________
ヽノ /\_/\ |ノ /
ゝ /ヽ───‐ヽ / /
/|ヽ ヽ──' / < 圭子たん、マイオフィスにこないか?(;´Д`)ハァハァ
/ | \  ̄ / \
/ ヽ ‐-  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
冫─' ~  ̄´^-、
/ 丶
/ ノ、
/ /ヽ丿彡彡彡彡彡ヽヽ
| 丿 ミ
| 彡 ____ ____ ミ/
ゝ_//| |⌒| |ヽゞ
|tゝ \__/_ \__/ | | __________
ヽノ /\_/\ |ノ /
ゝ /ヽ───‐ヽ / / 怜たん、前スレのお兄ちゃんより
/|ヽ ヽ──' / < 私の方が頼もしいだろう?
/ | \  ̄ / \良かったらマイホームに来ないか?(;´Д`)ハァハァ
/ ヽ ‐-  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
冫─' ~  ̄´^-、
/ 丶
/ ノ、
/ /ヽ丿彡彡彡彡彡ヽヽ
| 丿 ミ
| 彡 ____ ____ ミ/
ゝ_//| |⌒| |ヽゞ
|tゝ \__/_ \__/ | | __________
ヽノ /\_/\ |ノ /bool reitan_is_my_lover=true;
ゝ /ヽ───‐ヽ / / while(reitan_is_my_lover)
/|ヽ ヽ──' / < cout<<"怜「あっ、ゲイツさん・・・あ、はあッ・・・」\n";
/ | \  ̄ / \//(;´Д`)ハァハァ怜たん・・・
/ ヽ ‐-  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
象印クイズヒントでピント。
まずは16分割の問題です.
冫─' ~  ̄´^-、
/ 丶
/ ノ、
/ /ヽ丿彡彡彡彡彡ヽヽ
| 丿 ミ
| 彡 ____ ____ ミ/
ゝ_//| |⌒| |ヽゞ
|tゝ \__/_ \__/ | | __________
ヽノ /\_/\ |ノ /
>>770 ゝ /ヽ───‐ヽ / / すばらしいソース。
/|ヽ ヽ──' / < 実行可能ファイルにしてVS.netの
/ | \  ̄ / \サービスパックに入れることにしよう。
/ ヽ ‐-  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
あ、xyzzyのキーボードマクロの人だ。
冫─' ~  ̄´^-、
/ 丶
/ ノ、
/ /ヽ丿彡彡彡彡彡ヽヽ
| 丿 ミ
| 彡 ____ ____ ミ/
ゝ_//| |⌒| |ヽゞ
|tゝ \__/_ \__/ | | __________
ヽノ /\_/\ |ノ /早速実行可能ファイルを作成した。
ゝ /ヽ───‐ヽ / / WinMXでダウンロードしてくれるといい。
/|ヽ ヽ──' / < UserNameはBill_Gates、ファイル名は怜たんハァハァ・・・だ。
/ | \  ̄ / \
/ ヽ ‐-  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
ビルゲウザイ
コピペ荒シageヤメレ
冫─' ~  ̄´^-、
/ 丶
/ ノ、
/ /ヽ丿彡彡彡彡彡ヽヽ
| 丿 ミ
| 彡 ____ ____ ミ/
ゝ_//| |⌒| |ヽゞ
|tゝ \__/_ \__/ | | __________
ヽノ /\_/\ |ノ /
ゝ /ヽ───‐ヽ / / すみません。もうやめます。
/|ヽ ヽ──' / <
/ | \  ̄ / \
/ ヽ ‐-  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
779 :
デフォルトの名無しさん:02/01/19 10:39
ハリポッターの主人公ってビル・ゲイツに似ていない?
In article
>>779, デフォルトの名無しさん/779 wrote:
似てません(^^)
ゲイツなんかと一緒にしないでください。
----------------------------------
||//
(@_@) Kusakabe Keiko
----------------------------------
781 :
デフォルトの名無しさん:02/01/19 11:02
784 :
き、期限が…:02/01/19 17:54
はじめまして。
Cでアプリケーションを作りたいのです。
作りたいと思っているのはファイルマネージャです。
でも何からはじめたらイイのかぜんぜん分かりません。
まず何を勉強すればいいのでしょうか?
できれば25日までに作りたいので、皆様すこしずつ教えてください。
二次方程式を解くプログラムぐらいまでならいました。
785 :
き、期限が…:02/01/19 18:01
持たせたい機能は在るフォルダ以下すべてのフォルダから
ファイルを取り出して種類ごとにソートするというものです。
787 :
き、期限が…:02/01/19 18:48
うごかしたいOSはWIN98です。
作る環境は以下のページの
C言語を始めよう!という物に
ボーランド++c5.5です。
ファイルを取り出してソートするだけなら余裕だが、
それをユーザにどう見せるかが問題だな。
>>785の技術知識で、bcc55でGUIを0から作ってたら、数ヶ月はかかる。
>>787どうでもいいけどコンパイラ名がメチャクチャだね(藁
CUIならそんなに難しくないと思うけど。
>>788さんの言うように、GUIだと数ヶ月かかるかも…。
BCC55って リソースワークショップ付いてるの?
付いてるなら Windowsコントロールでまにあわせるというのはダメ?
791 :
き、期限が…:02/01/19 21:05
すみません、コンパイラのインストールの途中で
AUTOEXEC.BATファイルの書き換えに失敗して
使おうとしてたノートが起動途中のDOS画面から先に進めなくなってしまって。
で、GUIなら無理っぽいですが、
ファイルを取り出してソートするところを教えてください。
>>791とりあえず、再帰ってわかる?
ポインタとかリスト構造はわかる?
793 :
き、期限が…:02/01/19 21:24
ポインタはわかりますが、他は?
>>793 再帰というのは、関数の中から同じ関数を読み出すような事ね。
で、リストっていうのは、まあリストなんだけど。
ソートするためには、一度そのフォルダの下にある全部のファイル
を調べて覚えないといけない。これをどういった形式で記憶しとくか
というのが問題になるよね?
大きな配列を作ってもいいし、あとはリストを使うか・・ってこと
になるんだけど・・・。
796 :
き、期限が…:02/01/19 21:32
なるほど、大変そうな予感。
私も同じ予感がするわ・・・
初心者が超初心者をバカにしながらオナニーするスレはここですか?
うぜぇから地下でやれよ。
799 :
き、期限が…:02/01/19 21:46
実はこれCでなんかアプリケーションをつくれっていう課題なんです。
でファイルマネージャを作ってみようかと思ったんですが。
こんなに大変だとは。 あーどうしよう。
>>798 いや、地下でやったら初心者ここにたどり着けないから・・。
単発質問スレ&他スレに初心者流出を防ぐために、このスレだけ
は大目に見て欲しいな。
すみません、もう一度考え直してきます。
怜さんありがとうございました。
>Cでなんかアプリケーションをつくれっていう課題なんです。
XORによる暗号化プログラムなんて簡単だしいいかも。
多機能の便利ツールよりは、
>>804 みたいに
ある用途に特化した単機能ツールのほうがいいな。
入力と出力をファイルにして、何かのコンバートを行う
というのがよさげ。
先程はどうも。やっとマイPC復活しました。
>xorによる暗号化プログラム。
うーん、個人的に欲しいかも。ウィンで使えるのが前提ですが。
つか、友達とかはゲーム作るなんて言っているのですが、
自分としてはどうせなら自分が欲しい機能だけもったソフトを作りたくて。
>>805、804さんのような考えで前述の構想にたどり着いたのですが
機能は単純でも自作は到底無理でした。
ある用途に特化した単機能ツールって言うのは
僕のイメージしていた物に良くあっています。
MYPCのメモリが64Kなので複雑かつ多機能なのは勘弁です。
例えば、極窓なんか複数ファイルの拡張子orファイル名の
一括変換にしか使ってないですし。
うーんまた考えてきます。それにしてもみなさん親切です。感謝!
807 :
デフォルトの名無しさん:02/01/20 01:18
>>80664K?(いつのPCだよ)
64Mの間違いだよね?(それともDOSのプロテクトメモリのこといってるの?)
ま、間違えてる
逝って来ます。
809 :
デフォルトの名無しさん:02/01/20 01:49
>>806DOSプロンプト上で入力ファイル名入力→出力ファイル名入力→処理
っていうくらいでいいんじゃないの?最初は。
何にも考えずにscanf使ったりとかでも最初はそれでいいと思うけど。
期限さん、ネタ差し上げます。ずばり、mp3ファイルのID3v1タグの
エディターです。巷のタグエディタより低機能にすれば、これほど簡単なものはない。
まず、mp3ファイルをバイナリエディタで覗いて仕様でも考えてください。
ビットマップファイルのヘッダーを削るプログラムでも作っとけ。
C++で、STGの敵を出すプログラムはどんなのがあるんでしょうか。
IEnemy *e=getEnemyCreator().create(ENEMY_TYPE,this);
e->InitialPos(x,y);
e->Show();
814 :
デフォルトの名無しさん:02/01/21 17:07
1/100圧縮を実現するにはどうしたらいいですか?
ヒントください。
Cプログラミングの宿題を見てほしいのですが、、、
817 :
デフォルトの名無しさん:02/01/21 20:24
1バイトを8ビットに展開するいい方法無いですか?
頭に浮かぶのはビットシフトなんですが、何か効率悪くて。。。
>>817 >1バイトを8ビットに展開する
?
どういうことかわからん。
1バイト=8ビットな場合は、展開するもなにも、そのままで良いと思いますが。
すみません。
使用している環境では1バイト=10ビットなんです。
配列などで、これを8ビットに直したいんです。
余った2bitはどうするのさね?
1111111111 1111111111...
11111111 11111111 1111...
ってとか?
テキストファイルを圧縮してみたいのですが、
圧縮アルゴリズムには、どういうものがありますか?
有名な名前とかあれば、よかったら教えていただけないでしょうか・・・
名前が分かれば検索して調べます
ふつーzlib。
ひょっとして、圧縮したまま検索がかかるような
特殊な圧縮方法探してる?
おっと失礼。アルゴリズムをしりたいんだな。
BlockSort, LZ77 LZW, PPM法
HUFFMAN符号化、算術圧縮, Range Coder,
あたりを調べるよろし。
>>823 ありがとうございました。
zipに使われているものなんですね。
中身を解説してくれているページはまだみつけていませんが、
なんとか調べてみます。
努素人なので、単純なもので十分です。
827 :
デフォルトの名無しさん:02/01/21 23:36
>>820 それは10桁の数を8桁に直したいといってるようなものだぞ。
1000000000をどうやって8桁であらわせるんだ?
>>821,827
ご、ゴメン!
817!=820なんだわ。
あんまり意味不明な質問なんでついふざけてしまった・・・。
まさかそんなやさしいレスがつくと思わなかった。
多分もとの質問は1バイトを2進数で表示したいって事だと思う。
でも効率が悪いと思うならまずその効率が悪いらしいアルゴリズムを提示すべきだと思うぞ
>>817 その方法が最良かもしれないしな。
それにそうしてればこんな状況(俺のせいだけどな)にもならなかっただろうよ。
只今、8人の女王の配置プログラムに奮闘中!
どうやった方が一番効率良く完成できるでしょうか?
一応、僕は永遠とfor分でプログラム中っす!
830 :
デフォルトの名無しさん:02/01/22 00:43
えーっと、何とか解決しました。
しかし、言葉が足りなかったようで、すませんっす。
要は、16進数(1バイト)を2進数(8ビット)に展開するやつです。(と言うより変換ですか?)
初めて再帰呼び出し(かな?)をやりました。
じゃー、質問を変えて。。。
1バイトに工夫してビットを突っ込もうとしたら
どれくらい入りそうですか???
15は入りそうなんだけど。。。
>>820 そうか、提示かぁ・・・。
以後気をつけます。ありがと。
えーっとね・・えーと。
16進数=1バイトじゃないのよね。
1バイト=8ビットね。
だから、2~8種類を表せるの。
で、1バイトが16進数の2桁で表されるのを見て16進数(1バイト)
とか書いたのだろうけど、それは、16*16 = 2^8だからね。
例えば、16進数でA7っていうのは2進法で表すと10100111なの。
Aっていうのは1010 7っていうのが0111だからね。
だから、1バイトにビットを突っ込む(って言い方がよくわか
らないけど)としても、8つしか無理だと思うな。
>831
まずですね、n進数とバイトとビットについて、
もっと一般的な意味をしらべてから質問してみてはいかがでしょう?
ことの発端はある時ふと思いついた素人的新圧縮法です。
しかし、道はメチャクチャ遠そうです。
うんで考え方は簡単。
1バイトに’工夫して'8ビット以上詰め込めたら圧縮できるよなー・・・、って
これって根本的に無茶ですか?
>>829 手作業でやったらできちゃったよ(;´Д`)
対称を抜くとこれって何パターンあるの?
さすがに2パターン目は見つける気がしない。
>>834 可逆圧縮でどんなデータにも対応させたいなら無理です。
1/100の可逆圧縮はどうなった?
うむぅ。。。無理ですか。
残念です。
>>837 その本ホントにわかりやすいですか?(その手のは微妙なのもあるんで。)
お墨付きいただけるなら探してみます。
>>838 極端に言えばそうですよねぇ。
うむぅ。。。
みなさん、解答ありがとうございました。
>>840 つか、どの圧縮法も
「圧縮後の1バイトに工夫して圧縮前の1バイト以上を詰め込んでいる」
1バイト以下だと膨張法だからな
>>831 1バイトに工夫して15ビット入れる具体的な方法の説明を、切に、切に願う。
>>842 できないと出た素人論法を何に使うの?
838の言うとおりだと思うが。
>>841 混乱するといけないから「平均すると」を入れといてやってくれよ。
>>840 >その本ホントにわかりやすいですか?(その手のは微妙なのもあるんで。)
ビットやバイトの定義もまともに解ってないのによくそんなこと言えるな。
プログラム組んでいく前に情報の基礎でも勉強したらどうだ?
>>845 解りやすいと思うなら、素直に胸を張って解りやすいと一言欲しかった。(別の人かな?)
私は2千円とか、パっと出せるほど裕福でも無いのです。
しかし、気に障ったようなら謝ります。
失礼いたしました。
>>847 別の者だよ。
俺が言いたかったのは、情報の基礎もまともに知らないのに、
よく(その手のは微妙なのもあるんで。)なんて言えたな、ということだ。
「微妙なものもある」なんて体験的なことを言えるのなら、
すでにそういう系統の書籍を読んでいなくてはおかしい。
ならば情報の基礎くらいはすでに学んでいるはず。
なのに解っていない。これはどういうことだ?と、いうことだよ。
1バイトに15個入れるに至った経路。(できないことは
>>838をみれば解る。
・1バイトは256、つまり256個の情報が詰め込める。
・オンオフを表現すると128個が限界。
・つまり、1バイトに数を保存するのでは無くて、各ビットがオンだったかオフだったかを保存する。
・8ビットひとまとめには考えない。合計256という制限を活用する。
・色々思案すると、15くらいはいけそうだ。
・私ウキウキ・・・。(吐血
・
>>838に切り出しのことを言われ死。
・・・以上。
>>848 つまりその「微妙なもの」に引っかかって理解できなかったのではないかと考えてみるテスト。
>848
あ、そのニュアンスが伝わらなかったのか。
すいません。
えーっとですね、この世にたくさん存在する「わかりやすい」本って
みても「わかんねーよ」って突っ込むのが(私の場合)結構あるんですよ。
で、お墨付きって言葉を使ってみたんですが、逆効果でしたか・・・。
失礼しました。
>>850 「微妙なもの」に引っかかって、8ビット=1バイトという定義も
覚えられないことはないと思われ。
> ・1バイトは256、つまり256個の情報が詰め込める。
ここが陥りやすいところだな。
俺も始めはそう錯覚した。
256という”1つの”数字をあらわすのと”256個の”情報を表すのではまったく意味が違う。
>>850 そのようですね・・・。
言葉が足りなくなるのは悪い癖です。
精進するため、逝ってきます。
はぅ・・・。
おまけ。
>849の考え方を実現してくれる有志を募集。
もうヤケです。(笑
>1バイトに15個入れるに至った経路
表現の仕方が良くない。それでは意味のある15個の情報と取れる数値を
1バイトの領域に格納する、というように取れてしまう。
> ・オンオフを表現すると128個が限界。
ここダウト。1byteでon-offとして表現できるのは8個。
だから、
> ・つまり、1バイトに数を保存するのでは無くて、
>各ビットがオンだったかオフだったかを保存する。
は、テンで意味をなさない。(その文の前後は同じ意味だから)
>・1バイトは256、つまり256個の情報が詰め込める。
ここですでにダウト。256種類のうちの、どれか1つを表せるだけ。
画像データ の あるパターンの周波数 だけを抽出し、
そこを いじくりたい場合、 フーリエ変換か ウェーブレット変換を
使うのだと思うのですが、 数学に対してあまり知識が
ない私は 理解できませんでした。
なので どのような手順でやれば できるのか教えていただけませんでしょうか?
>>859 数学勉強するのが一番いいと思われ。
ディジタルデータに対して周波数解析するんだったら、
DCT か FFT 使うな。
ウェーブレットは位置(時間)情報と周波数情報を同時に必要なときに使う。
すいません。誰か答えてください
863 :
デフォルトの名無しさん:02/01/22 12:25
ある10進数の数値を入力したら32ビット長の固定小数点数や浮動小数点数、
JIS方式のゾーン型2進化10進法、パック型2進化10進法などに変えてくれる
プログラムとかってありませんか、たすけてください
864 :
デフォルトの名無しさん:02/01/22 12:30
>>862 はい。こんにちは。あんまし元気じゃないっす
今風邪気味。げほげほ
865 :
お願い・・・、ガク。:02/01/22 12:33
誰かオイラーの公式をCで作って〜〜〜〜〜。お願いだ〜〜〜〜。ヘルプミー---。そこのあなた。簡単だからって笑わない!
オネガイシマスダ---。
>>863 10進->浮動小数点
float f;
scanf("%f", &f);
他人に車を運転させて免許とろうって奴ばっかりだな。
868 :
デフォルトの名無しさん:02/01/22 12:57
>>865 知らないようだから、教えてやるが、そういうのを丸投げという。
少しは調べれ。ネタだったら他をあたれ。
869 :
デフォルトの名無しさん:02/01/22 13:20
すいません、教えてください。
宿題で、C曲線かゴッホ曲線かドラゴン曲線か、ヒルベルト曲線のどれかひとつのプログラムを作れと
宿題が出されました。
誰がご教授、または参考になるHPを教えてください。
>>870 どこで検索するのがよいのでしょうか?
あと、プログラムをそのまま載せているHPってあるんですか?
>ヒルベルト曲線
どうやったら描画したことになるんだ?
>>872さん
Turtle Graphicsを使って描くようです。
いまいち原理が分からなくて。
874 :
デフォルトの名無しさん:02/01/22 13:42
>>871 なんでそのまま載せている必要があるんだ?
875 :
デフォルトの名無しさん:02/01/22 13:43
>>876 まず検索の方法を検索したほうがいいと思われます。
そうでなくて、良いHPが見つからないんですよ。
>>879 C言語の授業なんですけど、よく分からないんですよ。
助けてください。
「CLEOS」ってのを使ってるみたいです。
いろいろ検索したんですけど、載ってるHPがないんですよ。
載ってたとしてもjavaとか使ってるみたいですし。
884 :
デフォルトの名無しさん:02/01/22 14:03
>>879 >>879がCのソースっていってるじゃん
そのものズバリ答え教えてもらっといてアフォか?
実は今授業中で、DLできないようになってるんですよ。
だから、まだ確かめてなくて…。
ご指摘ありがとうございます。
次はコンパイルできませんと質問してくるに一票。
コンパイルってなんですか?
盲点だったな。
ってか
>>879をDLして解答すればよいんですよね?
ありがとうございます!
あ、コッホでしたね・・・
#include"turtle.c"
void koch(double,int);
void main(void){
int i;
InitTurtle();
for(i=0;i<6;i++){
X=320;
Y=240;
koch(270,i);
getch();
G_CLS();
}
}
void koch(double L,int n)
{
if(n==0)
{
FD(L);
}
else
{
koch(L/3,n-1);
LT(60);
koch(L/3,n-1);
RT(120);
koch(L/3,n-1);
LT(60);
koch(L/3,n-1);
}
}
これがコッホ曲線のらしいんですが、
こーゆーのが
>>879で出るのでしょうか?
クラスカルのアルゴリズム(C言語で実現:最小木をもとめる)を、
連結リストを用いて実現するにはどうしたら良いでしょうか?
ポインタからやり直します…鬱
ぐあ…検索でいろいろ引っかかりました(汗)
クラスカルはすでに実装できているので自力で頑張ってみます。
お騒がせしました。
>>869 ちょっときみはいくらなんでも場違いだと思うに一票
897 :
デフォルトの名無しさん:02/01/22 16:17
EUCコードで漢字を入れる場合漢字イン、アウトなどってつかうのでしょうか?
898 :
透明人間。(*´Д`)y~~ahu~ ◆73iRGUKc :02/01/22 16:20
その程度のプログラムで満足してる奴
とりあへず逝っとけ
>897
EUCって、状態遷移系のコードじゃねーだろ。
900 :
デフォルトの名無しさん:02/01/22 16:23
ありがとうございます
903 :
デフォルトの名無しさん:02/01/22 17:33
俺の宿題見んなよ!!
905 :
なにとぞお願いいたします。:02/01/22 19:20
C言語の宿題で困っています。
自分で一通り作ってみたのですが、
コンパイルもできませんでた。
問題は以下です。
=====================================
次のように、一行に日付けとその日の最低気温、
最高気温が記録されたファイル(ファイル名:temp.dat)があるとする。
_____________________
1 10.0 30.0
2 12.1 28.8
3 11.3 25.2
4 10.5 27.4
5 13.1 28.0
・・ ・・・・ ・・・・
_____________________
このファイルを読み込んでファイルの中での最高気温が最も高い日の
日付と最高気温、
同様に最も低い最低気温とその日付を表示するプログラムを作成せよ。
906 :
なにとぞお願いします:02/01/22 19:22
自分で書いたものとコンパイルエラー表示は以下です。
=================================
#include <stdio.h>
#include <stdlib.h>
int main(void){
FILE *fp;
int da[i];
double hi[i];
double lo[i];
int i, j, max, min;
if ((fp = fopen("Temp.dat","r"))==NULL) {
printf("file open error!!\n");
exit(1);
}
fscanf(fp)"%d %lf %lf",&d, &f, &g";
for (i = 0; i < (n-1); ++i) {
x = data[i];
max = i;
for (j = i + 1; j < n; j++) {
if (data[max] < data[j]) {
max = j;
}
}
printf("最高気温, 日付=%d\n, %d\n" hi[max], max);
for (i = 0; i < (n-1); ++i) {
x = data[i];
min = i;
for (j = i + 1; j < n; j++) {
if (data[min] > data[j]) {
min = j;
}
}
printf("最低気温, 日付=%d\n, %d\n" low[min], min);
fclose(fp);
}
9-1.c:40:35: missing terminating " character
9-1.c:17:34: possible start of unterminated string literal
9-1.c:36:35: missing terminating " character
9-1.c:13:34: possible start of unterminated string literal
907 :
なにとぞお願いします:02/01/22 19:23
どなたかアドバイスいただけないでしょうか?
908 :
なにとぞお願いします:02/01/22 19:28
すこし訂正しました。(fscanfの部分)
それに伴いコンパイルエラー表示も訂正です。
================================
#include <stdio.h>
#include <stdlib.h>
int main(void){
FILE *fp;
int da[i];
double hi[i];
double lo[i];
int i, j, max, min;
if ((fp = fopen("Temp.dat","r"))==NULL) {
printf("file open error!!\n");
exit(1);
}
fscanf(fp)"%d %lf %lf",&da[i], &hi[i], &lo[i]";
for (i = 0; i < (n-1); ++i) {
x = data[i];
max = i;
for (j = i + 1; j < n; j++) {
if (data[max] < data[j]) {
max = j;
}
}
printf("最高気温, 日付=%d\n, %d\n" hi[max], max);
for (i = 0; i < (n-1); ++i) {
x = data[i];
min = i;
for (j = i + 1; j < n; j++) {
if (data[min] > data[j]) {
min = j;
}
}
printf("最低気温, 日付=%d\n, %d\n" low[min], min);
fclose(fp);
}
9-1.c:40:35: missing terminating " character
9-1.c:17:46: possible start of unterminated string literal
In article
>>906, なにとぞお願いします/906 wrote:
とりあえず間違っている行を教えてあげます。
fscanf(fp)"%d %lf %lf",&d, &f, &g";
printf("最高気温, 日付=%d\n, %d\n" hi[max], max);
printf("最低気温, 日付=%d\n, %d\n" low[min], min);
----------------------------------
||//
(@_@) Kusakabe Keiko
----------------------------------
>>907 このエラーメッセージ程度の英語は読んで下さい…
おながいします。
911 :
なにとぞお願いします:02/01/22 19:34
>>909 ああ!ありがとうございます。
その部分、少し考えてみます。
>>910 見当たらない、終了"文字
終了していないストリング・リテラルの可能なスタート
・・・う〜んちょっと考えてみます。
ありがとうございました。
とりあえず、勘違いしてそうなところを教えてあげます。
・fscanf では、一行分しか読み込めませんので、全行読み込むにはループが必要かも。
・ソートするには2重ループが必要ですが、最低値を求めるときは1重ループで十分かも。
つうか、そのプログラムでは、905のデータは読めないべ。
よくみろよ。MBCSの処理が要るんだよ(w
914 :
なにとぞお願いします:02/01/22 19:43
>>912 ありがとうございます。
しばらく落ちて考えてみます。
>>913 え〜と、MBCSっていうのは「マルチバイト文字セット」でいいんでしょうか?
う〜ん難しそうなフレーズで、、授業でやっていないような。。
もしよろしければどういう処理か教えていただけないでしょうか?
このばあいは、「1」と「1」、「.」と「.」をちゃんと同一に扱う、ってことさ。
916 :
なにとぞお願いします:02/01/22 19:59
>>915 ありがとうございます。
そのための処理をこのコードの中にいれなければいけないってことですね。
少し考えてみます。
> 最高気温が記録されたファイル(ファイル名:temp.dat)があるとする。
> if ((fp = fopen("Temp.dat","r"))==NULL) {
winだと大文字小文字が違っててもファイル開けるんだっけ?
Win/DosはCase Insensitiveだよ。
>>912 > ・ソートするには2重ループが必要ですが、最低値を求めるときは1重ループで十分かも。
b-treeを使えばソートする必要ない。最低値と最大値も勝手に求まる。
それよりも
int da[i];
double hi[i];
double lo[i];
C99ってこれは許されるの?
# C89は無理だけど
gcc拡張やないかな?
>>919 それ以前にこの問題でどこにソートする必要が?
923 :
なにとぞお願いします:02/01/22 20:35
すいません。。
みなさんにアドバイスいただいてから、
少し手を加え、完成に近づきつつあると思うのですが、
下記から一歩も進めないのです。。
どうすれば、、、
コンパイルエラーの表示見ても、何を意味するのかわからないのです。
===============================================================
924 :
なにとぞお願いします:02/01/22 20:35
#include <stdio.h>
#include <stdlib.h>
int main(void){
FILE *fp;
int da[100];
double hi[100];
double lo[100];
int i, j, max, min, n;
printf("number of data =");
scanf("%d", &n);
if ((fp = fopen("temp.dat","r"))==NULL) {
printf("file open error!!\n");
exit(1);
}
for(i=0, i<n, i++){
fscanf(fp,"%d %lf %lf",&da[i], &hi[i], &lo[i]);
}
max = 0;
for (i = 1; i < n; i++) {
if (data[max] < data[i]) {
max = i;
}
}
printf("最高気温, 日付=%g\n, %g\n" hi[max], max);
min = 0;
for (j = 1; j < n; j++) {
if (data[min] > data[j]) {
min = j;
}
}
printf("最低気温, 日付=%g\n, %g\n" low[min], min);
fclose(fp);
}
9-1.c: In function `main':
9-1.c:19: parse error before `)'
9-1.c: At top level:
9-1.c:25: warning: data definition has no type or storage class
9-1.c:26: parse error before `for'
9-1.c:31: parse error before string constant
9-1.c:31: warning: data definition has no type or storage class
9-1.c:33: warning: data definition has no type or storage class
9-1.c:34: parse error before `for'
9-1.c:39: parse error before string constant
9-1.c:39: warning: data definition has no type or storage class
9-1.c:41: warning: parameter names (without types) in function declaration
9-1.c:41: warning: data definition has no type or storage class
9-1.c:43: parse error before `}'
>for(i=0, i<n, i++){
よくみりゃおかしいことに気づくだろうに。
つか、君はプログラムができるまで、
ソースとエラーの掲示を延々続ける気なのかね?
>>924 とりあえず落ち着け、
最初のソースで問題なかった所までおかしくなってるぞ。
for文中の;が,になってたり。
あと909さんが指摘しているように、
printfの引数がおかしい。
それ以外はエラーメッセージを読んで、
参考書なりを照らし合わせれば分かると思う。
あせってるようだけど小一時間くらいは自分で見直してみるのも良いかと。
927 :
なにとぞお願いします:02/01/22 20:52
>>925 どうもありがとうございました。
うっかり気が付きませんでした。
ご迷惑おかけしました。
あとは自分で頑張ります。
つーか、
while(fscanf(/*---*/) != EOF){
/*---*/
}
>>927 最初のソースに比べればかなりよくなってるぞ。がんばれよー。
あと、最大値、最小値を求めるのに、なぜ配列が必要?
とか。
怜さんでも麻衣ちゃんでもいいのでそろそろ次のスレを。
麻衣ちゃん、怜さんに続く女性の身内に登場キボン
次スレの主は怜さんのおばあちゃんです。
お年寄りは大切に。
冫─' ~  ̄´^-、
/ 丶
/ ノ、
/ /ヽ丿彡彡彡彡彡ヽヽ
| 丿 ミ
| 彡 ____ ____ ミ/
ゝ_//| |⌒| |ヽゞ
|tゝ \__/_ \__/ | | __________
ヽノ /\_/\ |ノ /
ゝ /ヽ───‐ヽ / /次スレはぜひとも私をメインキャラ
/|ヽ ヽ──' / < にしてほしい。これはマジレスだ。
/ | \  ̄ / \どうか、お願いする・・・。
/ ヽ ‐-  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
人類初のプログラマ Ada Lovelace 女史きぼん。
世界初のプログラム駆動方式のコンピュータをつくり、
作用素環論の研究、量子力学の研究やゲーム理論の創始など
「20世紀のレオナルド・ダ・ヴィンチ」と評される
フォン・ノイマンを希望。
あ、ノイマンは男か・・・。
939 :
デフォルトの名無しさん:02/01/22 21:52
怜ちゃんの美人お母さんの登場きぼんぬ。
>>938 ほんとだ・・・早速女性の身内と交代を希望されてる・・・(藁
前スレのお兄ちゃんの幼なじみなんていいんでない?
本当は彼のことが好きだけど、怜に遠慮して想いを秘めたままの
健気な女の子。
まんまだけど女教師キボン
ハイミス・インテリ、質問者を厳しく指導しちくり
怜の妹で、同級生。
一緒にレポートがんばろっ、って感じの女の子とか・。
妹を増やせばいいだろ。
‥‥12人くらいに。
945 :
(;´Д`) :02/01/22 22:09
>怜に遠慮して想いを秘めたままの健気な女の子。
(・∀・)イイ!
>>941 それやるなら、お兄ちゃんの名前を決めたいね
しすたーぷりんせす
>>946 例えば"ひろゆき"だったら"ひろゆきちゃん"って呼ぶのか?
それは良いね!
>>949 ちゃんづけなのか?(w
でも、”ひろゆき”はいいかもね。
>お兄ちゃんの名前を決めたいね
西村博之キボンヌ
(´-`).。oO( なんでヲタネタになると賑わうんだろう )
これまでの意見を総合した結果、
世界初のプログラム駆動方式のコンピュータをつくり、
作用素環論の研究、量子力学の研究やゲーム理論の創始など
「20世紀のレオナルド・ダ・ヴィンチ」と評される
人類初のプログラマの美人お母さんの女教師で同級生、
一緒にレポートがんばろっ、って感じの
12人のひろゆきちゃんに決まりました。
漏れは麻衣スレでボソっと発言される
「麻衣を出せ」
の一行レスがなんか好きだった(藁
>>952 おっと、ノイマン氏を一緒にしちゃあいけない。失礼だろう。男だし。
エーダ氏も一緒にしないほうがいい。失礼だろう。
美人お母さんの女教師で幼なじみで同級生、
一緒にレポートがんばろっ、って感じの
12人の妹、名前は全員ひろゆきちゃんに決まりました。
どの板でもヲタネタは賑わう。これ定説。
なにとぞお願いします はどこいった?
この際、「先生!宿題教えてください!」もいいかも。
あ、解答はAAで(w
( ´_ゝ`)フーン
このAAで。
日下部先生?
( ´_ゝ`) //怜たん
ヽ(`Д´)ノウワァァァァァン //宿題でこまったちゃん
ゴルゴきぼん
そろそろ新スレを・・・。
ひげずらおやじは睡眠中か?
うーん、私が新スレたててもいいんだけど、続けてたてちゃうのもちょっとな
と思うので・・・。誰かお願いできないかな?
967 :
suzuki:02/01/23 02:37
先生!教えてください!
doblle型の配列を準備し、適当に6件のデータを読み込み、
それらの平均値を求め、平均値よりも大きな値を配列の前半に、
小さな値を後半に格納するプログラムを教えてください、
入力例
input a[0]=>12.2
input a[1]=>42.8
input a[2]=>83.1
input a[3]=>-12.9
input a[4]=>90.1
input a[5]=>2.26
出力例
平均
968 :
suzuki:02/01/23 02:40
途中で間違って書き込んでしまった
出力例は
output a[0] = 42.80
output a[0] = 83.10
output a[0] = 90.10
output a[0] = -12.90
output a[0] = 12.20
output a[0] = 2.26
ドッペルゲンガーの私、スレ立てありがとう。
,〜((((((((〜〜、
( _(((((((((_ )
|/ ~^^\)/^^~ヽ|
| _ 《 _ |
(|-(_//_)-(_//_)-|)
| 厶、 | cout<<"このスレは無事に正常終了した。\n"
\ |||||||||||| / <<"私が最後の仕事をするとしよう。\n";
|\___/::\
/丶 / / \ return 0;
/,': // ヽ \}
/ /´ ̄ ̄ ̄ ̄ :::::: \-、
/ _/ :: 、 ゙ `\
/ ~_/`'' : 、` ゙ヽ
/ __/`'' ___ ::丶 \:: ヽ、 ヽ
/ / ` ヽ、{丶 ヽ :::ヽ |
/ ~ヽ、ヾ\ ゙i |
。 -´/ /ゝ、 ` _ ヽ、/X
ヽノ :::|/// ~` ''' `' / ヽ
| , | | :::| / | 〃 \ |
{~ ヘ___ \ 。 .:::ノ /_/| | :::| |
丶ノ \__ `- 、_____, -´イイ_| | ::::| | |
{ | \___ \ノ イ_ | | :::| |
{ ´|ヽ、 ,,`i` // \ノ |丶 :丿 |
{´_|_ `'''''´ l //ノヾ,ノ`ゝヽ____ /ヽ,、 |
| i `'''ー-''~ }= ノ ヾ /〃 | ヽ}
ヽゝ、_ } = ヾ | ノ |
975 :
ダダダダーん!:02/01/24 10:43
どうかこれも人助け。クラ−メルの公式をCでやってください。先生おねがい〜。
>>975 うざいよおまえ。
一箇所に書いたら、しばらく待っとけよ。
>>974 マルチポスト野郎のせいで最後の仕事にならんかったな。
printf("ざけんなよ、テメーコラ!>975"); /*終了処理*/
return 0;
/  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ /
/ このスレは無事に /
/ 終了いたしました /
/ ありがとうございました /
/ /
/ モナーより /
/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄/
∧_∧ / /∧_∧
( ^∀^) / /(^∀^ )
( )つ ⊂( )
| | | | | |
(__)_) (_(__)
∧ ∧ ∧
/ ヽ / ヽ_ / .∧
/ `、 _/ `、⌒ヾ⌒ヽ/ ∧
/  ̄ ̄/ u (.....ノ(....ノ / ヽ
l::::::::: |
>>975 u .:(....ノノ
|:::::::::: -=・=- / ̄ ̄ヽ ::::::::::::::/`ヽ
.|::::::::::::::::: \_(___..ノ u ::::::::::::::::::::(....ノノ
ヽ::::::::::::::::::: \/ヽ u ::::::::::::::::::::::::::::ノ
ちょっとdatまで付き合えや…
980 :
デフォルトの名無しさん:02/01/29 18:26
981 :
カイン・ポブレム:02/02/02 23:32
質問してもよろしいでしょうか?C言語の課題なのですが・・・
/*受け取った文字列の中に小文字が含まれているかどうかを判定する関数の入ったプログラムを作成する*/
#include<stdio.h>
#include<string.h>
#define N 100
int mozi(int x[]);
int main(void)
{
char retu[N+1];
ibt a;
printf("何か100字以内で文字列を入力してください\n");
scanf("%c",&retu);
if(mozi(retu)==a){
printf("小文字が含まれています\n");
}else{
printf("大文字だけです\n");
}
return 0;
}
int mozi(int x[])
{
int i,j;
int a,b;
j=x[N];
for(i=0;i<N;i++){
if(j>=0x61&&j<=0x7a){
return 0;
}if else(j>=0x41&&j<=0x5a){
return b;
}
}
}
としたのですが、実行してみると、どんな文字列をいれても「全部大文字」みたいに出力されるのです。
どうしたらいいのでしょうか・・・
バカタレ、sageとけ。
>>980 あげるからこっちに宿題書き込む奴が出るじゃないか。
書き込みすればdat落ちはしないんだから。
>>981 >>980を読め。
/*受け取った文字列の中に小文字が含まれているかどうかを判定する関数の入ったプログラムを作成する*/
#include<stdio.h>
#define N 100
int mozi(char x[]);
int main(void)
{
char retu[N+1];
printf("何か100字以内で文字列を入力してください\n");
scanf("%s",retu);
if(mozi(retu))
printf("小文字が含まれています\n");
else
printf("大文字だけです\n");
return 0;
}
int mozi(char x[])
{
int i,j;
for(i=0;i<N;i++)
{
j=x[i];
if(j>=0x61&&j<=0x7a)
return 1;
}
return 0;
}
これでいいだろう。君はC言語自体理解していない。
次からは、自分自身で進んで取り組むことだ。
そうしないと、後が苦しくなるだけだろう。
高校生より。
ちなみに、このままコピペした状態でコンパイラに通さないように。
全角空白でインデントしてあるからな。
985 :
うさ(本物):02/02/03 00:43
∧ ∧ ∧
/ ヽ / ヽ_ / .∧
/ `、 _/ `、⌒ヾ⌒ヽ/ ∧
/  ̄ ̄/ u (.....ノ(....ノ / ヽ
l::::::::: |
>>980 u .:(....ノノ
|:::::::::: -=・=- / ̄ ̄ヽ ::::::::::::::/`ヽ
.|::::::::::::::::: \_(___..ノ u ::::::::::::::::::::(....ノノ
ヽ::::::::::::::::::: \/ヽ u ::::::::::::::::::::::::::::ノ
おまえも来るか?
まもなくここは 乂1000取り合戦場乂 となります。
\∧_ヘ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
,,、,、,,, / \〇ノゝ∩ < 1000取り合戦、いくぞゴルァ!! ,,、,、,,,
/三√ ゚Д゚) / \____________ ,,、,、,,,
/三/| ゚U゚|\ ,,、,、,,, ,,、,、,,,
,,、,、,,, U (:::::::::::) ,,、,、,,, \オーーーーーーーッ!!/
//三/|三|\ ∧_∧∧_∧ ∧_∧∧_∧∧_∧∧_∧
∪ ∪ ( ) ( ) ( ) )
,,、,、,,, ,,、,、,,, ∧_∧∧_∧∧_∧ ∧_∧∧_∧∧_∧∧_∧
,,、,、,,, ( ) ( ) ( ) ( )