5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

C/C++の宿題なら俺にやらせろ!

1 :C++房 ◇9ye75cT6:02/11/06 17:42
俺はC++房。
今まで8ヶ月、毎日休まず一生懸命C++を勉強してきた。
わからない宿題若しくは処理があったら俺にやらせてくださいm(_ _)m
ただしソート、2分木など俺が5分以上悩むの問題はお断りだ。
他の手強に聞いてくれ

2 :デフォルトの名無しさん:02/11/06 17:43


3 :C++房 ◆Mjk4PcAe16 :02/11/06 17:49
C++房#::
C++房#2

4 :C++房 ◆bK0oO/M0ho :02/11/06 17:49


5 :C++房 ◆9J9ye75cT6 :02/11/06 17:50
 

6 :デフォルトの名無しさん:02/11/06 17:55
前スレ:C/C++の宿題なら俺にやらせろ!
http://pc3.2ch.net/test/read.cgi/tech/1021862587/

7 : ◆9J9ye75cT6 :02/11/06 17:57
お疲れ

8 :お願い・・:02/11/06 17:58
線形探索法の検索の計算量はO(n),
二分探索法はO(log n),

これらは分かるんですが、探索の計算量がO(1)の探索アルゴリズムを
C言語で教えてください、
ちなみにハッシュ法のような複雑な手法を用いないで。。


9 :デフォルトの名無しさん:02/11/06 18:07
ここに神の降臨を待つ質問者がいます。
誰かO(1)のアルゴリズムを発明してあげてください。

10 :デフォルトの名無しさん:02/11/06 18:09
ハッシュ以外でO(1)なのはあるのか?

11 :デフォルトの名無しさん:02/11/06 18:11
配列のインデックスとデータが1対1で対応しているとか。

12 :デフォルトの名無しさん:02/11/06 18:13
>>8
ハッシュ以上に簡単な方法ってあるのかな?
検索したいデータの特徴によっては、裏技があるかも
しれないけど。

13 :デフォルトの名無しさん:02/11/06 18:14
1.探索法である。
2.計算量は、O(1)である。
3.ハッシュよりも単純である。

14 :8です。。:02/11/06 18:17
すみません、、
登録されているデータ値は0以上9999
以内の整数です、というのを書き忘れました。


15 :デフォルトの名無しさん:02/11/06 18:19
>>14
キーが整数ってこと?
データは?

16 :デフォルトの名無しさん:02/11/06 18:21
キーの重複や値の重複があるかどうかを教えてくれ。

17 :デフォルトの名無しさん:02/11/06 18:24
int d[10000];
で解決ですね。

18 :デフォルトの名無しさん:02/11/06 18:25
キーの種類が1000で整数なら、配列に入れるだけで解決だけど。
(これもハッシュといえばハッシュだけど)

19 :8です。。:02/11/06 18:30
問題文をそのまま写します。

線形探索法の検索の計算量はO(n),
二分探索法はO(log n)であった、それでは、探索の計算量が0(1)の探索手法
を考え、その探索アルゴリズムをC言語で記述せよ。またこれが、なぜO(1)なのか
説明せよ。
但し、登録されているデータ値は、0以上9999以内の範囲内の整数とする。
答えは簡単なアルゴリズムである。ハッシュのような複雑な手法は用いないこと。




20 :デフォルトの名無しさん:02/11/06 18:35
>>19
誰が出題した問題か気になるな。目の前にいたらいちゃもんつけたる。(w

21 :デフォルトの名無しさん:02/11/06 18:36
>>19
回答:

int *テーブル = (int*)malloc(テーブルサイズ); // 適当にデータ突っ込んどけや
int result = -1; // 見つかん無かったときは -1 とするよん
for( int i = 0; i<テーブルサイズ; ++i )
 if ( テーブル[i]==検索してる値 ) result = i;
for( int i = テーブルサイズ; i<intで表現可能な最大値; ++i ) i==0;

O(1)な理由:
テーブルサイズに依存せず、比較回数は常にintの最大値、すなわち定数時間である。

22 :デフォルトの名無しさん:02/11/06 18:37
まあ 17 や 18 の言っているやり方だろうね。


23 :デフォルトの名無しさん:02/11/06 18:38
最適化で削られる気がする。

24 :21:02/11/06 18:38
あ、mallocの引数の"テーブルサイズ"とfor内の"テーブルサイズ"は何気に別物だけどその辺脳内補完よろしく

25 :8です。。:02/11/06 18:45
ありがとうございます.
17様、21様のやり方で考えてみます。


26 :gcc:02/11/06 18:45
2つの時刻の和を表示する
プログラムがわかりません。
一応ここまでできました。

#include <stdio.h>
typedef struct date_time{
int hour;
int minute;
}ST_TIME;
ST_TIME add_time(ST_TIME x,ST_TIME y);
int main(void){
ST_TIME jikoku[2],diff;
int i;
for(i=0;i<2;i++){
printf("jikoku[%d].hour :",i);
scanf("%d",&jikoku[i].hour);
printf("jikoku[%d].minute:",i);
scanf("%d",&jikoku[i].minute);
}
diff=add_time(jikoku[0],jikoku[1]);
printf("時刻の和は、%d:%02d です。\n",diff.hour,diff.minute);
return 0;
}
ST_TIME add_time(ST_TIME x,ST_TIME y){

ここまでできました。
教えて下さい。




27 :デフォルトの名無しさん:02/11/06 18:55
ST_TIME add_time(ST_TIME x,ST_TIME y){
ST_TIME sum;
sum.hour = x.hour + y.hour;
sum.minute = x.minute + y.minute;
return sum;
}

28 :デフォルトの名無しさん:02/11/06 18:56
sum.minute = x.minute + y.minute;
while (sum.minute >= 60) {
sum.minute -= 60;
sum.hour++;
}

29 :デフォルトの名無しさん:02/11/06 18:58
sum.minute = x.minute + y.minute;
sum.hour = x.hour + y.hour + sum.minute / 60;
sum.minute %= 60;

30 :デフォルトの名無しさん:02/11/06 19:02
時刻に時刻を足すなんて・・・そもそも意味不明じゃん・・・
時刻に時間を足すんならわかるが・・・・

31 :gcc:02/11/06 19:05
>28
>29
return sum;
}
って最後につけますか?

32 :デフォルトの名無しさん:02/11/06 19:18
ST_TIME add_time(ST_TIME x,ST_TIME y){
ST_TIME sum;
sum.minute = x.minute + y.minute;
sum.hour = x.hour + y.hour + sum.minute / 60;
sum.minute %= 60;
return sum;
}

33 :gcc:02/11/06 20:41
ST_TIME sum;
のsumって何の事ですか?

34 :デフォルトの名無しさん:02/11/06 20:51
Jishohike

35 :デフォルトの名無しさん:02/11/06 23:02
summer_time

36 :デフォルトの名無しさん:02/11/06 23:27
あぁ、踊りの得意な

37 :コンパイラ:02/11/07 21:43
2つの時刻の和を表示する
プログラムが何ですが、
60分は1時間
24時間は1日
とします。これはプログラムの
1部なんですが、何処が違って
ますか?教えて下さい。

ST_TIME add_time(ST_TIME x,ST_TIME y){
ST_TIME sum;
sum.hour = x.hour + y.hour;
sum.minute = x.minute + y.minute;
sum.day = sum.hour/24
while(sum.minute >= 60) {
sum.minute -= 60;
sum.hour++;
}
while(sum.hour >= 24) {
sum.hour -= 24;
sum.day++;
}
return sum;
}



38 :デフォルトの名無しさん:02/11/07 21:58
>>37
>何処が違ってますか?教えて下さい。

実行してみれば分かるじゃん。



39 :コンパイラ:02/11/07 22:15
実行したら、日がうまくでません。

40 :デフォルトの名無しさん:02/11/07 22:17
>>37
26 と同じ話か?

41 :デフォルトの名無しさん:02/11/07 22:20
sum.day = sum.hour/24

42 :コンパイラ:02/11/07 22:21
同じですが、>26は時刻の合計が 24時間を越えても、
時間の桁上がりが生じなかったのです。
今度は24時間を1日とカウントします。

43 :デフォルトの名無しさん:02/11/07 22:22

ST_TIME add_time(ST_TIME x,ST_TIME y){
ST_TIME sum;
sum.minute = x.minute + y.minute;
sum.hour = x.hour + y.hour +sum.minute/60;
sum.day = x.day + y.day + sum.hour/24;
sum.minute %= 60;
sum.hour %= 24;
return sum;
}

44 :デフォルトの名無しさん:02/11/07 22:22
>>1
(´-`).。oO(「悩むの問題」ってなんだよ…)

45 :コンパイラ:02/11/07 22:26
>43
while文などを使ってはできませんか?

46 :デフォルトの名無しさん:02/11/07 22:27
>>45
できるよ。

47 :デフォルトの名無しさん:02/11/07 22:33
>>45
できるけど、何で必要なの?
使わない方がすっきりしてると思うし。

void norm_time(ST_TIME *t)
{
t->hour += t->minute / 60; t->minute %= 60;
t->day += t->hour / 24; t->hour %= 24;
}

ST_TIME add_time(ST_TIME x,ST_TIME y){
x.minute += y.minute;
x.hour += y.hour;
x.day += y.day;
norm_time(&x);
return x;
}

norm_time() は、引き算とかに流用できる。

48 :コンパイラ:02/11/07 22:39
>47
確かにそうなのですが、>43のプログラム以外の
プログラムが勉強のために欲しかったのです。
ありがとうございました。

49 :デフォルトの名無しさん:02/11/07 22:43
どうせ課題で「whileを使うこと」みたいな条件がでてるんだろ。

50 :コンパイラ:02/11/07 22:56
>50
でてない。
構造体の課題で、whileを使うかどうかなんて
関係ないでしょ

51 :デフォルトの名無しさん:02/11/07 22:56
>>48
常に最適解を求める勉強をしてくれ。

52 :デフォルトの名無しさん:02/11/07 22:57
つーか、腕試しなら人に訊くな。

53 :デフォルトの名無しさん:02/11/07 23:03
>>50
つーか、結局課題なのかよ。
自分で解けよ。

54 :デフォルトの名無しさん:02/11/07 23:04
>>52
腕試しでないと思われ

55 :デフォルトの名無しさん:02/11/07 23:05
>>53
解けないから、ここに来てるんだろ

56 :デフォルトの名無しさん:02/11/07 23:11
>>53
いや、ここはそのためのスレじゃないのか?

57 :デフォルトの名無しさん:02/11/07 23:28
>>56
よく考えたらそうだな。

58 :デフォルトの名無しさん:02/11/08 01:02
>>51-57
ここの最適解を(以下略

59 :デフォルトの名無しさん:02/11/08 01:16
>>58
任せた。

60 :デフォルトの名無しさん:02/11/08 09:46
OnDraw関数のなかで以下のように線画を描画しました。

double kakudo = 0.0;
double pai = 3.14159265;
double rad = pai / 180;
double rad1 = kakudo * rad,
rad2 = (kakudo + 180) * rad;
POINT start, center, end;
double r = 30.0;
center.x = 90;
center.y = 90;
start.x = (int)(r * cos( rad1 )) + center.x;
start.y = (int)(r * sin( rad1 )) + center.y;
end.x = (int)(r * cos( rad2 )) + center.x;
end.y = (int)(r * sin( rad2 )) + center.y;
pDC->MoveTo(start);
pDC->LineTo(end);

メッセージハンドラOnLBUTTONDOWNを用いてkakudoの値を制御し、
線画の再描画を促すようにしたいのですがわかりません。
(線画が画面内で一回左クリックする毎にkakudoの値をインクリメントし、
傾きが増していくといった感じです。)



61 :デフォルトの名無しさん:02/11/08 12:34
メッセージハンドラを持つクラスでkakudoをメンバ変数にしたら。

62 :デフォルトの名無しさん:02/11/08 14:56
C言語の勉強を始めた者ですが
ファイルを読み込むプログラムで
char string[10] の配列の中に
12_15_____
(_は空白です )
ていうふうに数字(char型)で入っているときに
12と15という数字を二つ取り出す(int型の変数として使いたい)にはどうすれば良いのでしょう??
ちなみに12とか15が124と4みたいに3桁になったり1桁になった時にもちゃんと取り出したいのですが・・・

お願いします!!

63 :デフォルトの名無しさん:02/11/08 14:58
sscanf

64 :こういうことか?&rlo;?かとこういうこ:02/11/08 15:06
>>62
#include<stdio.h>

int main(void)
{
char string[10];
char *p;

string[0]=12; /* *(string+0)=12 */

string[2]=15; /* *(string+2)=15 */

p=string; /* p=&string[0] */

printf("char[0]..%d,char[2]..%d",*p,*p+2);

return 0;
}

65 :62:02/11/08 15:08
早速レス感謝
言葉足らずでした。なにせC言語がよくわからないもので・・・

実は参考にしたプログラム(ファイルの読み込むプログラム)で
fgets(string, 200, fp);
sscanf( string, "%d", &val );
という感じの部分があるのですが

fgets(string, 200, fp);
というのは
これはfpファイルの一行をstringに入れなさい!みたいな意味ですよね??

sscanf(string, "%d", &val );
それでその後のこれは
読み込んだstringをvalという変数に10進数でいれなさい!みたいな意味ですよね??

これを実行するとあたり前なのかもしれないですが
14_12______
というのがもとのファイルだと
14という数字しか認識されずに12というデータがなくなってしまいます。
12という数字を読み取るにはどうすれば良いのでしょう??

66 :デフォルトの名無しさん:02/11/08 15:10
sscanf(string, "%d %d", &val, &val2 );

67 :デフォルトの名無しさん:02/11/08 15:13
>>65
人に聞くときは、初心者であろうが、凡人であろうが
実装プログラムを書くのが一般的。


68 :62,65:02/11/08 15:19
>>66
ありがとうございます!できました!!
この2日間の悩みが解決できました。感謝です

>>67
ご指摘感謝
次回お世話になる時はそうします


69 :両津勘吉:02/11/08 16:15
#include <stdio.h>
#include <string.h>
#define TINTERVAL 4500000
int main()
{
int i,j, k;
char *a = "This is a test";
  char *b;
  printf("%s\n", a);
for (k=0; k < 5; k++) {
/* forward */
b =a; /* point to first character */
for (i=0; i <=strlen(a); i++){
if (i > 0) {
/* 必要なだけスペース出力 */
for (j = 0; j < i; j++)
printf(" ");
}

70 :両津勘吉@つづきです:02/11/08 16:16
}
if (i < strlen(a)) {
printf("%c\r", *b);
}
else {
printf("\r");
}
fflush(stdout);
b++;
/* sleep(1); 少しポーズする */
for (j=0; j < TINTERNAL; j++) {
}
}
      printf("\n");
return 0;
}

大ピンチになっています。上のプログラムを改良して両津勘吉という名前を
一文字づつ表示するプログラムはなんとかできました。
でもそこは提出しなくていいらしくて、今度はそれを改良して、両津勘吉という文字を、
一文字づつ左に表示して、左端についたら次に右に一文字づつ
表示するプログラムを作りたいのです。

どなたか暇な方がいたらよろしくお願いします。


71 :両津勘吉:02/11/08 16:18
出力例

1     吉
2    勘
3   津
4  両
5   津 
6    勘
7     吉

どなたか助けてくださいお願いします



72 :両津勘吉:02/11/08 16:19
1        吉
2      勘
3    津
4  両
5    津 
6      勘
7        吉


73 :デフォルトの名無しさん:02/11/08 16:27
左端って右端から何文字目って決まっているの?

74 :デフォルトの名無しさん:02/11/08 16:32
というか、そもそも、「上のプログラム」が正しく動かないんだが。
Win32Consoleだからなのか?

75 :デフォルトの名無しさん:02/11/08 16:52
#include <stdio.h>
#include <string.h>
#include <wchar.h>
#include <locale.h>
#include <windows.h>
int wmain()
{
int k;
wchar_t *a = L"両津勘吉";
int len = wcslen( a );
setlocale(LC_ALL, "jpn");
wprintf(L"%s\n", a);
for (k=-len+1; k < len+1; k++) {
 wchar_t *b = &a[ abs(k)];
 if( k )
   wprintf(L"%*c", abs(k)*2 , L' ');
 wprintf(L"%c%*c\r", *b, (len-abs(k))*2, L' ');
 Sleep(1000);
}
wprintf(L"\n");
return 0;
}

つーか、これでいいのか?

76 :両津:02/11/08 17:42
>>75さん




いまCCがうまくいきますた。何とかなりそうですありがとうございます。



77 :デフォルトの名無しさん:02/11/08 17:59
CCってカードキャプター?

78 :デフォルトの名無しさん:02/11/08 18:49
>>77
そうです。

79 :デフォルトの名無しさん:02/11/08 20:58
1.足し算関数を作成しなさい

int hoge( short* a, short b )
引数
short* a 加算先
short b 加算数
戻値0 正常
1 加算でオーバーフロー

…という問題が出されたんですけど、わかりません。


80 :79:02/11/08 20:59
#include<stdio.h>
#include<stdlib.h>
short *wk;
int hoge( short *a, short b );
int hoge( short *a, short b )
{
int c=0;
printf("%d",wk);
if(abs((long)a+ (long)b)>0x7fffL)return(1);
elsereturn(0);
}
void main(void)
{
short b;
while(!(hoge(wk,b)))
{
rewind(stdin);
printf("input num... >");
scanf("%d",&b);
printf("%d\n",hoge(wk,b));
}
}
なんとかここまでできたんですけど、どなたか助けていただけませんか?


81 :デフォルトの名無しさん:02/11/08 21:04
>>79
*a == -30000
b = -30000
だった場合どうするの?

82 :81:02/11/08 21:06
= が一個抜けた…

83 :デフォルトの名無しさん:02/11/08 21:06
>>79
??ただ単に、
int hoge( short *a, short b ) {
int res = *a + (int)b;
if ( res > SHRT_MAX || res < SHRT_MIN ) return 1;
*a = res;
return 0;
}
こういうことじゃないの?

84 :79:02/11/08 21:07
>>81
abs()で絶対値とってるからオーバーフローになると思います。

85 :79:02/11/08 21:15
>>83
そうだったんですか…
ありがとうございました。

86 :デフォルトの名無しさん:02/11/08 21:19
>>84
80ちゃんと読んでなかった。

アンダーフローの場合は?て聞こうとしたんだけど、
調べてみたらアンダーフローを勘違いしていることが
わかった。

スマン

87 :デフォルトの名無しさん:02/11/09 02:00
C++Builder 5で作っているんですが、コマンドプロンプト内に四角の箱を書き
その中に文字を入れるにはどうすればよろしいんでしょうか。。
windows.hを使ったような覚えがあるのですが忘れてしまって

88 :デフォルトの名無しさん:02/11/09 02:32
>>87
ちょっと待て。
コンソールウィンドウにテキストボックスを置こうと言うのか?
標準の方法で自分のコンソールウィンドウのハンドルを捕らえるのは無理だが。
普通に標準入力から読むわけには逝かないのか?

89 :デフォルトの名無しさん:02/11/09 02:35
VC++6.0なんだけど
#include <vector>



vector<int> vct;
と宣言してもエラーが出るよーっ!
使い方教えて!


90 :デフォルトの名無しさん:02/11/09 02:43
using namespace std;

91 :デフォルトの名無しさん:02/11/09 02:48
あるいは std::vector<int> vct;

名前空間を知ってね。

92 :87:02/11/09 21:42
>>88
Borland C++ Compiler 5.5でした・・・
DOSプログラムを作っているのですが、おっしゃる通りコンソールウィンドウ(DOS画面)に
テキストボックスを作ろうとしているのです
なにやらDOSでタイピング練習ソフトを作れという課題でして、悩んでます

93 :デフォルトの名無しさん:02/11/09 21:59
>>92
だから・・・。
普通に標準入力から読むわけには逝かないのか?

やってできない事は無いかもしれないが、確実な方法を実装できたらそれは神だぞ。
「コンソールウィンドウのハンドルを捕らえるのは無理」 = 「どのウィンドウに
テキストボックスを作ればいいか判断できない」 わけだから。

94 :デフォルトの名無しさん:02/11/09 22:04
あれじゃねーの、
printf("┌───────────┐");
みたいな。

95 :デフォルトの名無しさん:02/11/09 22:09
はさみうち法の問題なんですが、以下のプログラム書いたんですが、
汎用的にする改良や、使いやすくするための改良などを考えたいんですが、
どうしたら良いでしょうか?

マクロとか、グローバル変数、乗算などの減少などくらいでしょうか…

#include <stdio.h>
double m = 4.0, n = 8.0, mn = m*n,a0 = ((1 - n*n)*mn),a1 = (3*mn*n - m),
a2 = (-3*mn),a3 = m;
double f( double x );

void main (void)
{
double q0, q1, q2;
int k, i;
k = 31;
q0 = n - 0.5;
q1 = n + 0.5;

if ( f( q0 )*f( q1 ) < 0 ){
for ( i = 1; i <= k; i++ ){
q2 = ( f( q1 )*q0 - f( q0 )*q1 )/( f( q1 ) - f( q0 ) );
printf( "k =%3d x = %12.4le\n", i, q2 );
if ( f( q2 )*f( q1 ) > 0 ){
q0 = q2;
}



96 :95:02/11/09 22:10
else
q1 = q2;
if ( q2/8.0 >= 0.99 ){
break;
}
}
printf( "真の解との誤差1%%以下を得るのに必要な回数は%dです。\n",i );
}
else
printf( "初期値エラー\n" );
}
double f( double x )
{
double y;
y = a3*x*x*x + a2*x*x + a1*x + a0;
return y;
}


97 :デフォルトの名無しさん:02/11/09 22:13
「DOSでタイピング練習ソフトを作れ」と
「それにはテキストボックスが必要」
と考えるにいたる経緯に興味がある。

98 :デフォルトの名無しさん:02/11/09 22:13
どう使いやすくしたいのかわからん。


99 :デフォルトの名無しさん:02/11/09 22:34
printf("┌───────────┐");
printf("┌ABCDEFGHIJK┐");
printf("┌LMNOPQRSTUV┐");
printf("┌CUTXYZ・・・・・┐");
printf("└───────────┘");
とでもしておけ。

100 :デフォルトの名無しさん:02/11/09 22:35
ぱっと見
>>95
変数見づらい。

オブジェクト化するなら
メンバ変数に vector<double> hoge
を使ってf(x)のn次関数を管理か。
hoge[n]でf(x)の係数を格納。

101 :デフォルトの名無しさん:02/11/09 22:36
printf("┌───────────┐");
printf("|ABCDEFGHIJK|");
printf("|LMNOPQRSTUV|");
printf("|CUTXYZ・・・・・|");
printf("└───────────┘");
とでもしておけ。

102 :デフォルトの名無しさん:02/11/09 22:37
bccにはリソースエディタついてないんですか?

103 :超初心者:02/11/09 22:38
>>98
汎用化したいのだろう?

>>95
面白そうなんで組んでみる。

104 :デフォルトの名無しさん:02/11/09 22:41
printf("┏━━━━━━━━━━┓\n");
printf("┃A B C D E F G H I J K ┃\n");
printf("┃L M N O P Q R S T U ┃\n");
printf("┃V W X Y Z        .┃\n");
printf("┗━━━━━━━━━━┛\n");

とかこういうことだったりして名w

105 :デフォルトの名無しさん:02/11/09 22:42
>>102
誤爆スマソ。

106 :デフォルトの名無しさん:02/11/09 22:44
ttp://www.mech.tohoku-gakuin.ac.jp/nken/java/hasGraph.html
>>95
こんなのあった。

107 :デフォルトの名無しさん:02/11/09 22:53
>>95-96
勤労感謝の日だって・・・いつだっけ?

108 :デフォルトの名無しさん:02/11/09 22:56
煩悩

109 :デフォルトの名無しさん:02/11/09 23:05
intのベクタを作って、
10個予約して、
イテレータでベクタの先頭を見て、
イテレータを進めて、
1を入れたら実行時エラー。

vector<int> a;
a.reserve(10);
vector<int>::iterator i = a.begin();
++i;
a.insert(i, 1); // ここでエラー

これってなんかまずいことやってるんですか?


110 :95:02/11/09 23:06
>>100
変数は、何か単語みたいなの方が良いんでしょうか?
「使いやすさ」という点でそこら辺を考慮してみて、考察したいと思います。

オブジェクト化…(以下略
は、ちょっと良く意味が分からないので、調べてみます。
レスありがとうございました。

>>103
そうです、汎用化したいのです。#Define とか使えそうですかね?

>>106
今から見てみます。わざわざありがとうございます。

>>107
???

111 :デフォルトの名無しさん:02/11/09 23:06
a[i]=1;

112 :95:02/11/09 23:07
>>110
defineか…

113 :106:02/11/09 23:09
>>95
#defineではなくて>>100の言う通り、メンバでまとめる方向で。

114 :103:02/11/09 23:10
誤 106
正 103

115 :106:02/11/09 23:18
誤 103
正 106


116 :95:02/11/09 23:19
>>113
メンバって構造体とかあの辺でしょうか?
実はまだ習ってないんです。いい機会なんでそこら辺読んで見ます。

乗算ってなるべく回数減らすように、うまく変形したほうが良いんですよね?
pow()ってのがありますが、これはアルゴリズム的にあまり優れてないんでしょうか?
これはlog計算してからというように遠回り(?)してるので、効率的でないと
聞いたことがあります。どうでしょうか?

117 :デフォルトの名無しさん:02/11/09 23:21
>>109
a.reserve(10); → a.resize(10);


118 :103:02/11/09 23:25
>>113
なかなか2分法・・・手ごわいです。

>pow
えっ・・・、普通にpowで組んでいますが。
そこまで速度は変わるものではないと勝手に思い込んで作っちゃっています。

119 :デフォルトの名無しさん:02/11/09 23:30
こういうのか?
ax^3+bx^2+cx+d
((ax+b)x+c)x+d

120 :95:02/11/09 23:34
>>118
いや、このくらいのプログラミングなら問題ないんですがね…

自分がやってるのは詳しく言うと、
f(x) = mx^3 - 3mnx^2 + (3mn^2 - m)x -mn^3 + mn
って、式があって、mとnは各人違う値が与えられて、
その解の一つの前後0.5で、はさみうちを実行して、真の解に対して1%
以下の誤差になるまで何回計算したらいいのか?

って感じです。
しかし、収束が早いのか1回で求まる。
ニュートン法も1回でした。2次収束でこれだけ速いのか…

121 :95:02/11/09 23:35
>>119
そうです。そういうことです。乗算の回数はできるだけ減らしたほうが
効率はあがりそうですから。加算に比べて乗算は4,5倍遅いって聞いたことあるので。

122 :デフォルトの名無しさん:02/11/09 23:39
>>116
double使ってる時点であんまり関係ないと思う。
再帰的にX^nを求めてやってX^2〜X^nをどこかに
ストックして再利用すれば、計算は減らせるね。
挟み込むべき点を導関数で求めてやる時にも
使えそうだし。

123 :95:02/11/09 23:42
>>122
そっか〜。では、m,nをintにして、キャストしてみるってのはどうでしょう?

124 :95:02/11/09 23:45
>>120
間違った…
nの前後ではさみうちだった…

とりあえず風呂入って考えてきます。

125 :デフォルトの名無しさん:02/11/09 23:47
>>123
m,nの範囲の想定次第。

126 :95:02/11/09 23:49
>>125
そうですが、この場合は整数しかみんな与えられませんでしたので。
しかし、汎用性を考えるとやはりdoubleか。

127 :デフォルトの名無しさん:02/11/09 23:55
q2 = ( f( q1 )*q0 - f( q0 )*q1 )/( f( q1 ) - f( q0 ) );
はさみうちってこうやるの?
q2 = (q0+q1)/2;
かと思った。

128 :103:02/11/10 00:00
>>95
汎用設計は、ほぼ出来たよー。
、て言うかクラスのヘッダー部分だけ('д';)

方程式の計算等はみんなの方が詳しそうだから任せたー。

129 :デフォルトの名無しさん:02/11/10 00:05
>>127
if ( f( q2 )*f( q1 ) > 0 ){
  q0 = q2;
}
else
  q1 = q2;
とあるじゃん。
少し違うけど。

130 :103:02/11/10 00:15
>>95
長く考えた結果、こんなものしか出来なかったんですが。

class Func{
private:
vector<double>hoge;//係数を格納
double calc(double x);//xで求まる任意の数を計算
public:
Func(vector<double>);
//関数名:GetSol(2分法)
//引数eは誤差
//誤差が不適切だと計算が終わらなかったりするので注意。
//a,bが異符号であるチェックを仕込んでくれ
double GetSol(double a,double, b,double e);
//以下、ニュートン法等色々な関数が並ぶ事になる
//double GetSol(...);
//double GetSol(...);

//operator等仕込むと、更に汎用性が高くなって面白いかも。
};

131 :デフォルトの名無しさん:02/11/10 00:20
>>127
それじゃ一回目で終わるだろが。

132 :95:02/11/10 00:29
>>127
なんすか、それ?平均?

>>130
ありがとうございます。
しかし、見たことないのが一杯…く、くらす?
もしやC++っすか?すみません、Cの課題なんです。
言ってなかったですね。本当に申し訳ないです。

133 :デフォルトの名無しさん:02/11/10 00:30
>>95
こんなんどう?作ってたら、いろいろ手が入っちゃった。

int hasami(double (*f)(double), double q0, double q1, double dx, double* x)
{
 int k = 0;
 double q, f_q0, f_q1, f_q;
 f_q0 = f(q0);
 f_q1 = f(q1);
 if (f_q0 * f_q1 < 0) {
  for (;;) {
   k += 1;
   q = (f_q1 * q0 - f_q0 * q1) / (f_q1 - f_q0);
   f_q = f(q);
   // printf( "k =%d x = %12.4le\n", k, q);
   if (f_q * f_q0 < 0 ){
    q1 = q;
    f_q1 = f_q;
   } else if (f_q * f_q0 > 0 ){
    q0 = q;
    f_q0 = f_q;
   } else {
    break;
   }
   if (fabs(q1 - q0) <= dx){
    break;
   }
  }
  *x = q;
 }
 return k;
}

134 :133:02/11/10 00:38
>>132
> double m = 4.0, n = 8.0, mn = m*n,a0 = ((1 - n*n)*mn),a1 = (3*mn*n - m),
> a2 = (-3*mn),a3 = m;
Cでコンパイルしたら、ここの部分が通らなかった。
なんで、オレもC++だと思って、C++でしかコンパイル通してない。

135 :デフォルトの名無しさん:02/11/10 00:40
>>127
中間値?

136 :103:02/11/10 00:43
>>95
ま・・・まじっすか〜。~(°°;)))オロオロ(((;°°)~

しかし、こちらも勉強になりました・・・。

137 :95:02/11/10 00:43
>>133
なるほど。はさみうち自体を関数にしてしまって、回数を戻すってことですか。

(*f)(double)とdouble* xは何なんでしょうか?後者は真値でしょうか?

>>134
え!?マジっすか?VisualC++でやってるからコンパイルできたんでしょうか?

138 :103:02/11/10 00:48
しかし、>>130修正。
コンストラクタはdouble配列で渡すようにした方が汎用性よし。
SetFuncやらを追加して、関数の定義しなおしを定義するように
した方がいい。(その場合、コンストラクタをオーバーロードできて
いい感じかも)

もうぜんぜん関係なかったけど以上です。

139 :デフォルトの名無しさん:02/11/10 00:49
>>137
double (*f)(double) 引数 double 戻り値 doubleの関数のポインタ。
double* x はxのポインタ。
将来Cを使い込むのであればポインタは理解しとくといい。

140 :95:02/11/10 00:50
>>138
本当にすみません…

141 :デフォルトの名無しさん:02/11/10 00:53
関数のポインタ f ってのは、
double Func(double a){
}
という関数があるとき
f=Funcと関数を値(アドレス)にできること。

142 :103:02/11/10 00:53
>>95
いいって事よ♪

143 :139:02/11/10 00:54
x はxのポインタ-->x はdoubleのポインタ
シマツタ

144 :デフォルトの名無しさん:02/11/10 00:55
103ってイイ奴だな。

145 :95:02/11/10 01:06
ってことは、
k = hasami( &f,q0, q1, 0.08,&x);
printf("回数 = %d\n",k);

って感じでいいんでしょうか?
はさみうちを関数にしたほうが汎用性は高いですね。


146 :133:02/11/10 01:23
>>145
そんな感じ。
なんでxも表示しないのか気になるけど。

147 :デフォルトの名無しさん:02/11/10 14:13
ax + by + cz = d
ex + fy + gz = h
ix + jy + kz = l

という連立方程式について、x,y,zについて解くプログラムを教えてください。
a〜lは任意の文字式です。

148 :デフォルトの名無しさん:02/11/10 14:14
行列を勉強してください。

149 :デフォルトの名無しさん:02/11/10 14:19
課題
   1234と打ったら4321と表示されるようなプログラムを作成しなさい。
   ただし、123400などの場合は4321とする。

ヒントは10で割った余りを使うらしいんですけど
for文がいまいち理解できてないので分かりません。お願いします。

150 :PROBLEM 1: Outdoor Cow Friends [Brian Dean] :02/11/10 14:25
Farmer John has N cows and K adjacent grazing fields in a row.
Every morning, his cows leave the barn in a single-file line in a specified ordering.
FJ leaves N1 contiguous cows at the front of the line in the first field,
and continues with the rest of the fields,
leaving N2 cows at the front of the line in the next field, and so on,
until all of the cows have been deposited into some field.
The cows stay in the fields in which they are deposited and do not move around.

FJ's cows are very sociable, and each cow has a group of friends with
whom she prefers to graze. Define a friendship as an unordered pair
(i,j) such that cow i and cow j (i != j) prefer to graze in the same field.
Here i and j are indices from 1..N indicating the cows' positions in the single-file line leaving the barn.

We say a friendship (i,j) is satisfied if cows i and j end up grazing in the same field.
Pairs are unique in the input. So, if (i,j) is in the input,
it is listed only once, and (j,i) is not listed.

Given a list of friendships, determine the placements of cows FJ should use
in order to maximize the number of friendships that are satisfied.
Your output will be the maximum number of friendships that can be satisfied.

FJ insists that none of his K fields may remain empty and that no field contains only one cow,
since that cow will then feel outcast.

INPUT FORMAT:

* Line 1: Three integers, N, K, 4 <= 2*K <= N <= 150, and F
(1 <= F <= 200), the number of friendships.

* Lines 2..F+1: Each line contains a two integer friendship pair, each
integer is in the range 1..N.

151 :デフォルトの名無しさん:02/11/10 14:53
y=x*10+z%10;
z=z/10;

152 :デフォルトの名無しさん:02/11/10 14:57
>>149
#include <stdio.h>
main()
{
    char b[256];
    gets(b);
    if((!strcmp(b,"1234"))||(!strcmp(b,"123400など")))
        puts("4321");
return 0;
}


153 :デフォルトの名無しさん:02/11/10 15:06
>>149
専修・・・

154 :デフォルトの名無しさん:02/11/10 15:08
#include <stdio.h>
#include <math.h>

int main(void)
{
int data[8];
int num_i;
int num_o=0;
int i,x;

printf("8桁の整数を入力してください:");
scanf("%d",&num_i);

for(i=0;i<8;i++)
{
data[i]=num_i%10;
num_i/=10;
}

for(i=0;data[i]==0;i++)
;

for(;i<8;i++)
num_o+=data[i]*pow(10,(7-i));

printf("%d\n",num_o);

return(0);
}

155 :デフォルトの名無しさん:02/11/10 15:09
>>149
演習ですか?

156 :デフォルトの名無しさん:02/11/10 15:21
>>153
専修の課題です。

157 :デフォルトの名無しさん:02/11/10 15:24
専修って、専門って意味?

158 :デフォルトの名無しさん:02/11/10 15:27
専修大学ネットワーク情報学部

159 :149:02/11/10 15:38
違う大学ですが・・・

160 :デフォルトの名無しさん:02/11/10 15:41
あ、専修って大学があるのね。

161 :149:02/11/10 15:46
154のプログラムだと8桁以外はうまくいかないんですが。
あと123400などの場合は4321ってのも。

162 :デフォルトの名無しさん:02/11/10 15:52
>>161
当たり前だろ。配列数8なんだから…
00のところは条件判断で捨てればいいんじゃないの?

163 :デフォルトの名無しさん:02/11/10 15:54
>>162
可変長配列使うって手は?


164 :154:02/11/10 15:55
>>161
#include <stdio.h>
#include <math.h>

int main(void)
{
int data[8];
int num_i;
int num_o=0;
int i;
int count=0;
printf("8桁までの整数を入力してください:");
scanf("%d",&num_i);
for(i=0;;i++)
{
data[i]=num_i%10;
count++;
if((num_i/10)<1)
break;
num_i/=10;
}
for(i=0;data[i]==0;i++)
;
for(;i<count;i++)
num_o+=data[i]*pow(10,((count-1)-i));
printf("%d\n",num_o);
return(0);
}

165 :JPS ◆M0LaMzf5rY :02/11/10 15:57
8桁までだから、そこはお前が欲しい最大の桁に変えればいいべ。


166 :デフォルトの名無しさん:02/11/10 15:59
>>163
それでscanfして勝手に灰列数変えればいいか。マクロ使ったほうが良さそう。

167 :149:02/11/10 16:06
たしか配列使わなくてもできるって言ってました。

168 :JPS ◆M0LaMzf5rY :02/11/10 16:09
>>167
オレには分かんない。ごめん。

169 :103:02/11/10 16:25
>>167

#include <stdio.h>
int main()
{
int x;
printf("整数を入力してください");
scanf("%d",&x);
while(x != 0){
if( x - ( (x / 10) * 10 ) != 0 ){
printf("%d",x - (x / 10) * 10 );
}
x /= 10;
}
printf("\n");
return(0);
}

170 :103:02/11/10 16:27
ということで、出かけてきます。

171 :149:02/11/10 16:37
>>169
どうもありがとうございます。

172 :デフォルトの名無しさん:02/11/10 17:10
>>169>103
余り使ってなくて?良いのか??

173 :デフォルトの名無しさん:02/11/10 18:12
#include <stdio.h>
int main()
{
int x, y=0;
printf("整数を入力してください");
scanf("%d",&x);
for(;x != 0;x /= 10)
y=y*10+x%10;
printf("%d\n", y);
return 0;
}

174 :デフォルトの名無しさん:02/11/10 18:37
#include <stdio.h>
int main()
{
 int x;
 scanf("%d", &x);
 do {
  printf("%d", x % 10);
  x /= 10;
 } while (x);
 printf("\n");
 return 0;
}

175 :デフォルトの名無しさん:02/11/10 18:54
>>169だと
1001とか入れたら11にならん?

176 :デフォルトの名無しさん:02/11/10 19:04
>>175
なるな。
0入れたら何も出てこないし。

177 :デフォルトの名無しさん:02/11/10 19:59
#include <stdio.h>

int main(void) {
int target, print, zeroFlag=0;

scanf( "%d", &target );
if ( target == 0) {/*めんどかったので特殊扱い*/
printf("0");
}

do {
print = target % 10;

if ( print > 0 && zeroFlag == 0 ) {
zeroFlag = 1;
}

if ( zeroFlag == 1 ) {
printf( "%d", print );
}
} while ( target = target / 10, target > 0 );

printf("\n");

return 0;
}

178 :デフォルトの名無しさん:02/11/10 22:05
>>149を作ってみた。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1027870433&res=28
添削などしてもらえませんか?

ソース中のprintfを消すと正常に動作しません。
原因をできたら教えてください。

179 :デフォルトの名無しさん:02/11/10 22:10
みんなスマートに書いてるのに
なんでオレはこんなに長ったらしくなるんだろう。

180 :103:02/11/10 22:13
あら、間違ってるわ(汗)
逝ってきます。

181 :178:02/11/10 22:19
一応)コンパイラはbccです。

182 :178:02/11/10 22:40
ソースうぷ板の29,31-32さんThanxです。
確かに値渡のほうが楽です。
ポインタなんて使う必要ないね(この場合)。

でもなんであんなことが起こったんだろう。

やっぱりkを初期化してなかったから k*=10 で何らかの不具合が出たのかな。

183 :デフォルトの名無しさん:02/11/10 22:43
>>182
int change_num(int num)
{
  int j,k = 0;

  while (num > 0) {
    j = num % 10;
    num /= 10;
    k = k * 10 + j;
  }
  return k;
}

184 :デフォルトの名無しさん:02/11/10 22:45
int change_num(int num) {
int k = 0;
for (; num; num /= 10)
k = k*10 + num%10;
return k;
}

185 :takeru:02/11/11 16:01
#include <stdio.h>
#include <string.h>
#define TINTERVAL 4500000
int main()
{
int i,j, k;
char *a = "yaamada takeru";
char *b;
printf("%s\n", a);
for (k=0; k < 5; k++) {
b =a;
for (i=0; i <=strlen(a); i++){
if (i > 0) {
/* 必要なだけスペース出力*/
for (j = 0; j < i; j++)
printf(" ");
}
if (i < strlen(a)) {
printf("%c\r", *b);
}
else {
printf("\r");
}
fflush(stdout);
b++;


186 :takeru@つづき:02/11/11 16:03
* sleep(1); 少しポーズする */
for (j=0; j < TINTERVAL; j++) {
}
}
/*行を消去 (一行文のスペース出力) */
printf(" \r");
}
printf("\n");
return 0;
}

上のプログラムを改良して自分の名前を一文字ずつ左に表示して左端についたら
逆に右に一文字ずつ表示するプログラムをつくれ。
ぼくにはこれ以上無理です。どなたかお願いします。

187 :デフォルトの名無しさん:02/11/11 16:06
マルチはやめれ。

188 :デフォルトの名無しさん:02/11/11 16:07
takeruはこれ以上無理だそうなのでこれ以上助言しても無駄です。

189 :takeru:02/11/11 16:22
宿題手伝いますyo!
のほうの819のやつもCCはできてもa.outするとうまくいかない・・・
あきらめたほうがいいっぽいです・・・・
いろいろおしえてくれたみなさま。おれがアホですいません・・。
あと宿題手伝いますYO!の818のひともありがとうございました。
ただ主旨が少し勘違いされてしまいました・・・。

あといっかい出さないと補習だな・・・・・・



190 :デフォルトの名無しさん:02/11/11 17:41
>>189
正直なところ補習を受けたほうが長い目で見るとおまえのためだろ。

191 :149:02/11/11 23:43
最後に書きこんでから実験のレポートやっててこのスレ見てなかったから
>>169のプログラムで提出しちゃった。
0のときはif文でやっといたけど。
協力してくれたみなさん、ありがとー。

192 :デフォルトの名無しさん:02/11/12 00:31
こんな宿題です。
Borland C++ Compailerのbcc32.exeの32のところが
意味する内容を答えなさい。

32ビットてのはわかるんですが、何の32ビットなのか
?であります。よろしこです。

193 :デフォルトの名無しさん:02/11/12 00:33
CPUのビット数

194 :デフォルトの名無しさん:02/11/12 00:36
>>193
32ビットのCPUに対応するコンパイラですよー
て意味で大丈夫でしょうか?、

195 :デフォルトの名無しさん:02/11/12 00:38
CPUの標準的な転送ビット数

なぜ標準的なのかはMMXが64転送できるから


196 :デフォルトの名無しさん:02/11/12 00:39
>>195
となると、
CPUに最高32ビットで処理させるコンパイラですよー
て意味ですよね?

197 :デフォルトの名無しさん:02/11/12 00:41
>>196
それでよろしい



オソラク...


198 :デフォルトの名無しさん:02/11/12 00:41
>>197
どうもありがとうございました!

199 :デフォルトの名無しさん:02/11/12 00:46
>>32ビットのCPUに対応するコンパイラですよー
こっちの方が正しいかも。。。


200 :デフォルトの名無しさん:02/11/12 00:51
80x86系32bitモード用コンパイラだろ

201 :デフォルトの名無しさん:02/11/12 00:52
先生、よくわからないのですが##の使い方教えてください。
どういう時に使うのですか?


202 :デフォルトの名無しさん:02/11/12 00:54
>>201
無理して使わなくていいよ。

203 :デフォルトの名無しさん:02/11/12 00:55
コメントを見やすくする
/* ################## ATTENTION!! ################## */


204 :デフォルトの名無しさん:02/11/12 01:04
で、ちゃんと説明してくれる人はいるんですかね?

205 :デフォルトの名無しさん:02/11/12 01:07
>>203では不満なのかね。

206 :デフォルトの名無しさん:02/11/12 01:09
##ってマクロで使うやつでしょ。

207 :デフォルトの名無しさん:02/11/12 01:11
不満じゃよ。とにかく##が好きなんじゃよ。da##yo好きなんじゃよ。

208 :デフォルトの名無しさん:02/11/12 01:13
>>201
##fusianasan[名前]
で書き込みすると、IDの位置と名前の位置が反転するんだよ。
終了。

209 :デフォルトの名無しさん:02/11/12 01:17
>>208
fusianasan##[名前]
の間違いじゃないのか?##fusianasan[名前] だとトリップが出てしまうぞ。

210 :ゆうじ:02/11/12 01:18
現在VC++6.0を使い始めましたがメッセージボックスで『はい』を選んだらプログラムが終了する
ようにしたいのですが、まったくわかりません。どなたかちか力を貸していただけませんで
しょうか。

211 :p62ad44.tkyoac00.ap.so-net.ne.jp:02/11/12 01:22
>>201
「書き込みすると」よくわかりません先生。


212 :デフォルトの名無しさん:02/11/12 01:25
if(MessageBox(HWND_DESKTOP,"終了しますか?","確認",MB_OKCANCEL)==IDOK)
PostQuitMessage(0);

213 :デフォルトの名無しさん:02/11/12 01:27
終了の仕方とメッセージボックスを調べれ。

214 :zdd2a43.ahobaka00.ap.so-net.ne.jp :02/11/12 01:28
ANSIはここで聞くな。
終了。

215 :ゆうじ:02/11/12 01:54
レスありがとうございます。『はい』『いいえ』で『はい』をクリックすると
プログラムが終了するようにしたいのですがその場合はどのように記述すればいいでしょうか?


216 :デフォルトの名無しさん:02/11/12 01:58
>>215
MSDN で MessageBox を調べれ。

217 :ゆうじ:02/11/12 02:07
とってもわかりません。


218 :デフォルトの名無しさん:02/11/12 02:16
>>217
あなたが何がわからないのか、とってもわかりません。

219 :デフォルトの名無しさん:02/11/12 02:26
if(MessageBox(HWND_DESKTOP,"終了しますか?","確認",MB_YESNO)==IDYES)
PostQuitMessage(0);

220 :デフォルトの名無しさん:02/11/12 02:38
いちいち HWND_DESKTOP って書かなくても、NULL でいいと思うの

221 :ゆうじ:02/11/12 02:51
そこを記述するとerror C2660: 'MessageBoxA' : 関数が不正な 4 個の実引数をともなって呼び出されました。
って出てしまうんですがなぜでしょう?

222 :デフォルトの名無しさん:02/11/12 02:55
>>221
・・・メッセージボックスで終了確認の前に、ちゃんと動くプログラムは書けてる?

223 :デフォルトの名無しさん:02/11/12 02:57
::Messa〜
ってかけ。理由は知らなくてよい。

224 :ゆうじ:02/11/12 02:57
メッセージボックス以外のプログラムはまだ書いていないです・・・

225 :デフォルトの名無しさん:02/11/12 02:59
>>223
原因はそれじゃない。221 のエラーメッセージを良く見ろ。

226 :デフォルトの名無しさん:02/11/12 03:01
多分 210 の求めてるコードじゃないが、210 に書かれてる要件は満たしてる。

#include <windows.h>
int main()
{
for(; ; )
if(MessageBox(HWND_DESKTOP,"終了しますか?","確認",MB_YESNO)==IDYES) break;
return 0;
}

227 :ゆうじ:02/11/12 03:14
HWND_DESKTOPの部分をとりましたらとりあえず動きますのでありがとうございました。


228 :デフォルトの名無しさん:02/11/12 03:18
>>224
猫の 「C言語編」 第1〜57章、次に 「Windows SDK編 第1部」 第1〜8章を見れ。
http://www.kumei.ne.jp/c_lang/

229 :デフォルトの名無しさん:02/11/12 17:22
質問1
Stack Overflow 0xC00000FDというエラーが出て困ってます。
原因を考えるに
hairetu[1000][1000]
というようなことをしているのですが、ここが原因と考えて良いのでしょうか?

質問2
そこで、
動的に二次元配列を確保すると良いと書いてあったので

int size = 1000;
int **hairetu,
hairetu = (int **)malloc(sizeof(int *)*size);
for(int i=0;i<size;i++)
   hairetu[i] = (int *)malloc(sizeof(int)*size);
if(image_in=NULL){
fprintf(stderr,"メモリが足りません!\n");
exit(1);
}

というプログラムをネットで見つけたので書いたのですが動きません。
エラーは
error C2040: 'hairetu' : 'int' は 'int ** ' と間接操作のレベルが異なります。
というものです。
このプログラムのバグを教えてください。
また、これで結果としてhairetu[1000][1000]というものが確保できるのでしょうか?

是非、助けてやってください

230 :デフォルトの名無しさん:02/11/12 17:27
実際のコードみないとわかんないよ。
これでhairetu[i][j]でアクセスできるけど。

231 :229:02/11/12 18:30
すみません。
今全文を投稿しようと思っていたら、エラーの場所に気づきました。
int **hairetu,
じゃなくて
int **hairetu;
ですよね。お騒がせしました。

ところで、この配列の宣言方法は
結果的には
hairetu[1000][1000]
と全く同じ扱いができるってことなのですか??

232 :デフォルトの名無しさん:02/11/12 19:02
>>231
全くでもない。関数にこの値を引き渡す時、

void func(int (*)[1000])では受けられない。
void func(int **)で受けること。

233 :デフォルトの名無しさん:02/11/12 22:06
>>192 Borland C++ Compailerのbcc32.exeの32のところが意味する..
その課題の期待するところは一体なんなのだろう....
商品名の由来は商品を作った会社の営業にきくのが正しいです。
# ここ、流れるの速いな...


234 : ◆vhNvUwv9iI :02/11/12 23:24
#define VAR(i,j) (i##j)

VAR(x,6) の呼び出しは,(x6) に展開されます。


235 :234:02/11/12 23:27
Turbo C++
に在った説明。

236 :デフォルトの名無しさん:02/11/12 23:29
>>234
それは調べたんだけど、どうつかったらいいかわからん。
普通に x6 と書けない場面があるのかな。

237 :デフォルトの名無しさん:02/11/12 23:49
>>236
ウインドうすのメッセージク落下とかで使われてる。

238 :デフォルトの名無しさん:02/11/12 23:50
う〜ん、文字列を繋げるとか・・・か?

239 :デフォルトの名無しさん:02/11/13 00:03
"x" "6" でいいし。

240 :デフォルトの名無しさん:02/11/13 00:03
どこかのヘッダファイルに

#define   DUMMY    /##/

ってのがあったな。

241 :デフォルトの名無しさん:02/11/13 00:07
構造体の変わりに・・・

242 :デフォルトの名無しさん:02/11/13 02:46
Q.指定した文字が文字列中に含まれる回数、指定した文字が含まれている文字列中の位置を調べる。
どこが間違ってるかよくわかりません。よろしくお願いします。
1#include<stdio.h>
2 main(){
3 char a[100],b[1];
4 int i,count=0;


243 :デフォルトの名無しさん:02/11/13 02:47
5 printf(" Input string >> ");
6 scanf("%s",a);
7 printf(" Input character >> ");
8 scanf("%s",b);
9 for(i=0; a[i]!='\0'; i++){
10 if(a[i]==b[0]){
11 count++;
12 }
13 printf("a_cnt = %d\n",i);
14 printf("a[]= Number of %s = %d\n",b,count);
15 }
16 exit(0);
17 }


244 :デフォルトの名無しさん:02/11/13 02:54
間違いと関係あるのかどうかシランが、
bの長さ1しかないのにscanfなんかしていいのか?

245 :デフォルトの名無しさん:02/11/13 02:59
#include<stdio.h>
main(){
char a[100], b[1];
int i,count=0;
printf(" Input string >> ");
scanf("%s",a);
printf(" Input character >> ");
scanf("%s",b);
for(i=0; a[i]!='\0'; i++){
if(a[i]==b[0]){
count++;
printf("a_cnt = %d\n",i);
}
}
printf("a[]= Number of %s = %d\n", b, count);
return 0;
}

246 :デフォルトの名無しさん:02/11/13 02:59
長さが1だとscanfしてはだめなんですか・・・
知りませんでした。getsでいてみます


247 :デフォルトの名無しさん:02/11/13 02:59
fgets使え。

248 :デフォルトの名無しさん:02/11/13 03:00
char b;
scanf(" %c",&b);

249 :242:02/11/13 03:11
すみませんエラーがこのように出ます。
Input string >> afafe
Input character >> a_cnt = 0
a[]= Number of (null) = 0
a_cnt = 1
a[]= Number of (null) = 0
a_cnt = 2
a[]= Number of (null) = 0
a_cnt = 3
a[]= Number of (null) = 0
a_cnt = 4
a[]= Number of (null) = 0

250 :242:02/11/13 03:14
あと、指定した文字が文字列中に含まれる位置を示す関数を作ってみたんですが、
文字の文字列中の最後の位置だけしか返すことしか分かりませんでした。
すべての位置を返すアルゴリズムアドバイスいただけるとうれしいです。
int serchchr(char str[], char c) {
int i, a=0;
for(i=0; str[i]!='\0'; i++) {
if (str[i]==c) {
a=i;
}
}
return a;
}


251 :デフォルトの名無しさん:02/11/13 03:17
for (s = str; s = strchr(s, c); )
printf("%d,", s-str);

252 :242:02/11/13 03:21
>>251
ありがとうございます。
何をやっているかちょっと分からないので解読したあと組み込んでみます。

253 :デフォルトの名無しさん:02/11/13 03:29
身長のデータを次々に入力し平均を算出するプログラムを作成せよ。ただし、
入力データは男女混合なので、平均は、男女別に算出。入力データは、
身長データの前に男ならM、女ならFがあるものとする。
  M178
  F160
   : 
   :
   :
誰かやって下さい。わからんです。

254 :デフォルトの名無しさん:02/11/13 03:39
#include <stdio.h>
#include <stdlib.h>
void main() {
int msum=0, fsum=0, mcount=0, fcount=0;
char buf[100];
while (gets(buf)) {
if (buf[0] == 'M') { msum += atoi(buf+1); mcount++; }
else if (buf[0] == 'F') { fsum += atoi(buf+1); fcount++; }
}
printf("男平均:%f\n", mcount?(double)msum/mcount:0);
printf("女平均:%f\n", fcount?(double)fsum/fcount:0);
}

255 :デフォルトの名無しさん:02/11/13 04:17
ようやく出来たよ・・・。苦労だったな屑ども。
まあお前等如きに敬語使っちまったけど、一度出来ちまえば用なしよ。
さっさと氏ねばーか。検索なんてくだらねーこといってるんじゃねーよ。
チョン
キチガイ
ばーかばーかばーか
うひゃひゃひゃ

俺に利用されて悔しいか?
精々喚いてろチンカスども。

256 :デフォルトの名無しさん:02/11/13 04:19
>>255
いちいち悔しがってたら2chねらなんかやってられん。
というか人生ガンバレヨ。その調子だと将来大変だろうが。

257 :デフォルトの名無しさん:02/11/13 04:28
がんばれよ。クリスマスまでに彼女できるといいな。

258 :デフォルトの名無しさん:02/11/13 04:29
>>255
HTMLのタグが編集できたぐらいでC/C++スレ来んな。


259 :デフォルトの名無しさん:02/11/13 04:31
なんか可哀想な人が現れたの?

260 :242:02/11/13 05:17
すみません。もうすずめが鳴きそうでかなりあさってる242です。
int str[100],b;
scanf("%s",str) /*文字列strを記憶*/
scanf("%c",b)  /*文字列bを記憶*/
printf("%s %c",str,b) /*str,bを印字*/
これだと、いろいろ調べた結果、str(文字列)、改行の順で記憶するらしくbが記憶されないらしくて困ってます。
gets()使ってみたんですが、コンパイルエラーでました。(gcc使ってます)
fgetsはファイルポインタなしでつくれとのことなのでこれなしでつくりたいです。
誰かほんと困ってますので助けてください!

261 :デフォルトの名無しさん:02/11/13 05:18
scanf(" %c",b)

262 :デフォルトの名無しさん:02/11/13 05:20
char str[100], b;
scanf(" %c",&b)

263 :デフォルトの名無しさん:02/11/13 05:22
配列とポインタの関係をいいだすと、多分2週間ぐらい徹夜するはめ
になるので、黙ってそういうもんだとおもっといたほうがいい。

264 :242:02/11/13 05:35
できました!
ほんと感謝します!

>>263
ポインタなんかもやもや感がとれないのでポインタの本図書館で借りてきます。

文字列中に含まれる文字の数と
文字列中の文字の最後の場所を印字するとこまでできました。
あとは>>251さんのを解読して組み込むだけです。

みなさんレスどうもありがとうございました。

265 :251:02/11/13 05:41
char *s;
for (s = str; s = strchr(s, c); )
printf("%d,", s-str+1);
printf("\n");
で動くかな。ベタに表示するだけだが。

266 :242:02/11/13 05:47
>>251
できました!
わざわざ最後までつきあってくれてほんとありがとうござした。
こころが休まりました。


267 :デフォルトの名無しさん:02/11/13 05:58
ようやく出来たよ・・・。苦労だったな屑ども。
まあお前等如きに敬語使っちまったけど、一度出来ちまえば用なしよ。
さっさと氏ねばーか。検索なんてくだらねーこといってるんじゃねーよ。
チョン
キチガイ
ばーかばーかばーか
うひゃひゃひゃ

俺に利用されて悔しいか?
精々喚いてろチンカスども。

268 :デフォルトの名無しさん:02/11/13 06:03
がんばれよ。クリスマスまでに彼女できるといいな。

269 :デフォルトの名無しさん:02/11/13 06:11
>>267
いちいち悔しがってたら2chねらなんかやってられん。
というか人生ガンバレヨ。その調子だと将来大変だろうが。

270 :デフォルトの名無しさん:02/11/13 06:12
>>267
HTMLのタグが編集できたぐらいでC/C++スレ来んな。

271 :デフォルトの名無しさん:02/11/13 06:15
なんか可哀想な人が現れたの?

272 :教えて厨:02/11/13 12:26
あと30分くらいしたら問題をうpいたします。
神の降臨をお待ちしております。

273 ::02/11/13 12:28
うpしてたもう。
答えてやろうぞ。

274 :デフォルトの名無しさん:02/11/13 12:29
神キタ━(・∀・)━!

275 :教えて厨:02/11/13 12:35
おながいします。
てか毎週この時間に出現しますので今後ともおながいします。

276 :デフォルトの名無しさん:02/11/13 13:46
問題うpしてないじゃん

277 :デフォルトの名無しさん:02/11/13 16:36
問題マダァー? 

278 :[無知無能の神] :02/11/13 16:44
問題来らば全精力を注いで解くなり
今すぐうpするのじゃああああ

279 :デフォルトの名無しさん:02/11/13 17:02
イパーイツレタ

280 :デフォルトの名無しさん:02/11/13 17:06
>>279
俺たちの青春をかえせー

281 :デフォルトの名無しさん:02/11/13 17:07
無知無能ってよりムチ不能の神だったりしてな

282 :デフォルトの名無しさん:02/11/13 18:30
モンテカルロ法を使って、半径1の円の面積を求める
Cプログラムを作らなきゃいけないんですが、だれか教えてください。
ちなみに、モンテカルロ法はわかるのですが、Cで書けません。
お願いします。

283 :デフォルトの名無しさん:02/11/13 18:55
Cでかけないってことは、モンテカルロ法を理解してないってことだ。
ただ「使ってる」だけ。
出直して来い。


284 :デフォルトの名無しさん:02/11/13 18:57
>>282
> モンテカルロ法はわかるのですが、Cで書けません。
ならば、モンテカルロ法の手順を日本語で書いてみろ。

285 :282:02/11/13 23:06
>>284
V=4×(乱数の組のうち、x+y≦1を満たす組の数)/(全組式N)
これでいいですか?

286 :デフォルトの名無しさん:02/11/13 23:27
>>285
誰が公式書けって言ったんだか・・・。

手順とは違うぞ。

287 :デフォルトの名無しさん:02/11/13 23:38
int main()
{
int i, j = 0;
float x, y;
for (int i = 0; i < 100; i++)
{
x = rnd();
y = rnd();
if (x * x + y * y < 1)
j++;
}
printf("pi = %f\n", 4 * j / i);
}

288 :デフォルトの名無しさん:02/11/13 23:39
for i = 1 to N
x = 0〜1のRND
y = 0〜1のRND
if (x^2 + y^2 <= 1) count++;
next
print "pi = "; count / N * 4

289 :デフォルトの名無しさん:02/11/13 23:40
>>287
ケコーンを前提にハァハァ

290 :デフォルトの名無しさん:02/11/14 08:22
>>289
やめとけ、あんたは不真面目あっちは真面目。釣り合わんよ。

291 :デフォルトの名無しさん:02/11/14 09:12
>>287
それじゃだめだ

x = rnd()&255;
y = rnd()&255;
if (x * x + y * y <= 255)



292 :デフォルトの名無しさん:02/11/14 09:15
あ、だめだ
実数にする
4.0 * j / i


293 :デフォルトの名無しさん:02/11/14 13:17
乱数の下位ビットを使うなよ・・・

294 :デフォルトの名無しさん:02/11/14 13:18
ビット切り取るのに 10 進数使うなよ・・・

295 :お願いします!:02/11/17 20:13
5匹の鶴の身長を読み込んで、もっとも身長の高い鶴と
もっとも身長の低い鶴の身長を表示するプログラムを作成。なお、鶴の身長はdouble型で表すものとする。

配列をつかって。

296 :デフォルトの名無しさん:02/11/17 20:17
宿題きた!!
読み込むデータってファイルから?キーボード(標準入力)から?


297 :デフォルトの名無しさん:02/11/17 20:22
double table[5];
int i, j;
for (i=0; i<5; i++)
scanf("%f", table+i);
for (i=0; i<5; i++) {
double tmp = table[i];
for (j=i, k=j; j < 5; j++)
if (table[j] < table[k]) k = j;
table[i] = table[k];
table[k] = tmp;
}
printf("min = %f\n", table[0]);
printf("max = %f\n", table[4]);

298 :デフォルトの名無しさん:02/11/17 20:28
int main(){

double hairetsu[5] = {40,30,60,20};
int i ;
double max = 0;
double min = 999;
for( i=0;i < 5;i++){
if( max < hairetsu[i]){
max = hairetsu[i];
}
if(min > hairetsu[i]){
min = hairetsu[i];
}
}
printf("最高身長:%lf",max);
printf("最低身長:%lf",min);
return 0;
}

299 :デフォルトの名無しさん:02/11/17 20:33
double max = hairetu[0];
double min = hairetu[0];

300 :デフォルトの名無しさん:02/11/17 20:46
ファイルをオープンしてint型の配列をバイナリ保存したいんだけど・・・
どうすればいい??
fprintfではうまくいかなかったよ。

301 :デフォルトの名無しさん:02/11/17 20:53
( ´、_ヽ`)・・・

302 :デフォルトの名無しさん:02/11/17 21:17
const int SIZE = 10;
int a[ SIZE ] ={ 0,1,2,3,4,5,6,7,8,9 };

FILE *lpFile;
lpFile = fopen( filename , "wb");

if( lpFile == NULL ){
return -1;
}
fwrite( a , sizeof( int ) * SIZE , 1 , lpFile );
( ´、_ヽ`) ?


303 :デフォルトの名無しさん:02/11/17 23:54
>>298
あのさ、そのprogではさ、四つだけなんだけど五回ループしているよね?

304 :デフォルトの名無しさん:02/11/17 23:56
>300
バイナリデータで保存する時の、 
ファイルオープン時の、パラメータ確認した? 


305 :303:02/11/18 00:01
データが4つってことね

306 :デフォルトの名無しさん:02/11/18 00:11
C++について質問させてください。
相互に影響しあうオブジェクトって作れないんですか?

クラスAの中からクラスBを呼び出すためには、クラスBを先に作らなくちゃいけないので
クラスBの中でクラスAは呼び出せない・・・と。

あたりまえ?もしくは勘違い?

307 :デフォルトの名無しさん:02/11/18 00:19
>>306
何がしたいの?
相互に影響しあう、とか、クラスAの中からクラスBを呼び出す、
ってどういうこと?

308 :デフォルトの名無しさん:02/11/18 00:21
>>306
クラスを呼び出すってどういうことだ?
言ってることは良くわからんが、君のやりたいことはたぶん出来る。

309 :デフォルトの名無しさん:02/11/18 00:32
>>306
クラスを先行宣言(前方宣言)しておけばいいんじゃない?

310 :306:02/11/18 00:33
オブジェクトAとBがあって、Aの変更がBに、Bの変更がAに反映出来るようにしたいんです。


311 :デフォルトの名無しさん:02/11/18 00:34
class A;

class B {
class A* a;
};

class A {
int i;
};
みたいな事はできるが、
class A;

class B {
class A a;
};

class A {
int i;
};
はエラーです。

312 :306:02/11/18 00:34
C++始めたばっかなので、用語の使い方間違ってるかもしれません

313 :デフォルトの名無しさん:02/11/18 00:54
これもエラーか。何とかならんかなあ

class A;

class B {
public:
class A* a;
B() { a = new A; }
void func() { std::cout << "B" << std::endl; }
};

class A {
public:
class B* b;
A() { b = new B; }
void func() { std::cout << "A" << std::endl; }
};

int main()
{
A a;
B b;
a.b->func();
b.a->func();
}

314 :306:02/11/18 01:09
>>313
お手数かけてすみません。
クラス分けの時点で間違ってるのかなぁ・・・
とりあえずもう一度考え直してみます。

315 :デフォルトの名無しさん:02/11/18 02:05
>>313
正直C++は慣れていないんで、細かい作法は大目にみてくれ。
class A;
class B {
public:
  A* getA();
  B() { a = NULL; }
  void func() { std::cout << "B" << std::endl; }
private:
  class A* a;
};
class A {
public:
  B* getB();
  A() { b = NULL; }
  void func() { std::cout << "A" << std::endl; }
private:
  class B* b;
};
A* B::getA() { if (a == NULL) a = new A; return a; }
B* A::getB() { if (b == NULL) b = new B; return b; }
int main()
{
  A a;
  B b;
  a.getB()->func();
  b.getA()->func();
  return 0;
}

316 :デフォルトの名無しさん:02/11/18 02:24
コンストラクタを外に置いてみた。これならサイズが確定しているからnew
できる。しかしなぜか動かない?

class A;

class B {
public:
class A* a;
B();
void func() { std::cout << "B" << std::endl; }
};

class A {
public:
class B* b;
A();
void func() { std::cout << "A" << std::endl; }
};

A::A() { b = new B; }
B::B() { a = new A; }

int main()
{
A a;
B b;
a.b->func();
b.a->func();
}

317 :デフォルトの名無しさん:02/11/18 02:31
316です。
このようなプログラムを書くと、aの実体を確保する際にA()が呼ばれ、
その中でbをnewするのでB()が呼ばれ、その中でaをnew・・・・・と
いうように堂々巡りになってスタックオーバーフローしていました。

だからやっぱりこんなおかしなプログラムは書いてはだめぽらしい
です。どなたか感想きぼん。

318 :デフォルトの名無しさん:02/11/18 03:25
> A::A() { b = new B; }
> B::B() { a = new A; }
ここでやんないで、あとでセットすれば、簡単にサイクルは作れるけど…
単にサイクルを作りたいだけなの?

319 :デフォルトの名無しさん:02/11/18 03:57
>>318
わからん。最初に質問した奴は寝ているらしい。
単に異なるクラス間で情報を共有したいだけなら、staticメンバを使う手もあるな。

class base {
public:
static int i;
};

class A : public base {
public:
void func() { std::cout << i << std::endl; }
};

class B : public base {
public:
void func() { std::cout << i << std::endl; }
};

int base::i;

int main()
{
A a;
B b;

a.i = 111;
b.func();
}

320 :デフォルトの名無しさん:02/11/18 15:27
xの階乗を求めるプログラムを作成せよとあります。
一応その階乗を求めるプログラムは作成できたのですがOVERFLOWの時終了することが
できません。整数の最大値がINT_MAXに入っている時、どこでどうやって判断して終了をすればよいのでしょうか?
プログラムです
#include<stdlib.h>
#include<limits.h>
main () {
int i,n,fact;
printf("n=");
scanf("%d",&n);
fact=1;
i=1;
while(i<=n){
fact=fact*i;
i=i+1;
}
}
printf("%d\n",fact);
}

321 :デフォルトの名無しさん:02/11/18 15:43
>>320
Cでは残念ながらOVERFLOWを検知することは出来ないんで、
> i=1;
> while(i<=n){
>   fact=fact*i;
>   i=i+1;
> }
for(i = 1, fact = 1; i <= n; i++) {
  if(fact < fact * i) {
    printf("OVERFLOW!!\n");
    break;
  }
  fact *= i;
}
かな?
# for文を使ったのは俺の趣味

322 :デフォルトの名無しさん:02/11/18 15:45
INT_MAXを2からズンズン割っていっていけば、
Overflowになるnが割り出せると思うが(w

323 :デフォルトの名無しさん:02/11/18 15:48
__asm 使っていいなら至って簡単なのだが。

while(i <= n)
{
 fact = fact * i;
  __asm jno next;
  printf("OVERFLOW!!\n");
  break;
 next:
  i = i + 1;
}

324 :デフォルトの名無しさん:02/11/18 15:49
しもた、珍しく来たC++の問題に乗り遅れた…(ノД;)

325 :デフォルトの名無しさん:02/11/18 15:55
ひょっとして、テンプレートで、overflowになるnが
静的に割り出せたりする?

326 :デフォルトの名無しさん:02/11/18 18:00
ちょっとスレ違いかもしれないけど・・・

javaで、あるアプリケーションを作る課題がでました。
そこで「ユーザインターフェースはメニュー方式の文字インターフェースとしてよい」ってあるのですが、これはCUIでいい、というようにとって大丈夫ですよね?
教師に質問メール送ると返るのが遅いのでここで聞きました。

まぁ俺がいいたいのは、文字で

○○○をする:A
△△△をする:B

のように出力され、Aを入力したら○○○ができる、そんな感じでいいのかな、と。

327 :デフォルトの名無しさん:02/11/18 18:02
>>326
超越的にスレ違いだから心配しなくていい。

328 :デフォルトの名無しさん:02/11/18 20:25
sleepなるものを使って、カウントを表示するプログラムを作ってみました。

#include <stdio.h>
int main()
{
 int count;
 for(count = 10; count > 0; count--)
  {
    printf("%d\n", count);
    sleep(1);
  }
 printf("Bomb!!\n");
 return 0;
}

こう書くと、10,9,8,7,...ときちんと1秒待ってから表示してくれるのですが
数字を改行しないで表示させようと始めのprintfの所を
printf("%d ", count);
とすると、先に10秒待ってから、10 9 8...と一瞬にして表示され、変になります。
これはどうしてでしょうか?
ただ改行するのとしないのとでは大違いなのですが...。
どうすれば改行せずに1秒待ったら表示して、また1秒待ったら表示して
というようになるのでしょうか?
ちなみに当方、UNIX+gccです。


329 :rubyist@カラアゲうまうま:02/11/18 20:29
fflush(stdout)

330 :デフォルトの名無しさん:02/11/18 20:48
どうでもいいけど #include <unistd.h> しようよ・・・。

331 :デフォルトの名無しさん:02/11/18 21:10
unistd.h・・・uninstaller demon?

332 :デフォルトの名無しさん:02/11/19 00:51
>>310
何がしたいのか、よくわからない。

#include <iostream>
#include <stringstream>

int
main()
{
stringbuf strbuf;

ostream ostr(&strbuf);

ostr << "Hello The C++ World" << endl;

cout << strbuf.str() << endl;

return 0;
}

こういうのと同じことをしたいってことか??


333 :デフォルトの名無しさん:02/11/19 02:52
    printf("%d\n", count);
fflush(stdout);
    sleep(1);

334 :デフォルトの名無しさん:02/11/19 05:58
>>328

printf() が呼ばれるのと画面に出力されるのは、同じタイミングとは限らないんだよ。
これは環境によって違う。

ちみの環境だと、通常の文字はすぐに出力されず、バッファにたまっていく。
で、¥nが出力されたときに、そこまでのバッファの内容が一気に出力される。

335 :デフォルトの名無しさん:02/11/19 06:06
unix standard

336 :デフォルトの名無しさん:02/11/19 06:20
unistd.h /ju:nistaed do:t eit∫/
■noun (acronym) UNIted STates of Dankan.H
(FOXROAD DICTIONARY)

337 :’N& ◆NAel5Y06Iw :02/11/19 08:22
The cows are bored. To amuse themselves, they have started searching
for palindromes in Farmer John's tax forms. Palindromes are numbers
that read the same forwards and backwards, e.g., 1234321 (but not
1231). A palindrome can be as short as 1 digit in length
Each tax form is an N x N (2 <= N <= 20) table of random single digits
(0..9). The cows wish to find paths on the grid such that the sequence
of digits the path traces is a palindrome.
The cows would like to know how many palindromic paths of a given
length L (1 <= L <= 18) exist. Write a program to determine the number
of palindromic paths of length L for a given table of digits. If a
path and its inverse are distinct, count them as two paths. That is,
if traversing a path backwards is not the same as traversing it
forwards, count it as two paths. In the example table above, count
122221 as two paths because it can be traversed either starting on
the 1 in the first row and ending on the 1 in the third row, or
starting on the 1 in the third row and ending on the 1 in the first
row. On the other hand, count `949' only once, as it can only be
traversed starting at 9, going to 4, and returning to the single 9.



338 :デフォルトの名無しさん:02/11/19 08:41
>>337
おいおい、the example table above がないと意味が分からんぞ
(といっても推測できるが)
コピペするなら完璧にしろや(゚Д゚)ゴルァ

339 :デフォルトの名無しさん:02/11/19 10:40
>>334
>で、¥nが出力されたときに、そこまでのバッファの内容が一気に出力される。

ダウト。\nをバッファに書き込んだからと言ってフラッシュされるとは限らないと
思うが。

340 :デフォルトの名無しさん:02/11/19 11:34
>>339
> *ちみの環境だと* 、通常の文字はすぐに出力されず、バッファにたまっていく。
>で、¥nが出力されたときに、そこまでのバッファの内容が一気に出力される。
日本語の読めない奴か?

341 :デフォルトの名無しさん:02/11/19 18:56
二次元平面に円を書くプログラムを作成せよ

342 :デフォルトの名無しさん:02/11/19 19:00
printf("○");

343 :デフォルトの名無しさん:02/11/19 19:17
>>342
なるほど、単純かつ分かりやすい解答だ。
君の答えには私も思わずかつらを脱いだよ。

344 :デフォルトの名無しさん:02/11/19 19:24
printf("円");

345 :デフォルトの名無しさん:02/11/19 19:34
>>344
漢字の意味からしても「描く」ではなく「書く」だから
こっちの方がより正解に近いのかな。

346 :デフォルトの名無しさん:02/11/19 19:49
二次元平面無視してるけどな

347 :デフォルトの名無しさん:02/11/19 19:58
ディスプレイが自動的に二次元平面

348 :デフォルトの名無しさん:02/11/19 22:46
レイトレして提出しモニタは二次元ですといいながら留年するのが漢

349 :デフォルトの名無しさん:02/11/19 23:51
>>348
間違っちゃいないよなぁ。
大体本当の円なんてドットで四角く区切られたディスプレイ上じゃ(以下略

350 :デフォルトの名無しさん:02/11/19 23:58
プリンタで印刷しる!

351 :デフォルトの名無しさん:02/11/20 00:43
Bresenham's Algorithmで検索汁!

352 :デフォルトの名無しさん:02/11/20 07:00
スケジュール管理システムを作れと言う課題が出てるので
誰か作ってくださいです。

353 :デフォルトの名無しさん:02/11/20 07:01
因みにc++です。
クラスとか使ってくださいです。

354 :デフォルトの名無しさん:02/11/20 07:07
>>353
できれば大文字のCを使ってください。小文字だと君の成績みたいに見えるでしょ。

355 :デフォルトの名無しさん:02/11/20 10:48
class schedule
{
public:
schedule();
}

schedule::schedule()
{
printf("管理が終了しました");
}

356 :デフォルトの名無しさん:02/11/20 11:15
学校の課題なんだから多分変なアルゴリズムで書くんじゃなくて
三角関数使えってことだろうね


357 :デフォルトの名無しさん:02/11/20 11:26
ファイル検索プログラムをつくれって言う宿題なんですけどやってもらえますか?

358 :デフォルトの名無しさん:02/11/20 11:35
>>357
OS書けやボケ。

359 :デフォルトの名無しさん:02/11/20 11:42
>>357
dir か ls コマンドをsystem関数で呼び出しファイルにリダイレクトして
そのファイルを読み込んで整形


360 :デフォルトの名無しさん:02/11/20 11:46
xとyの値のリストを読み込んで、最乗自乗法でy=ax+bのaとbを
求めるプログラムお願いします。

361 :デフォルトの名無しさん:02/11/20 11:57
y1=ax1+b
y2=ax2+b
b=(y1+y2-(x1+x2)a)/2
これも誤差を無視した最小自乗法の一種じゃないか!
と主張してくれ

362 :デフォルトの名無しさん:02/11/20 12:03
>>361
いやだ。

363 :デフォルトの名無しさん:02/11/20 12:07
課題が解けません。どなたか教えてください。m(_ _)m

次の常微分方程式をオイラー法によって解きなさい。
dy/dx=-y (y(0)=1,0<=x<=1,h=0.1) 真値:e^-x


364 :デフォルトの名無しさん:02/11/20 12:18
あるDLL内で他のDLLを使用したいのですが
可能なのでしょうか?
可能でしたら使い方はどうすればいいのでしょうか?


365 :Warez:02/11/20 12:34
float euler(float x)
{
const float h = 0.1;
a[0] = 1;
for (i = 0; i < 9; i++)
{
a[i+1] = a[i] - h * a[i];
}
return a[(int)x*10];
}

366 :デフォルトの名無しさん:02/11/20 12:42
>>364
可能。exeから呼び出すのと全く同じ。

367 :おねがい:02/11/20 13:22
50000までの素数を求めるプログラムをCで組んでもらえませんか?

368 :デフォルトの名無しさん:02/11/20 13:31
>>367
誰かコテハンがやってたな。Delふさぎこだったっけ?

素数の定義を知ってるならスピードはともかく動く物は書けると思う。



369 :367:02/11/20 13:34
うp禿しくキボンヌ

370 :デフォルトの名無しさん:02/11/20 13:37
>>369
こっから自分の好きなものを取ってこい

素数 "列挙" アルゴリズムを極めるスレ
http://pc3.2ch.net/test/read.cgi/tech/1018657457/

371 :デフォルトの名無しさん:02/11/20 13:59
>>369
死ね。

372 :デフォルトの名無しさん:02/11/20 14:21
#include <stdio.h>
#include <limits.h>
static unsigned long next_prime(unsigned long n);
static int is_prime(unsigned long n){
static unsigned long primes[65535] = { 2 };
static int init = 0;
unsigned long *p;

if (!init)
for (init=1, p = primes; *p++ <= 65535;)
*p = next_prime(*(p-1));

for (p = primes; *p * *p <= n; p++)
if (n % *p == 0) return 0;

return 1;
}
static unsigned long next_prime(unsigned long n){
while (!is_prime(++n));
return n;
}
int main(void){
unsigned long i;

for (i = 2; i <= 50000; i = next_prime(i))
printf("%10ld\n", i);

return 0;
}


373 :367:02/11/20 14:22
死ねって言われて死ぬアホがいるか(プ

374 :デフォルトの名無しさん:02/11/20 14:29
>>373
スレ違い出て行け (プ

375 :デフォルトの名無しさん:02/11/20 14:50
教授に、複素数のクラスを作ってこいと言われますた…
この無知に何か助言を頂きたいですm(_ _)m

376 :デフォルトの名無しさん:02/11/20 14:54
std::complex朴れ

377 :弁士:02/11/20 15:53
JPEGの圧縮プログラムの宿題が出たのですが、プログラムを教えていただけませんか?


378 :デフォルトの名無しさん:02/11/20 16:19
素数判定、因数表示プログラムを作りなさい。

整数を入力し、素数かどうか判定を行う
素数の場合、「素数です」と表示
素数でない場合は、その因数を全て表示する
*整数Aを整数Bで割ったとき、余りが0ならBはAの因数(1とA自身は除く)
A%B=0
*素数:因数を持たない整数
ヒント:判定変数
初期値は1、 因数があれば0に更新、
ループ終了後も1のままなら素数


379 :デフォルトの名無しさん:02/11/20 16:31
377 マルチ氏ね

380 :デフォルトの名無しさん:02/11/20 17:34
4桁の2進数を文字列として標準入寮から入力し、
これを10進数へ変換して表示するプログラムを作成せよ。

無知な私を助けてください。

381 :デフォルトの名無しさん:02/11/20 17:36
>>380

#include <stdio.h>
#include <stdlib.h>
int main()
{
char buf[5];
fgets(buf,sizeof buf,stdin);
printf("%ld\n",strtol(buf,NULL,2));
return 0;
}


382 :デフォルトの名無しさん:02/11/20 17:44
>>379
マルチポストくらいで怒るな

383 :デフォルトの名無しさん:02/11/20 17:46
>>382
よくそんな事が言えるな。
マルチポストが何で敬遠されてるかわかってるか?

384 :デフォルトの名無しさん:02/11/20 17:48
>>383
はいはい。
怒ってもいいからいちいち注意するな。

385 :デフォルトの名無しさん:02/11/20 17:49
>>384
いや、注意してもらったほうがありがたい。

386 :380:02/11/20 17:52
>>381
ありがとうございました。

387 :デフォルトの名無しさん:02/11/20 17:54
>>377
マルチうぜーよ。

388 :デフォルトの名無しさん:02/11/20 17:55
>>383
何で敬遠されるんですか?

ぐぐって見たのですが、うまく調べることが出来ませんでした。
教えていただけるとありがたいです。
よろしくお願いします。

389 :デフォルトの名無しさん:02/11/20 18:04
>>388
おまいは無能クンか。
「マルチポスト 嫌われる」 で検索すれば、しこたま出てくるわ。

とりあえずめぼしいのはこんなところ。
http://www.ippo.ne.jp/netiquette/common/04question/multipost.htm
http://www.so-net.ne.jp/ClubHouse/room/manner2.html#multi

390 :389:02/11/20 18:07
追加。
A掲示板とB掲示板にポストして、A掲示板で回答が得られたとしたら、
B掲示板で調べてくれてた人の労力はどーなるん? とか。

391 :デフォルトの名無しさん:02/11/20 18:12
>>389
どうもありがとうございます。
とてもよくわかりました。

ところで、388はマルチポストだったわけですが、
お気づきになられましたか?

392 :また貴様か!&rlo;!ろり懲はし少 &lro;:02/11/20 20:14
              ヽ \
             / \ \
       ∧_∧/
      (;´Д`)     i i i
      /    ヽ _   i i i--、
     ./| |   | |   ̄ ̄ ̄ |:::::|.
    / \ヽ/| |       ノ__ノ..
   /   \\| |
   / /⌒\ し(メ    .i i i . .
 / /    > ) \  ノノノ
/ /     / /    .\_  ザックザック
し'     (_つ   /:::::/::...   /ヽ
          ; "ノ・ ./∴: / )i iヽ-、_へ    ,ヘ
          '',, : :―― / / i i i iヽ . ̄ ゙― ノ /
    n_    _/;    i  .ノ / /ノ-' ̄ ゙ ― 、__ノ
  _ノ 二二二、_( _Д_ ;)-ヽ_ノ-'>>391
  ゙ー ''~      ∨ ̄∨

393 :デフォルトの名無しさん:02/11/20 20:30
(゚Д゚)ハァ?

394 :デフォルトの名無しさん:02/11/20 22:49
人、犬、鶏、野菜がボートで向こう岸まで行きたい。ボートは2人までしか乗れない。(例:人、犬、野菜は定員オーバー)
ボートは人しか漕げない。人がいないと犬は鶏を、鶏は野菜を食べてしまう。全員無事に
向こう岸にいく手順を出力するプログラムを教えてください。お願いします。

395 :デフォルトの名無しさん:02/11/20 22:54
人、犬、鶏、野菜がそれぞれ 1 インスタンスしか存在しないなら解決不能だが?

396 :Warez:02/11/20 23:08
有名な問題じゃん.鶏を連れてかえるんだよ.

397 :デフォルトの名無しさん:02/11/20 23:10
人が鶏を食べちゃうんだろ。

398 :デフォルトの名無しさん:02/11/20 23:14
最初に人のインスタンスを3つ作ればいいのか・

399 :デフォルトの名無しさん:02/11/20 23:14
#include <stdio.h>
int main(void) {
puts(
"1. 鷄をボートに載せて向こう岸に行く\n"
"2. 鷄を置いて戻ってくる\n"
"3. 野菜をボートに載せて、ボートの横で犬を泳がせて向こう岸に行く\n"
"終了"
);
return 0;
}

400 :デフォルトの名無しさん:02/11/20 23:15
プログラムを教えてください。だから、ニューロサイエンスするのかなー。

401 :デフォルトの名無しさん:02/11/20 23:17
>>399
イイ

402 :デフォルトの名無しさん:02/11/20 23:21
ニューロなんか使わなくてよろしい。
バックトラックを使って試行させるだけ。

403 :デフォルトの名無しさん:02/11/20 23:25
>>399
鶏を飛ばしておく

404 :デフォルトの名無しさん:02/11/20 23:25
渡る前に食っちまえ

405 :デフォルトの名無しさん:02/11/20 23:27
ただの総当りでいいのか
真面目に考えて損した

406 :デフォルトの名無しさん:02/11/20 23:31
「手順を出力するプログラム」であって「手順を求めるプログラム」じゃないんだろ?
じゃあ、>>399と同じようなので、ただし文字列は
"1. 鷄をボートに載せて向こう岸に行く\n"
"2. 鷄を置いて戻ってくる\n"
"3. 野菜をボートに載せて向こう岸に行く\n"
"4. 野菜を置き、鶏を連れて戻ってくる\n"
"5. 犬を載せて向こう岸に行く\n"
"6. 犬と野菜を置いて戻ってくる\n"
"7. 鶏を載せて向こう岸に行く\n"
"終了"

407 :デフォルトの名無しさん:02/11/20 23:37
本当はこの問題を解かなくちゃいけなくて、プログラムを使って解こうと思ったんだけど
プログラムの前に答えがでちゃったのでもういいです。

408 :394:02/11/20 23:38
>>406
手順を求めて出力です。間違えました。


409 :デフォルトの名無しさん:02/11/20 23:44
つーかなんでこのスレこんなレベルさがってんの?

410 :デフォルトの名無しさん:02/11/20 23:50
レベルは高いと思うが?

411 :デフォルトの名無しさん:02/11/20 23:52
2chに来てレベルうんぬんぬかすヤシの精神的レベルの方が心配だ

412 :394:02/11/20 23:56
>>407
そう気を落とさずにお願いします。似たような問題でこんなのもあります。
宣教師と人食い人種が3人づつ、川の右岸におり、2人乗りのボートがある。
どこにおいても、宣教師の数が人食い人種より少なくなると、宣教師は食べられて
しまう。安全に川の右岸から左岸に渡るにはどうしたらよいか。





413 :デフォルトの名無しさん:02/11/21 00:00
人食い人種を頃す

414 :デフォルトの名無しさん:02/11/21 00:20
宣教師を船にのせる。人食い人種に河を歩かせる。
3回繰り返す。

415 :デフォルトの名無しさん:02/11/21 00:25
SSSHHH
SS HH >SH>
SS HH <H< S
SS H >HH> S
SS H <H< SH
S H >SH> SH
S H <H< SSH
S >HH> SSH
S <H< SSHH
>SH> SSHH
船頭を、人食い人種にまかせる事で、つねに人食い人種が一人足りない状況を作る。

416 :デフォルトの名無しさん:02/11/21 00:28
宣教師をもう3人借りてくる

417 :デフォルトの名無しさん:02/11/21 00:28
SSSHHH
SS HH >SH>
SS HH <H< S   ← ここで喰われる。

418 :デフォルトの名無しさん:02/11/21 00:33
宣教師に船をのせる。

419 :デフォルトの名無しさん:02/11/21 00:39
SSSHHH.|< >  .|
SSHH  |→<SH>|
SSHH  |< >← .|SH
SH    .|→<SH>|SH
SH    .|< >← .|SSHH
      |→<SH>|SSHH
      |  .< >|SSSHHH

420 :デフォルトの名無しさん:02/11/21 00:41
SSSHHH.|< >  .|
SSHH  |→<SH>|
SSHH  |<SH>←|
SSHH  |→<SH>|
SSHH  |<SH>←|
SSHH  |→<SH>|
SSHH  |<SH>←|

421 :デフォルトの名無しさん:02/11/21 00:42
宣教師なんだったら人を食わないように説いてやれや

422 :Warez:02/11/21 00:43
>412
1瞬(たとえばboatがついてからまた発つまで)でも人食い人種の方が多い状況があったらだめなのか?

423 :デフォルトの名無しさん:02/11/21 00:45
SSSHHH.|<   >|
SSHH  .{<SH>|
SH     |<SH>| SH
       |<SH>| SSHH
       |<   >| SSSHHH

424 :デフォルトの名無しさん:02/11/21 00:49
>>422
そうっす。
できれば自分で解かず、プログラムに解かせてください。

425 :デフォルトの名無しさん:02/11/21 00:54
SSSH >HH>
SSSH <H<  H
SSS  >HH> H
SSS  <H<  HH
SH   >SS> HH
SH   <SH< SH

自分で解いたほうが楽しい問題ってプログラム面倒くさいなあ。

426 :デフォルトの名無しさん:02/11/21 00:54
http://www.vector.co.jp/soft/dl/data/prog/se002453.html
↑これの中の、cannibal.cを読んでみそ。
「宣教師と土人」のプログラムがあるから。

#どうでもいいけどATOK15では「土人」が一発で変換しない。差別用語だからか。

427 :デフォルトの名無しさん:02/11/21 00:54
>>424
じゃあ人工知能作るしかないな
こっちでロジック考えてプログラム書いちゃったら
「プログラムが解いた」ということにはならない

428 :デフォルトの名無しさん:02/11/21 00:55
C/C++よりLispやPrologのが楽だYO!

429 :394:02/11/21 00:59
>>426
ありがとう。助かったよ

430 :テストIME2000:02/11/21 01:09
ド人

431 :デフォルトの名無しさん:02/11/21 04:22
インド人

432 :デフォルトの名無しさん:02/11/22 00:00
淫ド人

433 :デフォルトの名無しさん:02/11/22 16:38
4次元ベクトルの内積を求めるプログラムをCで作って下さい。お願いします!

434 :デフォルトの名無しさん:02/11/22 17:17
double a[4], b[4];
double inner=0;
int i;
for (i=0; i<4; i++)
inner=a[i]*b[i];

435 :takeru:02/11/22 18:47
平面上の点を表す構造体Pointを用いて、三角形の三つの頂点座標を持つ構造体 Triangle
を以下のように定義した。


struct Point{
float X;
float y;

};
struct Triangle
struct Point a,b,c;
);

この定義を用いて、構造体Triangle 型の変数 tri を宣言し、三頂点が(1。0、1。0)、
(5。0、3。0)、(4。0、2。0)になるように初期化するプログラムをつくり、頂点座標を
次のように出力せよ。

出力例

三角形の頂点

(1。0、1。0)、
(5。0、3。0)、
(4。0、2。0)

どなたかお願いします。もうしにそうです。

436 :takeru:02/11/22 18:58
>>435を利用して、三角形の面積を計算するプログラムをつくれ。

三角形の面積は(a,b),(c,d),(e,f)ならば、

面積=1/2×{(e-a)(d-b)-(c-a)(f-b)} の絶対値で表される。

頂点は>>435の値を用いよ。絶対値はifを使っても、fabs()を使っても良い。

出力例
三角形の頂点

(1。000000、1。000000)、
(5。000000、3。000000)、
(4。000000、2。000000)、
面積 1。000

どなたかお願いします。

437 :デフォルトの名無しさん:02/11/22 19:24
#include <stdio.h>

struct Point{ float X, y; };
struct Triangle { struct Point a, b, c; };

void PutFloat(float f)
{
  char buf[1024], *p;
  sprintf(buf, "%.1f", f);
  for(p = buf; *p; p++)
  {
    if(*p == '.')
      fwrite("。", 1, strlen("。"), stdout);
    else
      fwrite(p, 1, sizeof(*p), stdout);
  }
}

void PutPoint(struct Point *pt)
{
  fwrite("(", 1, strlen("("), stdout);
  PutFloat(pt->X);
  fwrite("、", 1, strlen("、"), stdout);
  PutFloat(pt->y);
  fwrite(")", 1, strlen(")"), stdout);
}

438 :デフォルトの名無しさん:02/11/22 19:24
void PutTriangle(struct Triangle *tri)
{
  fwrite("三角形の頂点\n\n", 1, strlen("三角形の頂点\n\n"), stdout);
  PutPoint(&tri->a);
  fwrite("、\n", 1, strlen("、\n"), stdout);
  PutPoint(&tri->b);
  fwrite("、\n", 1, strlen("、\n"), stdout);
  PutPoint(&tri->c);
  fwrite("\n", 1, strlen("\n"), stdout);
}

void PutTriangleArea(struct Triangle *tri)
{
  float area, a = tri->a.X, b = tri->a.y, c = tri->b.X, d = tri->b.y, e = tri->c.X, f = tri->c.y;
  fwrite("面積 ", 1, strlen("面積 "), stdout);
  area = 1.0f / 2.0f * ((e - a) * (d - b) - (c - a) * (f - b));
  PutFloat(area < 0.0f? -area: area);
  fwrite("\n", 1, strlen("\n"), stdout);
}

int main()
{
  struct Triangle tri = { { 1.0f, 1.0f }, { 5.0f, 3.0f }, { 4.0f, 2.0f } };
  PutTriangle(&tri);
  PutTriangleArea(&tri);
  return 0;
}

439 :デフォルトの名無しさん:02/11/22 19:29
しまった、抜け。
#include <string.h>

440 :デフォルトの名無しさん:02/11/22 19:33
#include <stdio.h>
#include <math.h>
struct Point{
float X;
float y;
};
struct Triangle{
struct Point a,b,c;
};
void p(struct Point p){
printf("(%f %f)\n", p.X, p.y);
}
void main(void) {
struct Triangle tri;
tri.a.X = 1.0; tri.a.y = 1.0;
tri.b.X = 5.0; tri.b.y = 3.0;
tri.c.X = 4.0; tri.c.y = 2.0;
printf("三角形の頂点\n");
p(tri.a); p(tri.b); p(tri.c);
printf("面積%f", fabs(0.5*((tri.c.X - tri.a.X)*(tri.b.y - tri.a.y) -
(tri.b.X - tri.a.X)*(tri.c.y - tri.a.y))));
}


441 :デフォルトの名無しさん:02/11/22 19:36
>>440
仕様をよく読めよ。

442 :デフォルトの名無しさん:02/11/22 20:12
C言語で画像を
(1) 濃度移動
(2) 濃度変換
(3) 輝度分解能(階調数)
(4) 空間解像度変換
するプログラムをキボンヌ

443 :デフォルトの名無しさん:02/11/22 20:57
>>442
画像ソフトを買え。

444 :デフォルトの名無しさん:02/11/22 22:40
>>443
gimpってオープンソフトだっけ?
だったらそのソースコードを読む。

445 :デフォルトの名無しさん:02/11/22 23:02
オープンソフト........( ゚д゚)

446 :デフォルトの名無しさん:02/11/23 18:02
オープンソース?

447 :デフォルトの名無しさん:02/11/23 23:46
オーブントースター?

448 :デフォルトの名無しさん:02/11/24 01:55
scanf関数で半径rを入力してもらい、
そのrを円を描く関数に渡して円を描くプログラムを…おながいします。
ちなみに、C言語です。。

449 :デフォルトの名無しさん:02/11/24 01:57
printf("r=%dの〇",r);

450 :448:02/11/24 02:09
>449
そのneta 100くらい見た.死ね.

451 :448:02/11/24 02:10
>449
そのneta 100回くらい見た.死ね.

452 :デフォルトの名無しさん:02/11/24 02:12
>>448
環境ぐらい書くもんだ。逝ね。

453 :デフォルトの名無しさん:02/11/24 02:15
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
double r;

scanf("%lf", &r);
//circle(x, y, r); //適当な関数に置換せよ
return EXIT_SUCCESS;
}


454 :448:02/11/24 02:16
>452
SotecのWindows Meです.

455 :デフォルトの名無しさん:02/11/24 02:34
#include <stdlib.h>
#define BEGIN do{
#define END }while(1)
#define mymalloc(s) BEGIN m=malloc(s); END
#define BYNARY (((((((
#define x )*2+
void *m;int main(void){mymalloc(BYNARY 1 x 1 x 1 x 1 x 1 x 1 x 1 x 1 );return 0;}

456 :デフォルトの名無しさん:02/11/24 02:58
>>450-451
騙るわ、間違えて二重投稿するわ、「すれ立てるまでも」で名前消し忘れるわ、、、もっとしっかりしようぜ?

457 :デフォルトの名無しさん:02/11/24 03:12
BYNARY?

458 :デフォルトの名無しさん:02/11/24 03:13
#define END }while(1)
本気ですか?

459 :デフォルトの名無しさん:02/11/24 03:19
>454
結局コンパイラを書かないあたりネタだな、、、

460 :デフォルトの名無しさん:02/11/24 03:45
Bresenham's Algorithmで検索汁!
このマルチポストやろう!

461 :デフォルトの名無しさん:02/11/24 03:49
そういえば、

#define BEGIN }
#define END {

これってどうよ?

462 :デフォルトの名無しさん:02/11/24 03:50


463 :デフォルトの名無しさん:02/11/24 03:59
#define SCREEN_SIZE 100
char screen[SCREEN_SIZE][SCREEN_SIZE];
#define pset(x, y) (screen[x][y] = 1)
void circle(int x0, int y0, int r)
{
 int x, y, dy;
 y = r;
 dy = r - 1;
 for (x = 0; x <= y; x++) {
  pset(x0 + x, y0 + y); pset(x0 - x, y0 + y);
  pset(x0 + x, y0 - y); pset(x0 - x, y0 - y);
  pset(x0 + y, y0 + x); pset(x0 - y, y0 + x);
  pset(x0 + y, y0 - x); pset(x0 - y, y0 - x);
  dy -= x + x + 1;
  if (dy < 0) {
   y--;
   dy += y + y;
  }
 }
}
int main()
{
 int radius, x, y;
 scanf("%d", &radius);
 circle(49, 49, radius);
 for (x = 0; x < SCREEN_SIZE; x++) {
  for (y = 0; y < SCREEN_SIZE; y++) putchar(screen[x][y] ? '*' : ' ');
  putchar('\n');
 }
 return 0;
}

464 :デフォルトの名無しさん:02/11/24 04:56
inline void pset1(int x, int y) { screen[x][y] = 1; }
inline void pset2(int x, int y) { screen[y][x] = 1; }
inline void swap(int *a, int *b) { int tmp = *a; *a = *b; *b = tmp; }
inline int abs(int x) { return x >= 0 ? x : -x; }
inline int signum(int x) { if (x > 0) return 1; else if (x < 0) return -1; else return 0; }
void line(int x1, int y1, int x2, int y2)
{
 int x, y, dx = abs(x1 - x2), dy = abs(y1 - y2), d, delta;
 void (*pset)(int, int) = pset1;
 if (dy > dx) {
  swap(&x1, &y1);
  swap(&x2, &y2);
  swap(&dx, &dy);
  pset = pset2;
 }
 if (x1 > x2) {
  swap(&x1, &x2);
  swap(&y1, &y2);
 }
 delta = signum(y2 - y1);
 d = dx / 2;
 for (x = x1, y = y1; x <= x2; x++) {
  pset(x, y);
  d += dy;
  if (d >= dx) {
   d -= dx;
   y += delta;
  }
 }
}

465 :デフォルトの名無しさん:02/11/24 06:34
>>463
動くけど、なぜ動くか良く分らない…鬱だ

466 :デフォルトの名無しさん:02/11/24 09:42
一連のpset(〜);で、中心点(x0,y0)から、対称な八方向にプロットしている。
x+x,y+yなどは微分値を使用。
xで走査しながら、yで中心点から一定の距離のところを取得(微分値・変化率)。
よくわからん・・・

467 :デフォルトの名無しさん:02/11/24 10:24
(1)
  引数に与えられた整数が素数であるかどうかを判定する関数 is_primeを作成し、
  入力された正の整数を素数分解して表示するプログラムを作りなさい。

(2)
  年(西暦)月日を入力し、その日が1月1日から何日目になるかを表示するプログラムを作りなさい。
  ただし、その年がうるう年であるかどうかを判定する関数is_leapを作成して利用しなさい。

  うるう年は西暦の年が4で割り切れる年。
  ただし、その年が100で割り切れて、かつ、400で割り切れない場合はうるう年ではない。


一度に2つもすみませんがよろしくお願いします。

468 :デフォルトの名無しさん:02/11/24 10:26
>>467
で、いつからここは丸投げスレになったんだ?

正直、あんた向いてない。今いる学校なり会社なりやめて違う道探した方が良いと思う。

469 :デフォルトの名無しさん:02/11/24 12:19
>>468
>で、いつからここは丸投げスレになったんだ?
スレできた当初から。
で、〇投げだめな宿題Cスレ
http://pc3.2ch.net/test/read.cgi/tech/1038024989/l50

470 :デフォルトの名無しさん:02/11/24 12:19
>>468
最初から丸投げスレ。
何も出来ないくせに文句だけ言いたがる厨は、
お外に遊びに言ってなさい。

471 :C言語暦 3ヶ月:02/11/24 12:20
>>467の(2)を作ってみたよ。
正月を「経過日数1」とした。

今現在は16行制限みたいなんで
4/1000もレスを消費するともったいないので

姉妹スレのソーススレ借りました。

宿題のソースはここにおいてね
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1027870433&res=36

472 :C言語暦 3ヶ月:02/11/24 12:21
添削きぼんぬ です。

473 :デフォルトの名無しさん:02/11/24 12:41
>>472
良ろしいんじゃないですか?分りやすくて。
ツェラーの公式を使えばもっと短くなるだろうけど、
読んだ人は分らなくなるかも。

あ、文字列定数中の()は、エスケープする必要ない弟子。


474 :デフォルトの名無しさん:02/11/24 12:42

























475 :C言語暦 3ヶ月:02/11/24 12:43
>>473
)で関数が閉じてしまって 「" がありません」になるかと思ってたよ、Thax.

ツェラーの公式って曜日を算出するものじゃないの?
どうやるのか ソースプリーズ?

476 :デフォルトの名無しさん:02/11/24 12:44




























477 :C言語暦 3ヶ月:02/11/24 12:47
検索したら出てきたよ。

478 :デフォルトの名無しさん:02/11/24 12:50
ここが良くまとまっている。
ttp://www.ne.jp/asahi/futohen/sankaku/h102.htm

479 :デフォルトの名無しさん:02/11/24 13:43
ax^2+bx+c=0
#defineマクロ文を使用し係数を読みこんで、判定し、
実数解がある時はそれぞれのマクロ文をコールし解を求め〜
判別式もマクロ文で作成すること

 朝から何度も適当にやっても解が合いません
判定式と解を出すのを#defineで作っただけでは駄目ですか
仮引数が無いのが駄目ですか
一回講義を休んで分かりませんその時はIF文を習ってました
教科書はTurboC初級プログラミングです






480 :デフォルトの名無しさん:02/11/24 13:44
>>479
書いたソース載せろや。

481 :デフォルトの名無しさん:02/11/24 13:47
>>480
禿同。
ほんと厨房は実装プログラム載せないよな。

482 :デフォルトの名無しさん:02/11/24 13:48
最短距離を探すプログラムを、POINTERを使って
作ってください。

483 :ねた:02/11/24 13:49
ここに打ち込むのはけっこう大変なんですけど…
なんだか画面狭いし…

484 :デフォルトの名無しさん:02/11/24 13:50
気合だ

485 :479:02/11/24 13:53
#include <stdio.h>
#include<math.h>
#define KAI_0 ((-b+m)/(2.0*a)
#define KAI_1 (-b-m)/(2.0*a))
#define KAI_2 (-b/2.0*a)
/*QR(a,b,c) (-b+sqrt(b*b-a*c*4))/(a*2)*/
#define DD (b*b - 4.0*a*c)

int main(void){

double a,b,c,m,x1,x2;

printf("ax^2+bx+c=0\n");
printf("a=");
scanf("%lf",&a);
printf("b=");
scanf("%lf",&b);
printf("c=");
scanf("%lf",&c);



486 :479:02/11/24 13:53
if (DD > 0.0){
printf("a=%.1lf b=%.1lf c=%.1lf\n",a,b,c);
m=sqrt(DD);
printf("x1=%lf\nx2=%lf",KAI_0,KAI_1);
}
else if (DD==0.0){
printf("a=%.1lf b=%.1lf c=%.1lf\n",a,b,c);
printf("x=%lf", KAI_2);
}
else {
printf("解なし");
}
}
試行錯誤の末全てがおかしいんだ

487 :デフォルトの名無しさん:02/11/24 13:55
>>486
>else if (DD==0.0){

浮動小数点でこういうことしない。

488 :デフォルトの名無しさん:02/11/24 14:07
そうだぞ、
else if (!DD) {
で充分。

489 :デフォルトの名無しさん:02/11/24 14:14
>>488
アフォですか?

490 :デフォルトの名無しさん:02/11/24 14:14
あ、ごめん、ネタだったのね。

491 :デフォルトの名無しさん:02/11/24 15:52
http://24honlinecasino.fc2web.com/



492 :デフォルトの名無しさん:02/11/24 16:11
(double)dat==0
では、判定出来ないもの。
abs(dat-0.0)<epsilon
だっけ?
そんな風に判定しないと

493 :デフォルトの名無しさん:02/11/24 16:21
fabs(dat) < DBL_EPSILON

-0.0 は必要無いし

494 :デフォルトの名無しさん:02/11/24 16:28
C言語でhostコマンド似たような実行をするプログラムって、
どんなプログラムになるんでしょう?
よろしければ、考えてもらえますか?

495 :デフォルトの名無しさん:02/11/24 16:33
マルチポストとはなかなか度胸があるな。

496 :デフォルトの名無しさん:02/11/24 17:23
HMX-12 萌え

497 :デフォルトの名無しさん:02/11/24 17:36
>>463
ブレゼンハムのアルゴリズムだね。

>>464
デジタル微分解析による直線描画。

498 :デフォルトの名無しさん:02/11/24 18:10
ふむふむ、
fabs(dat) <DBL_EPSILON
が、プレゼンハムのアルゴリズムで、

デジタル微分解析による直線描画で
hostコマンドと似たようなのものが実装できると

プログラム板は勉強になるなぁ。

499 :デフォルトの名無しさん:02/11/24 18:13
>>498
Kitty-Guy が発生しました

500 :デフォルトの名無しさん:02/11/24 18:15
6と9を読み違えてみたのね…
突っ込みにくいネタはヤメテ!

501 :デフォルトの名無しさん:02/11/24 18:21
>>468
プログラムを学んでいる人の大半はプログラマどころか情報系に就職する
わけでもないのだが

502 :デフォルトの名無しさん:02/11/24 18:30
112233334444555555556666をLz78符号化して
112020343440474059510510606136
という結果を得たとき、これを復号化する際
〜106
を10番目の語句+6ではなく、1番目の語句+0+6番目の語句+…と解釈すると
1122333344445551203316612334となります。
辞書の番号が一桁なのか二桁なのかどう区別したらいいのでしょうか?

503 :デフォルトの名無しさん:02/11/24 18:30
基地男が発生しました。

504 :デフォルトの名無しさん:02/11/24 18:31
>>502
またそのネタかよ…
LZ78は符号化じゃないってば。

符号化の勉強しろよ。エリアス符号とか、SSS符号とか、エントロピー符号化でもイイや。

圧縮スレ行けば?

505 :デフォルトの名無しさん:02/11/24 18:34
>>502
宿題なら答えてやるから、宿題の問題文をそのまま示せ。

506 :デフォルトの名無しさん:02/11/24 19:00
>>504
エントロピー符号はLZ78に適用出来ないだろ
LZ78自体が表現出来てないんだから

507 :デフォルトの名無しさん:02/11/24 19:17
>>506
そのとおりだが、エントロピー符号化の勉強をすれば、
可変長のビット列をバイト指向のストリームに書く方法くらいは
わかるんではないかと思った。

508 :デフォルトの名無しさん:02/11/24 19:28
>>506
LZ78,77のようなparsing法は、エントロピー符号化で書けます

1)Eliasのγ、δ符号のように指数部とバイナリ部をエントロピー符号化する
2)記号単位で符号化する(parsing to symbolwise でしらべてみてちょ)

509 :デフォルトの名無しさん:02/11/24 19:29
標準入力から無向グラフのデータを与えると、
グラフの辺を全て1度ずつ通る道筋(オイラー路)を出力する
Cのプログラムを書きなさい。
入力の形式は、
・最初の行に頂点の数N
・残りのN行は、それぞれ0番〜N-1番の頂点を表す。
 最初に辺の数が書いてあり、その後に辺で結ばれる相手の頂点の番号が
 並んでいる。区切り記号は1個の空白とする。
・グラフは連結であると仮定してよい。
出力は、頂点の番号をたとえば
12-24-179-3-...
のようにハイフンで結んで標準出力に書き出すこと。

よろしくお願いします。

510 :デフォルトの名無しさん:02/11/24 19:39
>>509
これってNP完全じゃないの?

511 :デフォルトの名無しさん:02/11/24 19:45
皆さん、そんな難しい用語使わないで下さい。
大学院にも行ってないので理解できません。

512 :デフォルトの名無しさん:02/11/24 20:10
>>510
ちがう。ハミルトン路ならNP完全だが、
オイラー路はO(N)で求まるはず。

513 :デフォルトの名無しさん:02/11/24 20:15
オイラーはドラマー

514 :デフォルトの名無しさん:02/11/24 20:25
必ず1ふでがきできるってこと?

515 :デフォルトの名無しさん:02/11/24 20:27
>>512
ケーリーだ。ケーリー。

516 :デフォルトの名無しさん:02/11/24 20:28
>>514
できるかどうかはデータによる。
できるとしたら、解がどのくらいの計算量で求まるかという話。

517 :467:02/11/24 23:26
どなたか>>467の(1)の問題わかる方いませんか?
関数が出てきてから理解できなくなってきたんでお願いします。


518 :デフォルトの名無しさん:02/11/24 23:32
>>509
再帰関数

519 :デフォルトの名無しさん:02/11/24 23:35
>>517
2以上の整数で割れたら割って、を続けて行けば?

520 :デフォルトの名無しさん:02/11/24 23:43
>>517
#include <stdio.h>
int is_prime( int x ) { /* x が素数なら 0、素数でなければ一番小さい素因数を返す */
int n, i;
if ( x < 2 ) return 0;
if ( x % 2 == 0 ) return 2;
n = x/2;
for ( i = 3; i < n; i+=2 )
if ( x % i == 0 ) return i;
return 0;
}
int main( void ) {
int n, d;
fputs( "正の整数を入力してください: ", stdout );
scanf( "%d", &n );
if ( n < 1 ) {
printf( "%d は正の整数ではありません。\n", n );
exit( 1 );
} else if ( n == 1 ) {
puts( "1" );
exit( 0 );
}
while ( (d = is_prime(n)) != 0 ) {
printf( "%d, ", d );
n /= d;
}
printf( "%d\n", n );
return 0;
}

521 :デフォルトの名無しさん:02/11/24 23:54
int is_prime(int n){
for(i=2; i<n; i++)
if(n%i==0){
printf("%d ",i);
n/=i;
i--;
}
}

522 :467:02/11/25 00:30
できました。
どうもありがとうございました〜。

523 :デフォルトの名無しさん:02/11/25 01:00
ちっ、遅かったか
bool is_prime(int n, std::vector<int> &factor=std::vector<int>()) {
factor.clear() ;
for(int i=2;i*i<=n;i++) while(!(n%i)) factor.push_back(i),n/=i ;
if(n!=1) factor.push_back(n) ;
return factor.size()==1 ;
}

524 :デフォルトの名無しさん:02/11/25 07:59
■問題1
FileName = "test.csv"; を開いて 配列 TextData に 1行ずつ格納する プログラムを書け。

■問題2
問1の配列を逆順にする プログラムを書け。

■問題3
test.csv は タブ(\t)区切りフォーマットである。
<table> タグを利用し、CSVファイルの中身を全て表示するプログラムを書け。

C++


525 :デフォルトの名無しさん:02/11/25 08:50
>>524
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <vector>
#include <algorithm>
void readFromStream(std::istream &is,std::vector<std::string> &result)
{
 std::string temp;
 while(std::getline(is,temp)) {
  result.push_back(temp);
 }
}
void writeToStream(std::ostream &os,const std::vector<std::string> csv)
{
 os << "<table>" << std::endl;
 for(std::size_t i = 0;i < csv.size();i++) {
  os << "\t<tr>";
  std::string line = csv[i];
  std::istringstream iss(line);
  
  std::string temp;
  while(std::getline(iss,temp,'\t')){
   os << "<td>" << temp << "</td>";
  }
  os << "</tr>" << std::endl;
 }
 os << "</table>" << std::endl;
}

526 :デフォルトの名無しさん:02/11/25 08:51
続き
int main(int argc,char **argv)
{
 std::string fileName = "test.csv";
 std::ifstream ifs(fileName.c_str());
 if(!ifs.is_open()) return 1;
 
 std::vector<std::string> csv;
 readFromStream(ifs,csv); //読み込んで
 
 std::reverse(csv.begin(),csv.end()); //逆順にして
 
 writeToStream(std::cout,csv); //とりあえず標準出力に書き出してみる
 return 0;
}


527 :デフォルトの名無しさん:02/11/25 08:54
とりあえず1と2だけ。
1:
std::list< std::string > TextData[1];
std::ifstream ifs(FileName);
std::string tmp;
while( std::getline(ifs,tmp) )
TextData[0].push_back(tmp);

2:
TextData[0].reverse();

528 :デフォルトの名無しさん:02/11/25 09:35
VC++をつかってじゃんけんのゲームを作ってます。ダイアログベース。グー チョキ パーのボタンをそれぞれ配置して、結果に応じて絵が出るようにしたいでつ。
どう記述すればいいか教えてください。

529 :528:02/11/25 09:38
で、5回負けたらゲームオーバー、5回買ったら勝利ってことにしたいです。
絵が出るというのは、北斗ののびたみたいにアニメチックにしたいです

530 :46:02/11/25 09:42
.NET flame workでコンパイルするときどうするんでつか?

531 :デフォルトの名無しさん:02/11/25 09:59
>>530 それが宿題なんですね。

532 :デフォルトの名無しさん:02/11/25 11:55
>>527
ワラタヨ

533 :デフォルトの名無しさん:02/11/25 20:38
[課題](C言語)
標準入力で入力された文字列を暗号化するプログラムを作成しなさい。

534 :デフォルトの名無しさん:02/11/25 21:07
void NullEncrypt(FILE *in, FILE *out)
{
int ch;
while(ch = fgetch(in), ch != EOF )
 fputch( ch , out );
}
int main() { NullEncrypt( stdin, stdout); return 0;}

535 :デフォルトの名無しさん:02/11/25 21:27
#include <stdio.h>
int main(void) {
int c;
while ( (c = fgetc(stdin)) != EOF )
putchar( c-1 );
return 0;
}

536 :デフォルトの名無しさん:02/11/25 22:40
#include <stdio.h>
#include <stdlib.h>
int main(int artc, char *argv[])
{ int i, c;
 char *p;
 if (argc < 2) {
  fprintf(stderr, "usage: %s keyword...\n", argv[0]);
  return EXIT_FAILURE;
 }
 i = 1;
 p = argv[1];
 while ((c = getchar()) != EOF) {
  if (! *p) {
   if (++i >= argc) {
    i = 1;
   }
   p = argv[i];
  }
  putchar(c ^ *p++);
 }
 return 0;
}

537 :デフォルトの名無しさん:02/11/25 22:55
* ビジュネール暗号 */

#include <stdio.h>

int encrypt(int code, char *keywords[])
{
 if (keywords[0] == NULL) {
  int c = getchar();
  if (c != EOF)
   putchar(c ^ code);
  return c;
 } else {
  char *p;
  for (p = keywords[0]; *p; p++)
   if (encrypt(code ^ *p, keywords + 1) == EOF)
    return EOF;
  return 0;
 }
}

int main(int argc, char *argv[])
{
 while (encrypt(0, argv + 1) != EOF)
  ;
 return 0;
}

538 :デフォルトの名無しさん:02/11/26 13:57
得点を入力してそれの
平均点と標準偏差と偏差値得点を出力するプログラムを作成せよ。
負の数値を入力したら実行は終了するものとせよ

539 :デフォルトの名無しさん:02/11/26 16:05
>>538
単純すぎてつまらない。

540 :tekeru:02/11/26 16:46
なんとかまにあったっす。
協力してくれた方々感謝します。


541 :533:02/11/26 17:17
ご協力ありがとうございました。
また来るかもしれないんでよろしくお願いします。

542 :デフォルトの名無しさん:02/11/26 17:45
>>540
だれ?

543 :デフォルトの名無しさん:02/11/26 19:09
動画を再生するソフト作ってください

544 :デフォルトの名無しさん:02/11/27 05:47
多分スレ違いだから安心していい。

545 :デフォルトの名無しさん:02/11/27 12:48
コンソールからの入力で、実数が入力されたときはdouble型の変数に、
整数が入力されたときにはint型の変数に代入させたい。
とりあえず、

#include <stdio.h>
int main( void ){
char buf[100]=" ";
int idata;
double ddata;
char sdata[100];
while( buf[0] != '\n' ){
printf("?");
fgets(buf , sizeof( buf ) , stdin );
if( sscanf( buf , "%d" , &idata ) == 1 )
printf("int型 : %d\n",idata );
else if( sscanf( buf , "%lf" , &ddata ) == 1 )
printf("double型 : %f\n",ddata );
}
return 0;
}

みたいなコードを書いて見たのだけれども、実行してみると、

?10[Enter]
int型
?10.0[Enter]
int型
になっちゃう。(RedHad Linux,gcc)
下の10.0の入力の時に、double型ってなってくれればうれしいのだけれども

546 :教えて厨:02/11/27 12:54
[0,1]区間の乱数を十分多く発生させ
[0,0.1],[0.1,0.2],・・・・[0.9,1]区間にいくつ乱数があるかカウントせよ

次に乱数の初期値を変えて、同じ処理をせよ


-----------------------------------
誰か、やってくれませんか?

547 :教えて厨:02/11/27 12:54
age

548 :デフォルトの名無しさん:02/11/27 12:59
>>545
C 標準では、文字列が何を表すかを判定する方法は無い。
さしあたり strchr() で、小数点を意味するドットがあるかどうかを
探してみろ。

549 :デフォルトの名無しさん:02/11/27 13:00
>>545
doubleとintで取ってから、値を比べて同じならintを使ったら?

>>546
[0,0.1)とかじゃなくていいのか?

550 :546:02/11/27 13:12
>>549
いいです。

551 :デフォルトの名無しさん:02/11/27 13:13
>>549
"10.0" を int にするのか?
あと [0,0.1) って何?

>>546
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
const unsigned int rand_initial = 12345; // ここに乱数の初期値を設定
const unsigned int rand_number = 10000; // ここに乱数を出す数を設定
unsigned int i, cnt[10] = { 0 };
srand(rand_initial);
for(i = 0; i < rand_number; i++)
cnt[(unsigned int)(rand() * 10.0 / RAND_MAX)]++;
for(i = 0; i < 10; i++)
printf("%1.1f 〜 %1.1f の出現数: %u\n", i / 10.0, (i + 1) / 10.0, cnt[i]);
getchar();
return 0;
}

552 :デフォルトの名無しさん:02/11/27 13:15
>>551
数学的には 10.0 = 10 だからおかしくないだろ?

[0, 0.1) ってのは、0以上0.1未満の範囲。


553 :546:02/11/27 13:19
サンクスコ

554 :デフォルトの名無しさん:02/11/27 13:31
>>552
10.0 は有効桁数が設定してあると考えた場合に = 10 にはならないだろ。
「有効桁数が設定してある」 という話を持ち出すべきでないと言うなら、
「数学的には」 という話も持ち出すべきではない。

まあ、545 が明確なルールを設定していないので無意味な議論だが。

555 :549:02/11/27 13:32
>>551
545のプログラムがトライ&エラーって感じだったので
10.0はint扱いでいいのかなって思ったんだけど、
あー、そういう仕様の解釈の方がまっとうかもな。


556 :デフォルトの名無しさん:02/11/27 13:33
>>554
>「有効桁数が設定してある」 という話を持ち出すべきでないと言うなら、
>「数学的には」 という話も持ち出すべきではない。
なんでやねん…

10 = 10.0 = 10.00 = 10.000
は、有効数字が何桁だろうが、有効数字という概念を仮定しようがしまいが
常に成り立つ。

557 :デフォルトの名無しさん:02/11/27 13:39
>10 = 10.0 = 10.00 = 10.000
>は、有効数字が何桁だろうが、有効数字という概念を仮定しようがしまいが
>常に成り立つ。

もうちょっと有効数字について勉強してくれ

558 :デフォルトの名無しさん:02/11/27 13:40
>>557
ハァ?
負け惜しみはもういいよアフォ。

559 :デフォルトの名無しさん:02/11/27 13:43
http://alfin.mine.utsunomiya-u.ac.jp/~niy/algo/s/shannon.html
ここの
if (i>3]&=bit0[cell[i].len&7];
の行、コンパイルエラーになるんだけど、誰かおしえてー

560 :デフォルトの名無しさん:02/11/27 13:44
実数⊃整数だから、10も10.0も実数だと思えばいいんじゃないの。

つーか、整数って実数の特殊例でしょ。

561 :デフォルトの名無しさん:02/11/27 13:46
たとえば有効数字4桁のとき、10.001と10.002は区別できない。
どちらも10.00という同じ物として扱われる。

そう考えると、10.0は10と同一視するしかない。

562 :デフォルトの名無しさん:02/11/27 13:49
>整数って実数の特殊例
それは考え方次第

>そう考えると、10.0は10と同一視するしかない。
いくらなんでも論理展開が無茶苦茶

563 :デフォルトの名無しさん:02/11/27 13:56
"10.0" と "10" が別のデータである事は厳然とした事実だ。
あと、554 の最後の行をちゃんと読んでくれ。

それと、556 はおそらく有効数字と言う言葉の解釈が間違ってるから、
本当に調べ直した方がいいぞ。

564 :549:02/11/27 13:59
>>563
数学の話を急にCの仕様の話に戻すのはズルイ、と思います。
無意味な議論には禿働。

565 :デフォルトの名無しさん:02/11/27 14:02
別のデータって…

「内部表現が違うから」というなら、内部表現を決める前にそんなことを
いうのはおかしい。

プログラマのクセかもしれんが、10は整数で、10.0は浮動小数点数で表さな
きゃならないと決めてかかってるんじゃないか?

概念的には(つまり外部仕様としては)整数は実数の一種なんだから、
厳密に10.0として入力されたら、整数の10だと思って問題なかろう。

566 :デフォルトの名無しさん:02/11/27 14:03
>>563
>おそらく有効数字と言う言葉の解釈が間違ってるから、
>本当に調べ直した方がいいぞ。

うん。調べなおした。間違ってなかった。

567 :デフォルトの名無しさん:02/11/27 14:06
有効数字と有効桁数の区別がつかない悲惨な 566 が居るスレはここですか?

568 :デフォルトの名無しさん:02/11/27 14:08
厳密でない10.0が何か知らんが
「概念的に整数は実数の一種」というのは中学校の先生が
言っていたのかな?中学校ではよくそう教えるからな

569 :デフォルトの名無しさん:02/11/27 14:08
>>567
ヤレヤレ…
有効数字は「桁数」で表します。
「有効数字2桁」とかね。

570 :デフォルトの名無しさん:02/11/27 14:10
国際的エロリスト

エロカイダ 同時多発エロ おっぱいが高層ビルに激突

http://tv2.2ch.net/test/read.cgi/eva/1038360362/l50





571 :デフォルトの名無しさん:02/11/27 14:10
>>568
数⊃複素数⊃実数⊃有理数⊃整数
と大学院(数学専攻)で教わりましたが何か?

572 :デフォルトの名無しさん:02/11/27 14:10
>>567=>>568=スーパーDQN

573 :546:02/11/27 14:11
そんなの高校で習うよ

574 :デフォルトの名無しさん:02/11/27 14:11
へー、整数は実数じゃないんだ。
整数は複素数なの?

575 :デフォルトの名無しさん:02/11/27 14:12
hage

576 :デフォルトの名無しさん:02/11/27 14:15
[0,1]区間の乱数を十分多く発生させ
[0,0.1],[0.1,0.2]…[0.9,1]区間に幾つ乱数があるかカウントせよ
次に乱数の初期値を変えて同じ処理をせよ。
どういうことが判るか?

わかりましぇーん
救済キヴォンヴ


577 :568:02/11/27 14:15
別に間違っているなどとは言っておらん
定義しだいだ、と言ってるだけだ

578 :デフォルトの名無しさん:02/11/27 14:15
ヽ(´ー`)ノ

579 :デフォルトの名無しさん:02/11/27 14:16
>>577
みぐるしいからもうやめれ。
実数に含まれない整数って何だよ(ワラ

580 :デフォルトの名無しさん:02/11/27 14:16
>>576
ネタだとしたら、2 点。

581 :デフォルトの名無しさん:02/11/27 14:18
「作ればあるもーん。定義すればあるもーん。」だろ(w


582 :579:02/11/27 14:19
>>579
構成的手法では再定義することによって初めて
含まれるようにできるだろ?そういう話

583 :デフォルトの名無しさん:02/11/27 14:20
>>582
おいおい。ムズカシイ用語使って煙に巻いたつもりかしらんが、
実数なんていう非加算無限のものに構成的手法が適用できる
わけねーだろ。

584 :デフォルトの名無しさん:02/11/27 14:21
s/非加算/非可算/

585 :デフォルトの名無しさん:02/11/27 14:23
>>583
その辺は勉強してくれ
デデキントの切断とかコーシー列の同値類とか

586 :デフォルトの名無しさん:02/11/27 14:25
>>585
うん。したよ。
自然演繹など、構成論的な手法によって構築できる
公理系は可算無限の対象しか含まないものだけ。

だいたい、constructiveってことはintuitionistic
なんだから、「実数全体の集合」なんてものを扱わない。

587 :デフォルトの名無しさん:02/11/27 14:27
ようするに10.0を10とみなしても良いってことダロ?

588 :デフォルトの名無しさん:02/11/27 14:29
>>587
そんな事は 546 に訊いてくれ。
ちなみに C/C++ の定数の話だったらマズイ。

589 :デフォルトの名無しさん:02/11/27 14:30
しまった「構成的」はconstructiveの訳語か、まずった

590 :デフォルトの名無しさん:02/11/27 14:32
>ちなみに C/C++ の定数の話だったらマズイ。

数学の話を急にCの仕様の話に戻すのはズルイ、と思います。

まあ、[0, 1.0)という中学校の表記法を知らなかった奴だから、
無理もないんだが。

591 :589:02/11/27 14:32
いやそういうわけでもないな。問題なし

592 :デフォルトの名無しさん:02/11/27 14:37
有効数字が「桁数で表すものじゃない」と思っていて、
整数は実数じゃないと思っていて、
[0, 0.1)という表記法を知らなくて、
constructiveという言葉を知らないくせに
構成的手法という言葉を使ってごまかそうと試みる
厨房のいるスレはここですか?

593 :デフォルトの名無しさん:02/11/27 15:24
>>835
アフォですか?

594 :デフォルトの名無しさん:02/11/27 17:51
おいおい有効数字の話はよそでやってくれ。
やるんだったら実装レベルの話しをしてくれ。
入力された文字列から小数点検索して処理すれば
いいだけのはなしだろ。入力データをdouble と
文字列で持たせてやればたいていのことができる。


595 :デフォルトの名無しさん:02/11/27 18:06
[0, 0.1)
これどういう意味なんだ?
ポインタ本にも書いてあったけど意味わからん

596 :デフォルトの名無しさん:02/11/27 18:11
半開区間だっけな?
閉区間  [0,1] 0 <= n<= 1
半開区間 [0,1) 0 <= n< 1
開区間  (0,1) 0 < n < 1

597 :デフォルトの名無しさん:02/11/27 18:11
>>595
>>552


598 :デフォルトの名無しさん:02/11/27 18:11
中学校からやり直せ。

599 :デフォルトの名無しさん:02/11/27 18:12
>>594
過ぎた話を蒸し返すのはやめてくれ。

600 :デフォルトの名無しさん:02/11/27 18:54
括弧の付け間違いで煽られるのか・・・。

書いたヤツがよっぽど高圧的な物言いをしたのか・・・?


601 :デフォルトの名無しさん:02/11/27 19:01
区間の表記って中学でやったのか?
最近の中学が進んでいるのか
昔の中学が進んでいたのか
俺の中学だけが遅れていたのか
どれなんだろう
ちなみに、俺は高校でやった記憶があるのだが

602 :デフォルトの名無しさん:02/11/29 00:53
for文の式

for( ;(ima %= 12)!= i; printf("%d時\t",++ima));

というのがあるんですが、「%=」の意味はなんですか?

603 :デフォルトの名無しさん:02/11/29 00:53
>>602
余りを代入。

604 :デフォルトの名無しさん:02/11/29 00:55
ima = ima % 12の略
imaを12で割った余りをimaに代入っていう意味

605 :デフォルトの名無しさん:02/11/29 01:23
Windows98,VC++6.0で
改行入りのデータをファイルに書き込みたいんだけど
\nの前に\rが入るのを防げませんか?

606 :デフォルトの名無しさん:02/11/29 01:25
>>603-604
ありがとうございました

607 :483-485:02/11/29 01:36
>>605
ファイルを"wb"モードでfopenしろ。

608 :デフォルトの名無しさん:02/11/29 01:57
>>607
wb・・・
成る程、バイナリモードで開くんですね。
多謝!
勉強し直してきます。

609 :デフォルトの名無しさん:02/11/30 00:36
cの質問です。
データ1、データにを取り込んでそれぞれの平均値、最大値、最小値を求めるプログラムを作成しろとのことです。
ヒントプログラムがあるので書いておきます。

#include <stdio.h>
main() {
double ×××必要な変数を定義します.
int i;
FILE *fp1;
fp1=fopen("data4.txt","r");
for(i=0;i<3000;i++){
ファイルから読み込んでデータを代入していく処理を追加します
}
最大値,最小値を求める処理を追加します.
平均を求める処理を追加します.
printf("データ1の最大値=%f\n",data1max);
printf("データ1の最小値=%f\n",data1min);
printf("データ1の平均=%f\n",data1ave);
printf("データ2の最大値=%f\n",data2max);
printf("データ2の最小値=%f\n",data2min);
printf("データ2の平均=%f\n",data2ave);
fclose(fp1);
}

それでは、よろしくお願いいたします。

610 :JPS ◆M0LaMzf5rY :02/11/30 00:42
>>609
最大値、最小値処理するのはfor文の中でしょ?
てかどっかの本にまるまる載ってそう・・・

611 :デフォルトの名無しさん:02/11/30 00:43
ヒントではなく、答えなのでは、と思いつつも
データ1とデータ2の仕様(data4.txtの中身)が分からないと
答えようがありません

612 :609:02/11/30 00:45
こういった中身のものが無数に広がっています。

13.160653,-44.018177
6.428124,-36.433974
12.031670,-26.586817
9.300368,-74.639087
11.545353,-55.847211
5.894994,-4.096887
12.608508,-66.110320
8.221066,-9.025639


613 :609:02/11/30 00:48
612の数字が(data4.txt)の中身です。

614 :デフォルトの名無しさん:02/11/30 00:50
>>612
左がデータ1で右がデータ2なの?
はっきり書けよ。

615 :609:02/11/30 00:55
すみません。
左がデータ1、右がデータ2です。

共に3000個あります。

616 :JPS ◆M0LaMzf5rY :02/11/30 00:56
あ、どういうこと?
右と左をいっこずつ比べるの?
っていうかforいらなくねー?

617 :609:02/11/30 00:57
データ1ならデータ1同士を、データ2なら2同士をくらべるみたいです。


618 :デフォルトの名無しさん:02/11/30 01:00
double max1,max2,min1,min2,sum1,sum2;
くらい宣言しておくか?

619 :デフォルトの名無しさん:02/11/30 01:03
>618
多分、こうしたいのでは
double data1[3000], data2[3000], buf ; /* 宣言 */
fscanf(fp1,"%lf,%lf",data1+i,data2+i) ; /* forの中身 */

620 :619:02/11/30 01:05
で、その後に、最大・最小・平均値を求めると…

621 :JPS ◆M0LaMzf5rY :02/11/30 01:05
#include <stdio.h>
int main(void)
{
double max_1 = 0,max_2 = 0,min_1 = 0,min_2 = 0,ave_1 = 0,ave_2 = 0;
char buf[256];
FILE *fp1,*fp2;

fp1=fopen("in_data.txt","r");
fp2=fopen("out_data.txt","w");

while(fgets(buf,sizeof(buf),fp1) != EOF)
{

↓あとはたのんだ!

622 :619:02/11/30 01:06
bufは要らなかった…

623 :JPS ◆M0LaMzf5rY :02/11/30 01:07
strtodでできんの?カンマのとこどう区別したらいいんでつか?

624 :デフォルトの名無しさん:02/11/30 01:10
C言語についてちょっと質問です。
乱数を使って6面体や8面体などの色々なサイコロを表現しようと思います。
様々な多面体のサイコロを考えるので、汎用性を持たせるために
乱数の部分を以下のような関数にしました。
int ran(int n)
{
 srand((unsigned)time(NULL));
 return (rand() % n);
}
とりあえず、まず6面体のサイコロを10回振ったことを考えようと思い、
これをmain文の中で
 for(i = 0; i < 10; i++)
  printf("%d", ran(6));
と呼び出して、結果を表示させるようにすると
結果は6666…のようになります。
これでは1回サイコロを振った結果をただ単に
10回表示させたようにしか見えません。
ループ用変数iを関数ranの引数として追加してやって、
srandのところを、
srand((unsigned)time(NULL) + i);
とすればうまくいくことは分かるのですが、
この方法はあまり使いたくありません。
他に正しい結果を得るにはどうしたらよいでしょうか?

625 :デフォルトの名無しさん:02/11/30 01:16
>>624
srandはプログラムの最初に一回だけ呼んでやれば
ranの中には必要ないです

626 :デフォルトの名無しさん:02/11/30 01:17
>>624
コンピュータの実行速度が速いので、同じtime()のsrand()が何度も実行
されてしまうことが原因。

srand()をran()の外に出して最初に一回だけ実行するようにしてご覧。

627 :デフォルトの名無しさん:02/11/30 01:18
毎回同じ値で乱数を初期化してるからだろ。
srand()をmain()に漏ってけ。


628 :デフォルトの名無しさん:02/11/30 01:19
>>625-627
ケコーン(w

629 :デフォルトの名無しさん:02/11/30 01:23
int main(void)
{
  struct STATINFO MinMax[2];
  double in_dbl[2];
  char buf[256];
  int cnt, errcnt, i, at1st = 1;
  FILE *iFP = fopen(DATA_FILE, "r");
  if(!iFP)
  {
    perror("データファイルが見つかりません");
    fputs(DATA_FILE, stderr);
    return -1;
  }
  printf("ファイル %s の処理を開始します。\n", DATA_FILE);
  for(cnt = errcnt = 0; fgets(buf, sizeof(buf), iFP); cnt++)
  {
    if(sscanf(buf, "%lf,%lf", &in_dbl[0], &in_dbl[1]) != 2)
    {
      perror("データが不正です");
      fprintf(stderr, "%d 行目: %s", cnt, buf);
      errcnt++;
    }
    else if(at1st)
    {
      for(i = 0; i < 2; i++)
        MinMax[i].max = MinMax[i].min = MinMax[i].sum = in_dbl[i];
      at1st = 0;
    }

630 :624:02/11/30 01:23
>625-627
すばやいご解答ありがとうございました。
srandは一回だけでよかったんですね。
mainのfor文の前に持ってきたらランダムな数字が表示されるようになりました。

631 :デフォルトの名無しさん:02/11/30 01:23
    else for(i = 0; i < 2; i++)
    {
      if(MinMax[i].max < in_dbl[i])
        MinMax[i].max = in_dbl[i];
      else if(MinMax[i].min > in_dbl[i])
        MinMax[i].min = in_dbl[i];
      MinMax[i].sum += in_dbl[i];
    }
  }
  if(ferror(iFP))
  {
    perror("データファイルの読み込み中にエラーが発生しました");
    fputs(DATA_FILE, stderr);
  }
  fclose(iFP);
  printf("ファイル %s の処理が完了しました。\n", DATA_FILE);
  printf("%d 件のデータを読み込みました。\n", cnt);
  errcnt && printf("%d 件のエラーデータがありました。\n", errcnt);
  if(cnt - errcnt) for(i = 0; i < 2; i++)
  {
    printf("データ %d の最大値 = %lf\n", i, MinMax[i].max);
    printf("データ %d の最小値 = %lf\n", i, MinMax[i].min);
    printf("データ %d の平均 = %lf\n", i, MinMax[i].sum / (cnt - errcnt));
  }
  return 0;
}

632 :デフォルトの名無しさん:02/11/30 01:23
#define DATA_FILE "data4.txt"
struct STATINFO { double min, max, sum; };

こんなん。

633 :デフォルトの名無しさん:02/11/30 01:25
しまった、2 は定数化できるなあ。
あと、構造体の変数名が微妙なのを直すの忘れた。

まー動くから勘弁して。

634 :デフォルトの名無しさん:02/11/30 01:27
宿題やってたら手が冷えた

635 :デフォルトの名無しさん:02/11/30 01:30
ヒントに従えばこうでしょ?

#include <stdio.h>
int main() {
double data1[3000], data2[3000] ;
double data1max, data1min, data1ave, data2max, data2min, data2ave ;
int i;
FILE *fp1;
fp1=fopen("data4.txt","r");
for ( i = 0 ; i < 3000 ; i++ ) {
  fscanf ( fp, "%lf,%lf", data1 + i, data2 + i ) ;
}

for ( i = 0 ; i < 3000 ; i++ ) {
最大値,最小値を求める処理を追加します.
平均を求める前処理を追加します.
}
平均を求める処理を追加します.
printf ( "データ1の最大値=%f\n", data1max ) ;
printf ( "データ1の最小値=%f\n", data1min ) ;
printf ( "データ1の平均=%f\n", data1ave ) ;
printf ( "データ2の最大値=%f\n", data2max ) ;
printf ( "データ2の最小値=%f\n", data2min ) ;
printf ( "データ2の平均=%f\n", data2ave ) ;
fclose ( fp1 ) ;
}

636 :デフォルトの名無しさん:02/11/30 01:36
> double data1[3000], data2[3000] ;

アフォですか?

637 :636:02/11/30 01:38
ごめん。

> for(i=0;i<3000;i++){
> ファイルから読み込んでデータを代入していく処理を追加します
> }
> 最大値,最小値を求める処理を追加します.
> 平均を求める処理を追加します.

分かれてたのね。
・・・出題者はアフォですか?

638 :デフォルトの名無しさん:02/11/30 01:38
for ( i = 0 ; i < 3000 ; i++ ) {
data1max<*(data1+i)?data1max=*(data1+i):(data1min>*(data1+i)?data1min=*(data1+i):void);
data2max<*(data2+i)?data2max=*(data2+i):(data2min>*(data2+i)?data2min=*(data2+i):void);
}
atteru?

639 :638:02/11/30 01:39
平均値の前処理忘れた。

640 :デフォルトの名無しさん:02/11/30 01:44
#include <stdio.h>
int main() {
double data1[3000], data2[3000] ;
double data1max, data1min, data1ave, data2max, data2min, data2ave ;
int i;
FILE *fp1;
fp1=fopen("data4.txt","r");
for ( i = 0 ; i < 3000 ; i++ ) {
  fscanf ( fp1, "%lf,%lf", data1 + i, data2 + i ) ;
}
data1max = data1min = data1ave = data1[0];
data2max = data2min = data2ave = data2[1];
for ( i = 1 ; i < 3000 ; i++ ) {
  if(data1max < data1[i]) data1max = data1[i]; else if(data1min > data1[i]) data1min = data1[i];
  data1ave += data1[i];
  if(data2max < data2[i]) data2max = data2[i]; else if(data2min > data2[i]) data2min = data2[i];
  data2ave += data2[i];
}
data1ave /= 3000;
data2ave /= 3000;
printf ( "データ1の最大値=%f\n", data1max ) ;
printf ( "データ1の最小値=%f\n", data1min ) ;
printf ( "データ1の平均=%f\n", data1ave ) ;
printf ( "データ2の最大値=%f\n", data2max ) ;
printf ( "データ2の最小値=%f\n", data2min ) ;
printf ( "データ2の平均=%f\n", data2ave ) ;
fclose ( fp1 ) ;
}

641 :デフォルトの名無しさん:02/11/30 01:47
>>640
data2max = data2min = data2ave = data2[1]; /* data2[1]が素敵♪ */


642 :640:02/11/30 01:46
クソだなあ・・・。
エラーチェックまるで無いし、ファイル読み終わってもすぐに閉じないし。
ローカルに巨大配列もかなり痛い。

こういう教えられ方されてると、仕事でも平気でこういうコード書いたりしそう。

643 :640:02/11/30 01:48
>>641
   ||
 ∧||∧
(  ⌒ ヽ トゥ トゥ トゥマシェリ マ シェーリー
 ∪ 。ノ    トゥ トゥ トゥマシェリ マ シェーリー
  ∪∪

644 :640:02/11/30 01:50
>>629-632 でいいやん・・・。
したら、こんなどうしようもない間違えしないし。
それとも、バッファ 2 時限にして、double 型でループカウンタ作ればヨカタか?

645 :デフォルトの名無しさん:02/11/30 01:57
微妙なバグを残してある所が本当に良いと思って
素敵♪って書いたんですけどね
でも、何でタイムスタンプ(01:47)が遅い漏れ(>>641)の方が先で
タイムスタンプ(01:46)が早い(>>642)の方が後なのだろうか?

646 :デフォルトの名無しさん:02/11/30 01:58
ちょっと時空を超えただけだ、気にするな。

647 :デフォルトの名無しさん:02/11/30 02:02
タイムスタンプってどこで拾うんだろう・・・

648 :デフォルトの名無しさん:02/11/30 02:43
生暖かい場所で拾う。

649 :デフォルトの名無しさん:02/11/30 04:24
ちなみに生暖かい温かさは、
プールの中でおしっこを漏らしたときの温度です。

650 :デフォルトの名無しさん:02/11/30 11:58
いいえ、感動で流す涙の温度です。

651 :デフォルトの名無しさん:02/11/30 18:27
fork()を理解するために、以下のようなプログラムを作成しました。
#include <stdio.h>
#include <unistd.h>
int main()
{
if(fork())
printf("親です\n");
else
printf("子です\n");
return 0;
}
これを実行したら結果は
親です
子です
となるか、
子です
親です
となって、終了するだろうと予想しました。
しかし、実際は
子です親です

となって、メッセージが2つ表示された後に、
2回改行されてしまいます。これはなぜでしょうか?
環境はUNIX+gccです。

652 :デフォルトの名無しさん:02/11/30 19:22
>>651
親も子も一緒に動いているのに
なんでお行儀良く、片方の出力が完了した後、もう片方が出力される
と思えるのかな?


653 :651:02/11/30 20:39
>>652
一緒に動いているとは言っても、厳密には
CPUは同時に1つのプロセスの処理までしかできない、
そこでCPUスケジューラーによってどれか一つプロセスが
選ばれて、実行されている、そして短時間に何回も
そのプロセスを切り替えることにより、
まるで一緒に動いているかのように見せかけていると聞きます。
その辺はあまり分からないのですが、
もしプログラムの一文単位でプロセスが切り替えられるのなら、
と思って、初め、651のような予想をたてました。
でも652さんのおっしゃることから推測するとそれは違うみたいですね…。
文の途中でもどこか特殊な所ではプロセスが切り替えられているのでしょうか?
例えばそれが\nの直前では常に切り替わる、
とかだと納得がいくのですが…。

654 :デフォルトの名無しさん:02/11/30 21:24
/*問題
 一画素に付き、rgb各8bitの画像データ(320*240)がある。
 任意の閾値(0〜255)を入力すると、それ以上の輝度値を持つ画素のみの画像を
 作成するプログラムを作成せよ。 */

#include<stdio.h>
#include<stdlib.h>
main()
{

unsigned char *img1,*img2;
FILE *fp1;
FILE *fp2;

int x=256,y=256,z=256,i=0,j=0,k=0,l,m,n=0,o=0;
int W[320][240][3],t=0,d=0,A[54];



655 :デフォルトの名無しさん:02/11/30 21:24
m=54+320*240*3;
img1=malloc(m);
img2=malloc(m);


while(x>=256){
printf("青の閾値(0〜255)=\n");
scanf("%d",&x);
}
while(y>=256){
printf("緑の閾値(0〜255)=\n");
scanf("%d",&y);
}
while(z>=256){
printf("赤の閾値(0〜255)=\n");
scanf("%d",&z);
}

fp1=fopen("Red1.bmp","rb");
fp2=fopen("AAA.bmp","wb");




656 :デフォルトの名無しさん:02/11/30 21:25
fread(img1,m,1,fp1);

for(i=0;i<=319;i++){
for(j=0;j<=239;j++){
for(k=0;k<=2;k++){

W[i][j][k]=(int)*(img1+t+k+54);
}
t=t+3;
k=0;
}
t=t+240;
j=0;
}

for(o=0;o<=53;o++){

A[o]=(int)*(img1+o);
}

for(i=0;i<=319;i++){
for(j=0;j<=239;j++){
for(k=0;k<=2;k++){

if(k==0){
if(W[i][j][k]<x){
W[i][j][k]=0;
}
}


657 :デフォルトの名無しさん:02/11/30 21:27
else if(k==1){
if(W[i][j][k]<y){
W[i][j][k]=0;
}
}
else{
if(W[i][j][k]<z){
W[i][j][k]=0;
}
}
}

k=0;
}

j=0;
}



658 :デフォルトの名無しさん:02/11/30 21:27
for(i=0;i<=319;i++){
for(j=0;j<=239;j++){
for(k=0;k<=2;k++){

*(img2+t+k+54)=(unsigned char)W[i][j][k];
}
t=t+3;
k=0;
}
t=t+240;
j=0;
}
for(o=0;o<=53;o++){

*(img2+o)=(unsigned char)A[o];
}

fwrite(img2,m,1,fp2);

free(img1);
free(img2);
fclose(fp1);
fclose(fp2);
}

て宿題なんだけど、これコンパイルしても上手く動かない…。
どこが悪いか教えていただけないでしょうか


659 :デフォルトの名無しさん:02/11/30 21:28
>>653
君の予想はノンプリエンプティブなマルチタスクでのみ当てはまる。
そういうシステムではプロセスは勝手に切り替わらないで、特定の場所でのみ切り替わる。

プリエンプティブなマルチタスクOSではほとんどいつでもどこでも切り替わる。
切り替わるのはCPUの命令単位でプログラムの1文字じゃない。
切り替えるタイミングは要するに時間で決まるので、切り替わる場所は不定。
逆に切り替えられない場所が特殊な場所は有る。

詳しく知りたければアセンブラ勉強しなさい。


660 :デフォルトの名無しさん:02/11/30 22:46
>>659
アセンブラか?


661 :デフォルトの名無しさん:02/11/30 22:53
>>660
加藤茶以外はなかなかつけませんが・・・

662 :名無しの学生サソ:02/12/01 01:32
swap (type, a, b) でtype型の a と b の値を交換する関数マクロを作成せよ。

という問題がわかりません。どなたかヒントを…

663 :デフォルトの名無しさん:02/12/01 01:36
>>662
#define swap(type,a,b) {type t;t=a;a=b;b=t;}

664 :デフォルトの名無しさん:02/12/01 01:38
正確には
#define swap(type,a,b) do{type t, t=a, a=b, b=t;}while(0)

665 :662:02/12/01 01:45
>664
なるほど!関数マクロで{}が使えるんですね!気が付かなかった…
どうもありがとうございました。

666 :662:02/12/01 01:48
訂正
×気が付かなかった
○知らなかった

667 :デフォルトの名無しさん:02/12/01 01:49
関数はマクロじゃないしマクロは関数じゃない。

668 :デフォルトの名無しさん:02/12/01 01:51
>>667
俺もオモタ。

669 :デフォルトの名無しさん:02/12/01 01:59
パラメータ付きのマクロを関数マクロという。

670 :デフォルトの名無しさん:02/12/01 02:05
この場合パラメータの有無は関係ないけどな。

671 :デフォルトの名無しさん:02/12/01 02:07
>>669
岩ねーよ(w

672 :デフォルトの名無しさん:02/12/01 02:11
普通は関数型マクロというな。

673 :デフォルトの名無しさん:02/12/01 02:12
>>671
キティはだまってろ

674 :デフォルトの名無しさん:02/12/01 02:13
「関数マクロ」(w
こいつらアフォだ。


675 :デフォルトの名無しさん:02/12/01 02:14
関数マクロなんて聞いたことないYO!
いかにもDQNっぽいな。

676 :デフォルトの名無しさん:02/12/01 02:16
規格だと、標準ライブラリ
関数が同時にマクロとしても定義してあっても良いことになっている。
たとえば、getcharやgetcはたいてい関数定義とマクロ定義の両方が
ある。

それとごっちゃにしてるんでは?
引数のあるマクロは「引数つきマクロ」だよ。

677 :デフォルトの名無しさん:02/12/01 02:23
google
「関数マクロ C言語」 318件
「関数型マクロ C言語」 38件
「引数つきマクロ C言語」 23件
(ププッ

678 :654:02/12/01 02:24
俺の問題分かる人おらんのかな?


679 :デフォルトの名無しさん:02/12/01 02:30
>>678
読む気がしない。
やってることを言葉で説明してみ

680 :デフォルトの名無しさん:02/12/01 02:34
>>674-676
だぁーーーーっはっはっはっは!!!
D Q N 決 定 だ な (プー

681 :デフォルトの名無しさん:02/12/01 02:41
>>654
まず輝度から調べなおせ。
“任意の閾値(0〜255)を入力するとそれ以上の輝度値”と
言われてるのに、三色の閾値を要求しているのは明らかな勉強不足による無知
(ヒント Y=0.3*R+0.59*G+0.11*B)

682 :デフォルトの名無しさん:02/12/01 02:50
つかそれ以前に、

int W[320][240][3]

は、やめてくれよ。

683 :654:02/12/01 02:52
int W[320][240][3]は問題でつか?

684 :デフォルトの名無しさん:02/12/01 02:56
>>683
コンパイラ(環境)によっては通るんだろうけどなぁ。。。
いきなりスタックを200KB強とるプログラムってのはいかがなもんかと。

685 :超初心者:02/12/01 02:58
ダイアログベースで作成しています。ファイルをコピーするアプリケーションで
コピー元コピー先をボタンをクリックしファイルダイアログボックスを表示させ
、スタティックテキストにファイルまでのパスを表示するというものです。そし
て、もう一つのボタンがありクリックすると、ファイルのコピーを開始するとい
うものです。
但し、以下の場合はメッセージボックスを
表示する。
1.コピー元ファイル名が指定されていない。
2.指定のコピー元ファイルが存在しない。
3.コピー先ファイル名が指定されていない。
4.コピー先ファイルが既に存在する。

4の場合は、問い合わせメッセージの表示とし
ユーザが上書きOKを選択した場合のみ、
コピー実行されるようにする。


という感じです。よろしくお願いします。


686 :デフォルトの名無しさん:02/12/01 03:00
何をよろしくお願いするんだ?

687 :超初心者:02/12/01 03:03
ソースの方よろしくおねがいします。

688 :デフォルトの名無しさん:02/12/01 03:05
ルーク!!ソースを使え!!

689 :デフォルトの名無しさん:02/12/01 03:05
( ゚д゚)ポカーン

690 :デフォルトの名無しさん:02/12/01 03:14
「関数マクロ C言語」 318件
これってほとんど「関数、マクロ」に引っかかってるけど…

691 :デフォルトの名無しさん:02/12/01 03:19
ところで「関数マクロ」って英語でなんていうの?


692 :デフォルトの名無しさん:02/12/01 03:20
functional macro

693 :デフォルトの名無しさん:02/12/01 03:30
>>691
function-like macro
日本語では「関数型マクロ」あるいは「関数形式マクロ」だろうな。

「関数マクロ」は俺も聞いたことない。つーか、なんか変。

694 :デフォルトの名無しさん:02/12/01 04:25
なんも冠つけないでただ「マクロ」と呼んでるんだが・・・
ひょっとして俺だけか?


695 :デフォルトの名無しさん:02/12/01 04:41
>>693
#define N 100
みたいなのは?

696 :デフォルトの名無しさん:02/12/01 04:54
>>695
は?

697 :デフォルトの名無しさん:02/12/01 05:04
>>693じゃなくて>>694ですた。
#define swap(x, y) (...)
が「マクロ」なら、
#define N 100
はなんと呼ぶの?

698 :デフォルトの名無しさん:02/12/01 06:46
どっちもマクロでしょ

699 :デフォルトの名無しさん:02/12/01 06:48
MSDN では単にマクロと呼んでいるな。

700 :デフォルトの名無しさん:02/12/01 07:26
>>654
> それ以上の輝度値を持つ画素のみの画像を作成

その輝度に満たないピクセルを、最低輝度の灰色でべったり埋めればいいのか?
全部を白ピクセルで埋めても仕様的に問題なさそうだ。

701 :デフォルトの名無しさん:02/12/01 08:30
(char)w[240][300][3];奈良?

702 :デフォルトの名無しさん:02/12/01 09:05
いずれにせよ外部のデータを扱う時は malloc() なり new なりにしなさい。

703 :デフォルトの名無しさん:02/12/01 09:30
int getchar();int putchar(int);int main(){char k[]="A52A2245332A252B435B2222A2"
"B2A2A23A2C32A3B5B2222A52B43532A2352C23A52A2246D2A3533B35K2A4D22A3224A45D2C25B"
"2A32A5D2C25D4A26C4A1",*p=k;int i,c,b=1;while(*p){c=0;for(i=0;i<8;i++){if(*p==
'0'){if(!*++p)break;b=!b;}c=(c<<1)+b;if((*p)--=='A')*p='0';if(*p >= 'A')b=!b;}
if(c)putchar(c);}getchar();return 0;}

このプログラムが「オマエモナー」を出力するようにkの初期値を書き換えてください。

704 :デフォルトの名無しさん:02/12/01 09:44
A52A224:ト
5332A2:ロ
52B435:イ
B2222:の
。。。
「〜木馬」ですか?

705 :デフォルトの名無しさん:02/12/01 10:34
char k[]="A52B2A2252A5A252B34535C52A2B226D2A2";

706 :デフォルトの名無しさん:02/12/01 10:36
char k[]="A6B3C26B25A2B2A2A23A2C32A3B6B3A2B5B23B25D2A45G226C2A3";

707 :デフォルトの名無しさん:02/12/01 11:38
char k[]="A5E5A5B2A32A5F3B5B3B3A5B2A4B5E3C5B23A4A5A6E2A3C53A36C222A4A3A3A2A6C22B2C2252A2A2A262232"

708 :デフォルトの名無しさん:02/12/01 11:48
みんなつまんね〜な

709 :デフォルトの名無しさん:02/12/01 12:08
char k[]="A5B2A3A25B4325B22A3A5B24C5B2A32A5B4325B22B36B25A5B22A3";

710 :デフォルトの名無しさん:02/12/01 12:49
トロイ=とろいウィルスの事


本気で信じてた時期があった・・・

711 :デフォルトの名無しさん:02/12/01 13:06
ファイル内の日本語を検索するプログラムを教えてください。
対象ファイル、検索文字列はプログラム内に書き、検索文字列の存在確認はあるかないかだけを
表示するものでお願いします。

712 :711:02/12/01 13:08
C言語でお願いします。

713 :デフォルトの名無しさん:02/12/01 13:38
>>1
トリップはc++で。

714 :714:02/12/01 13:42
Warning: illegal pointer combination (param)
ってエラーが出るんですが何を直せばいいんでしょうか。
C言語のファイルの入出力をやっています。構造体?
というかポインターに問題があるってこと?



715 :デフォルトの名無しさん:02/12/01 13:50
Did you free?

716 ::02/12/01 14:08
あなたは自由でしたか?
あなたはタダでしたか?

717 :デフォルトの名無しさん:02/12/01 15:18
>>716
その場合は Were you free?

718 :デフォルトの名無しさん:02/12/01 15:19
>>714
間違ったポインタを渡してる。

719 :714:02/12/01 16:47
ですよね・・。(param)はパラメーター違反ってことは
{}とかがあってないか根本的に間違ってるか。

720 :デフォルトの名無しさん:02/12/01 17:04
>>719
たぶん後者。
つーかマルチやめい。

721 :714:02/12/01 17:10
はーい。

722 :超初心者:02/12/01 23:58
ダイアログベースで作成しています。ファイルをコピーするアプリケーションで
コピー元コピー先をボタンをクリックしファイルダイアログボックスを表示させ
、スタティックテキストにファイルまでのパスを表示するというものです。そし
て、もう一つのボタンがありクリックすると、ファイルのコピーを開始するとい
うものです。
但し、以下の場合はメッセージボックスを
表示する。
1.コピー元ファイル名が指定されていない。
2.指定のコピー元ファイルが存在しない。
3.コピー先ファイル名が指定されていない。
4.コピー先ファイルが既に存在する。

4の場合は、問い合わせメッセージの表示とし
ユーザが上書きOKを選択した場合のみ、
コピー実行されるようにする。


です。よろしくお願いします。



723 :デフォルトの名無しさん:02/12/02 00:05
ぽかーn

724 :デフォルトの名無しさん:02/12/02 03:02
>>722
CやC++以前に日本語の練習がだいぶ必要。

725 :デフォルトの名無しさん:02/12/02 17:12
行列
( 0 1 )
( 1 1 )
のn乗の計算が出来るプログラムを作りたいのですが・・・
まるっきりわかりません よろしくお願いします・・・




726 :デフォルトの名無しさん:02/12/02 17:14
どこまで出来るの?
行列の乗算するプログラムは作れるのか?

727 :デフォルトの名無しさん:02/12/02 17:15
>>725
進級できるといいな

728 :デフォルトの名無しさん:02/12/02 17:18
行列の普通の掛け算は出来るのですが
n乗はわかりません・・・

729 :デフォルトの名無しさん:02/12/02 17:24
>>725

|0 1|n  |fib(n) fib(n+1)|
|1 1| == |fib(n) fib(n+1)|

ここに、fib(n)はフィボナッチ数列のn番目の数値を表す

730 :デフォルトの名無しさん:02/12/02 19:28
>>729
|0 1|n  |fib(n-1) fib(n) |
|1 1| == |fib(n)  fib(n+1)|
と違う?


731 :デフォルトの名無しさん:02/12/02 19:32
>>703
うちの環境では、gCnCXg[Bという文字しか表示されなかったぞ。
コンパイルに何かオプションでもつけなきゃならんの?
gcc使ってるんだけど。

732 :デフォルトの名無しさん:02/12/02 19:32
>>730
そうだわゴメソ。

733 :デフォルトの名無しさん:02/12/02 19:39
>>722

ス レ チ ガ イ

734 :デフォルトの名無しさん:02/12/02 20:52
>>731
Shit-JIS だから。nkfしる!!

735 :デフォルトの名無しさん:02/12/02 21:10
703 のコード自体は文字コードに依存していない。
char k[] の初期値によっては EUC の出力もできる。

736 :超初心者:02/12/02 22:52
>>733 どうしてスレ違いなんですか?こういう宿題が出てるんですが
わからないんで皆さんのお力を借りようと思っているんです。

737 :デフォルトの名無しさん:02/12/02 23:06
次の各プログラムを作成せよ。
ただし、各関数は並記する書式にしたがって呼び出されるものとし、
それに合わせて関数の戻り値および引数を設定することとする。
ただし、配列のデータを引数として与える際には、
関数側ではポインタによる表記と配列による表記のいずれか一方で記述すれば良いこととする。

半径rの円の円周の長さlおよび面積sを算出する関数 circle() を定義し、
半径10.0[cm]の円についてそれぞれの値を求める。ただし、π=3.1415926536とする。
書式:void circle(double r, double *1, double *s)

他にも同じような問題がいくつかあるので
参考にするためにできるだけ簡単な構文で作ってもらえると助かります。
どなたか、お願いします。

738 :デフォルトの名無しさん:02/12/02 23:09
>>736
どの言語かもわかりません。

739 :デフォルトの名無しさん:02/12/02 23:12
>>737
円周とか円の面積って中学生あたりだっけ?

どこがわかんねーのよ

740 :超初心者:02/12/02 23:14
>>738 すいませんVC++です。

741 :デフォルトの名無しさん:02/12/02 23:18
>>739
ポインタを習い、その演習としての問題なんですが
ポインタ自体の使い方、書式などがさっぱりです。

742 :デフォルトの名無しさん:02/12/02 23:23
>>741
まず教科書を読み直せ。

void circle(double r, double *l, double *s)
{
    *l = 円周の計算;
    *s = 面積の計算;
}



743 :デフォルトの名無しさん:02/12/02 23:23
> double *1

・・・何だって?

744 :デフォルトの名無しさん:02/12/02 23:33
>>743
それは突っ込むのもアホくさいので無視した。

745 :デフォルトの名無しさん:02/12/02 23:48
#include <stdio.h>
#define PI 3.1415926536
void circle(double, double *, double *);
int main(){
double r=10.0,l,s;
circle(r,&l,&s);
printf("l=%lf s=%lf\n",l,s);
return 0;
}
void circle(double r, double *l, double *s){
*s = r*r*PI;
*l = 2*r*PI;
}

746 :デフォルトの名無しさん:02/12/02 23:49
ポインタを使えばまるで関数から
複数の値が返ってきたように考えることができるってやつだっけか?

747 :デフォルトの名無しさん:02/12/03 00:17
今の流行は、

double *1

です。

748 :デフォルトの名無しさん:02/12/03 00:24
もらったレスから以下のように考えたんですが正しい答えが出ません。
どこがまずいんでしょうか?
とりあえず、流行のdouble *1は直しました。

#include <stdio.h>
void circle(double r, double *l, double *s)
{
*l = 2 * r * 3.1415926536;
*s = r * r * 3.1415926536;
}
int main()
{
double r, l, s;
printf("r: ");
scanf("%f", &r);
circle(r, &l, &s);
printf("l = %f, s = %f\n", l, s);
return 0;
}

749 :デフォルトの名無しさん:02/12/03 00:27
scanf("%lf", &r);

750 :デフォルトの名無しさん:02/12/03 00:30
>>748
マジックナンバーをばらまくな。

751 :デフォルトの名無しさん:02/12/03 00:31
doubleはlfで取らなきゃ。

752 :デフォルトの名無しさん:02/12/03 00:31
>>750
いや、それよか東芝でないというなら社名10択ぐらいで挙げてほしい。

753 :デフォルトの名無しさん:02/12/03 00:36
>>752
家電メーカー?
SONY 松下 日立 三洋 …だめぽ


754 :デフォルトの名無しさん:02/12/03 00:40
現在の教育指導要項にしたがってπ=3で計算(略

755 :デフォルトの名無しさん:02/12/03 00:42
(略しちゃだめ

756 :デフォルトの名無しさん:02/12/03 00:54
おかげで、正しい答えが出ました。
有難うございます。

757 :デフォルトの名無しさん:02/12/03 01:41
きいてよ。
これとおなじ名前のスレで2chで初めて1000とったよ。

758 :デフォルトの名無しさん:02/12/03 01:43
>>757
オメ

759 :デフォルトの名無しさん:02/12/03 01:43
>>757
(ノ゚ο゚)ノ おーパチパチ

760 :デフォルトの名無しさん:02/12/03 01:44
そいつぁよかった。sage

761 :デフォルトの名無しさん:02/12/03 01:44
>>757
市ね

762 :デフォルトの名無しさん:02/12/03 01:45
やっふーい!
ありがとう!
でも2Getは一度もないんだな。

763 :デフォルトの名無しさん:02/12/03 02:01
int disp(void)
int sakujo(struct temp dt[],int su)
void ichiran(struct temp dt[],int su)
この3つの関数のプロトコル宣言の書き方を教えてください。
で通じるのでしょうか?
お願いします(´Д⊂)

764 :デフォルトの名無しさん:02/12/03 02:16
>>763
プロトコル宣言じゃなくてプロトタイプ宣言だろ。
最後に ; (セミコロン)を付けるだけだぞ。

765 :デフォルトの名無しさん:02/12/03 02:29
>>764
ありがとございます。
C言語わけわかんなくなってきたyp

766 :デフォルトの名無しさん:02/12/03 03:07
include <stdio.h>
#include <string.h>
struct temp{
char na[20];
int yu1;
int yu2;
char addr[40];
}data[50];
int disp(void);
int tuika(struct temp dt[],int su);
int sakujo(struct temp dt[],int su);
void ichiran(struct temp dt[],int su);
void main(void)
{
int cnt;
int no;
do{
no = disp();
switch (no){
case 1: cnt = tuika(data,cnt);
break;
case 2: cnt = sakujo(data,cnt);
break;
case 3: ichiran(data,cnt);
break;
}
}while(no != 4);
}

767 :デフォルトの名無しさん:02/12/03 03:09
int disp(void)
{
int bango,i;
char menu[4][18] = {"1:データ追加","2:データ削除","3:データ一覧表示","4:終了"};
printf("<<処理メニュー>>\n");
for(i = 0;i < 4;i++)
printf("%s\n",menu[i]);
while(1){
printf("\n処理番号ーー>");
scanf("%d",&bango);
if(bango >= 1 && bango <= 4)break;
printf("入力エラー!!再入力して下さい。\n");
}
return bango;
}
int tuika(struct temp dt[],int su)
{
char ans;
do{
printf("氏名ーー>");
scanf("%s",dt[su].na);
printf("郵便番号ーー>");
scanf("%d-%d",&dt[su].yu1,&dt[su].yu2);
printf("住所ーー>");
scanf("%s",dt[su].addr);
su++;
printf("データの追加を続けますか?(y/n)");
rewind(stdin);
scanf("%C",&ans);
}while(ans == 'y' || ans =='Y');
return su;
}

768 :デフォルトの名無しさん:02/12/03 03:10
int sakujo(struct temp dt[],int su)
{
int i,j;
char name[20];
char ans;
do{
printf("削除するデータの氏名ーー>");
scanf("%s",name);
for(i = 0;i < su;i++){
if(strcmp(name,dt[i].na) = 0)break;
}
if(i < su){
for(j = i + 1;j < su;j++)
dt[j-1] = dt[j];
su--;
}
else
printf("その氏名のデータはありません。\n");
printf("データの削除を続けますか?(y/n)");
rewind(stdin);
scanf("%c",&ans);
}while(ans == 'y' || ans =='Y');
return su;
}

769 :デフォルトの名無しさん:02/12/03 03:10
void ichiran(struct temp dt[],int su)
{
int i;
printf("<<データ一覧>>\n\n");
printf("番号 氏名     郵便番号 住  所\n");
for(i = 0;i <= su;i++)
printf(" %2d %-18s %03-%04d %-28s\n",i + 1,temp[i].na,temp[i].yu1,temp[i].yu2,temp[i].addr);
rewind(stdin);
getchar();
}おてあげ ∩(・∀・)∩


770 :デフォルトの名無しさん:02/12/03 03:27
(main関数内)
int cnt; → int cnt = 0;

(tuika関数内)
scanf("%C",&ans); → scanf("%c",&ans);

(sakujo関数内)
if(strcmp(name,dt[i].na) = 0)break; → if(strcmp(name,dt[i].na) == 0)break;

(ichiran関数内)
for(i = 0;i <= su;i++) → for(i = 0;i < su;i++)

printf(" %2d %-18s %03-%04d %-28s\n",i + 1,temp[i].na,temp[i].yu1,temp[i].yu2,temp[i].addr);

printf(" %2d %-18s %03d-%04d %-28s\n",i + 1,dt[i].na,dt[i].yu1,dt[i].yu2,dt[i].addr);

771 :デフォルトの名無しさん:02/12/03 04:22
#include <iostream>
#include <list>
#include <string>
#include <algorithm>

using namespace std;

class personal_data {
  public:
    void input() {
      char dummy;
      cout << "氏名ーー>"; cin >> name;
      cout << "郵便番号ーー>"; cin >> zip_main >> dummy >> zip_branch;
      cout << "住所ーー>"; cin >> address;
    }
    void output(size_t record_no) {
      cout.width(4); cout<< record_no << " ";
      cout.width(18); cout.setf(ios::left, ios::adjustfield); cout << name << " ";
      cout.width(3); cout.fill('0'); cout << zip_main << '-';
      cout.width(3); cout.fill('0'); cout << zip_branch << " ";
      cout.width(18); cout.fill(' '); cout.setf(ios::left, ios::adjustfield); cout << address << endl;
      cout.setf(ios::internal);
    }
    inline bool operator==(const string &s) {
      return name == s;
    }
  private:
    string name;
    int zip_main, zip_branch;
    string address;
};

772 :デフォルトの名無しさん:02/12/03 04:23
class manager
{
  public:
    void run() {
      while(execute_menu());
    }
  private:
    list<personal_data> DataList;
    bool execute_menu() {
      int menu_no;
      cout << "<<処理メニュー>>" << endl;
      cout << "1:データ追加、2:データ削除、3:データ一覧表示、4:終了" << endl;
      cout << "処理番号ーー>"; cin >> menu_no;
      switch(menu_no)
      {
        case 1: add(); break;
        case 2: remove(); break;
        case 3: show(); break;
        case 4: return false;
        default: cout << "入力エラー!!再入力して下さい。" << endl; break;
      }
      return true;
    }

773 :デフォルトの名無しさん:02/12/03 04:23
    void add() {
      char answer;
      do
      {
        personal_data new_data;
        new_data.input();
        DataList.push_back(new_data);
        cout << "データの追加を続けますか?(y/n)"; cin >> answer;
      } while(answer == 'y' || answer =='Y');
    }
    void remove() {
      char answer;
      string target_name;
      do
      {
        cout << "削除するデータの氏名ーー>"; cin >> target_name;
        list<personal_data>::iterator itr = find(DataList.begin(), DataList.end(), target_name);
        if(itr == DataList.end())
          cout << "その氏名のデータはありません。" << endl;
        else
          DataList.erase(itr);
        cout << "データの削除を続けますか?(y/n)"; cin >> answer;
      } while(answer == 'y' || answer =='Y');
    }

774 :デフォルトの名無しさん:02/12/03 04:23
    void show() {
      cout << "<<データ一覧>>" << endl;
      cout << "番号 氏名        郵便番号 住  所" << endl;
      list<personal_data>::iterator itr;
      size_t record_no = 0;
      for(itr = DataList.begin(); itr != DataList.end(); itr++)
        itr->output(++record_no);
    }
};

int main(void) {
  manager DataManager;
  DataManager.run();
  return 0;
}

775 :デフォルトの名無しさん:02/12/03 22:04
何だ!?ソース荒らしか?

776 :7C:02/12/04 09:36
C++で
ダイアログベースでグーチョキパー3つのボタンを配置してジャンケンするプログラムを作りたい。
おながいします。

777 :7C:02/12/04 09:37
ちなみに形だけはいっちょまえにつくりますた。

778 :デフォルトの名無しさん:02/12/04 11:50
ワケ ワカ ラン

779 :デフォルトの名無しさん:02/12/04 11:53
マジなのかネタなのかわからねぇ。
しまいにゃメール欄に「マジです」とかいてネタ
投稿するぞ。

780 :7C:02/12/04 12:17
まじです

781 :デフォルトの名無しさん:02/12/04 12:53
DirectX SDKのDebug版とRetail版の違いは何ですか?

782 :771-774:02/12/04 15:39
>>775
766-769 に回答しただけなんだが・・・。

783 :デフォルトの名無しさん:02/12/04 16:17
ある文法にしたがったソースを読み込み、そのプログラムを解析する
プログラムを作るというもんだいなんですが。
ようはコンパイラを作る課題の第1歩なんですけど
例えば
A=12;
をよみこんだら
A 変数
= 代入文
12 数値
なんて表示されるものです。
このプログラムは出来たのですが、次の問題に
前問(上の問題)から字句解析機能を関数として作成し前問と同じ
プログラムを作成せよ。ただし変数表の管理にハッシュテーブルライブラリーを
つかうこと。
となっています。
ハッシュテーブルをどこでどうつかうかわからないんですが。。。
分かる方、ご指導おねがいします

784 :783:02/12/04 17:26
あ、上のはC言語でです。
おねがいします

785 :デフォルトの名無しさん:02/12/04 17:32
ただし変数表の管理にハッシュテーブルライブラリーをつかうこと。
て書いてあるじゃない。
変数名(例えば A)をハッシュテーブルに入れていけってことじゃないの?

786 :783:02/12/04 17:36
その場合ハッシュ値はどんなのがいいんでしょう。。。?
前にやった例だと入れるものが数字だったので
その数値をある数でわってあまりをaとすると
hash[a]のとこにいれてくってかんじだったんですが
この場合は変数はアルファベットですよね。
hash[A]なんてするわけにはいかないし。。。
どうすればいいんでしょう?

787 :デフォルトの名無しさん:02/12/04 17:41
文字列のハッシュ関数のサンプルなんて腐る程あると思うが。
つーかハッシュテーブルについてどう習った?

788 :デフォルトの名無しさん:02/12/04 17:43
文字も内部データ的には整数。
例えば、
printf( "%d\n", 'A' );
とかしてみたら、A という文字に対応する整数が表示される。
だから文字列の場合、一番簡単な例でいくと、
全ての文字(に対応する整数)を足した数をハッシュ値にすればいい。

789 :783:02/12/04 17:44
いきなり問題をやらされた感じです。。。
上に書いたような数値の例で。
文字列の例調べてみます

790 :デフォルトの名無しさん:02/12/04 17:48
C言語の問題です。
「2次方程式 ax^2+bx+c=0 において,実数 a,b,c を代入し,その解を求めるプログラムを作成せよ」
という問題なのですが,注意点として

計算機の中では実数は倍精度で処理すると有効数字として15桁程度の精度を持つが,
それ以下の桁では誤差が生じる。その場合,2つの実数の差の絶対値を取り,
それが十分小さければ2つの実数は同じ値であると考える。

と書かれていたのですが,虚数解を求めるところでどうすれば誤差が生じないのか分かりません。
アドバイスお願いします。

791 :783:02/12/04 17:48
>788
あ、なるほど!
もしかして例えば変数Dだったら
hash[D-A]=変数
ってすればいいんですかね!?

792 :デフォルトの名無しさん:02/12/04 17:53
>>783
別に A を引く必要はない。そのままの値を使いな。

793 :783:02/12/04 17:55
あ、正確には
hash[(int)'A'-'D']
ですね。

>792
そのままの値、ということは配列の最初のほうには
何も入らないと云う事ですよね?
宣言を
char hash[(int)'Z']
にしてやればいいのかな

794 :デフォルトの名無しさん:02/12/04 17:55
>>791
 とりあえず変数名が文字列だとしたら、ハッシュキーの作成は
unsigned int makeHashKey( char *str )
{
unsigned int hash = 7743;
int i;
for( i = 0 ; str[i] != '\0' ; i++ ){
 hash = ( hash << 3 ) ^ hash ^ str[i];
}
return ( hash % cHASHTABLESIZE );
}

って感じが良いと思うよ。


795 :デフォルトの名無しさん:02/12/04 17:59
>>793
いや....ある値で割って余りをとるんでしょ?
例えば、割り切れる数だったら 0 になるじゃない?

796 :783:02/12/04 18:05
う。。。またわからんくなってきた。。。

えーと、この場合ハッシュ関数はどうなるのでしょう?
割る数はハッシュサイズですよね?
てかハッシュサイズはどうなるんだ。
そいや数字もつかえるからA〜Zと1〜9の組み合わせ。。。
割られる数は。。。?

>794
forのループでが何を意味してるかわからないのですが
そこではなにをしてるのでしょう?
あと7743ってなんすか?

797 :デフォルトの名無しさん:02/12/04 18:08
>>783
教科書とかにハッシュ法は載ってないのか?
一度じっくり本を読め。

798 :デフォルトの名無しさん:02/12/04 18:09
しつもーん!
>>783にあるハッシュテーブルライブラリはどこに行きましたか?
ハッシュ関数とか用意されてないんですか?
ハッシュテーブルライブラリなら文字列をキーとして値を入力できそうですが?



799 :794:02/12/04 18:26
>>796
 ハッシュキーを作成する関数=ハッシュ関数じゃないのかな。

 7743は適当な定数。短い変数名文字列が、ハッシュテーブルの
前半に集中するのを防ぐために適当に入れただけ。名無しさんとかって
したんだけど、本当は適当に大きな素因数の方が良いのかも。

 forループの中では適当な計算をしている。ハッシュ関数は同じ
入力が与えられたら同じキーを発行したら良いから、適当にキーが
バラけて、かつ速い計算が良い。
 文字列の文字全てをキーに使う為のforループで、中で行っている
計算はxor。andならキーが0に収束するし、orなら1に収束するから
xorが向いている。シフトしているのは文字だけじゃなくてその文字が
文字列のどの場所に出てくるかによってもキーが変わるように。
 シフトしていない部分とのxorも求めているのは、長い文字列で最初の
方の文字がシフトによって消されないため。

 漏れもハッシュの演習を学校でやった事があったけど、実際に数千個の
英単語を入れてキーをグラフにしてみたらちゃんとバラけてた。


800 :783:02/12/04 18:28
教科書は入門書しかないんで役にたたないす。。。

ネットで調べてみたところ、例えば
Abcって変数ならAとbとcをそれぞれコードにしてくっつけて
それを割った値をキーにすればいいんですよね?

でもその前にこの場合のハッシュサイズはどうなるんでしょう?

801 :デフォルトの名無しさん:02/12/04 18:29
> xor

それって何か意味のある動作をするか?

802 :801:02/12/04 18:30
ごめん、シフトもするのね。

803 :783:02/12/04 18:35
>799
うぅ。。。なんかむずすぎて全然わからん。。。
800みたいなやりかたじゃだめすかね?
ABCの文字コードが65、66、67なら
656667と言う数字をハッシュサイズで割り、そのあまりを
添字にもつ配列にいれる。

ハッシュサイズがわからんと思ったけど調べてると
別に割る数はハッシュサイズでなく適当でいいと書いてるとこも
ありましたがそれでいいのかなぁ?

804 :783:02/12/04 18:40
あらかじめハッシュサイズを手動で(100とか)きめといて
(65+66+67)/100をハッシュ値にするのが簡単そうですが
これじゃだめすかね。。。?

805 :デフォルトの名無しさん:02/12/04 18:48
いいから 783 は 798 の質問に答えてくれよ

806 :デフォルトの名無しさん:02/12/04 18:48
>>804
(65+66+67)%100 ね。
別にそれでいいんじゃないかなぁ?
そんなに高度なのは求められてないんでしょ。

807 :783:02/12/04 18:53
>805
あ、ハッシュテーブルライブラリーは別の問題でつくったんですよ。
でもそのままではつかえないのでそれを参考に考えるんだと
思います。
ちょっと問題はしょって書いたし書方わるかったかな。。。

808 :デフォルトの名無しさん:02/12/04 19:03
(´-`).。oO(流用できないようなものをライブラリーと呼ぶのか。。。)

809 :デフォルトの名無しさん:02/12/04 19:03
(´Д⊂ヽ仕様がない

810 :デフォルトの名無しさん:02/12/04 19:09
>>806
それは最後の文字しか意味を持たないじゃん。

811 :デフォルトの名無しさん:02/12/04 19:13
>>810
んなこたーない

812 :デフォルトの名無しさん:02/12/04 19:14
ハッシュ関数の意味判ってんねぇんだな。
あれでいいと思うんなら下手な計算せずに先頭一文字だけそのまま使っとけば?


813 :810:02/12/04 19:17
>>811
わりっす。>803とごっちゃにしちまった。

814 :デフォルトの名無しさん:02/12/04 20:45
char型のアルファベットの文字列をint型に直す関数ってありますか?
atoiだと文字型の数字しかint型になおらないですよね?

815 :デフォルトの名無しさん:02/12/04 20:47
char c= 'A';
int i= (int)c;

816 :デフォルトの名無しさん:02/12/04 20:48
>>815
文字じゃなくて文字列ですよ。

817 :デフォルトの名無しさん:02/12/04 20:49
文字列を直したいんです。
ABCとかいう文字列をなんか一発で。。。
そういうのが無ければ普通に書けばいいんですが
一発で変換みたいなのがあればらくだなと

818 :デフォルトの名無しさん:02/12/04 20:49
文字列を?

819 :デフォルトの名無しさん:02/12/04 20:51
ABCが数値としていくつになればいいの?

820 :デフォルトの名無しさん:02/12/04 20:52
>>817
書けるんだったら書いてみてくれ。


821 :デフォルトの名無しさん:02/12/04 20:52
123

822 :デフォルトの名無しさん:02/12/04 20:53
>>819
2748です。

823 :デフォルトの名無しさん:02/12/04 20:54
つーかchar[]そのものが多倍長整数なんだが。

824 :つまり:02/12/04 20:55
”ABC"='A' * 0x10000 + 'B' * 0x100 + 'C'

825 :デフォルトの名無しさん:02/12/04 20:57
function書くしかないんじゃない。

826 :デフォルトの名無しさん:02/12/04 20:59
MD5つかえ

827 :デフォルトの名無しさん:02/12/04 21:01
>>822
バカモノ。
なにがABCとかいう文字列だ。
16進数字じゃねぇのか?

>>824
それで本当に2748になるのか?

828 :デフォルトの名無しさん:02/12/04 21:02
char *c="ABC";
int i;
memcpy(&i,c,sizeof(int));

829 :デフォルトの名無しさん:02/12/04 21:10
>>790
誰かこれもお願いできませんか?
実数解の場合は分かったんだけど,虚数解の場合がどうしても分からない。
ちなみに実数の場合は
  D = b*b -4.0*a*c;
if(D > 0.0) { /* 実数解 (D > 0) */
x1 = (fabs(b) + sqrt(D)) / (2.0 * a);
if ( b >= 0.0 ) {
x1 = -x1;
}
x2 = c / (a * x1);
printf("x1 = %15.15f, x2 = %15.15f\n", x1, x2);
}
みたいな感じでやりました。

830 :デフォルトの名無しさん:02/12/04 21:11
さて本物のレスがないのは釣りだったのだろうか?

831 :814:02/12/04 21:19
結局普通に自分で書きました(^^;
アルファベットを文字コードにして足して行っただけですが。
ちなみに僕は817しかかいてないですよ

832 :デフォルトの名無しさん:02/12/04 21:21
足してどーすんだよ

833 :デフォルトの名無しさん:02/12/04 21:31
質問!
MS-DOS上でTurboC++使って制御の勉強をやってます。
プログラム→Rs-232C(1)→データ処理→Rs-232C(2)→データ処理
→計算など
と制御させると全体の周期が0.5秒くらいなんです。
そのうち、Rs-232C(1)とRs-232C(2)での外部処理で0.2秒ずつ食われます。
Rs-232Cでコマンドを送った後、データが返ってくるまで
他の処理をさせたいのですが、DOSでは無理ですか?
割り込み処理などでなんとかなるもんですか?


834 :デフォルトの名無しさん:02/12/04 21:37
>>833
データ送受信を割込みで処理すれば割込みが有るまで好きなことが出来る罠。

835 :デフォルトの名無しさん:02/12/04 22:07
「はじめて読む486」を参考にしてマルチタスクを実装する。

836 :833:02/12/04 22:14
レス感謝です。
>>834
その手法を考えて実装してみます。
どこか参考になるHPなどないかなぁ。
(TurboというかBorlandのヘルプはすでに読みましたけど・・・)

>>835
それ持ってます。途中まで読んで休止状態です(w

837 :790:02/12/04 22:52
>>835
俺へのレスですよね?
>>486以降を読んでも誤差を考慮した虚数解については書かれて無いんですけど・・・

838 :デフォルトの名無しさん:02/12/04 22:59
>835は>833だと思われ。

839 :デフォルトの名無しさん:02/12/04 23:05
>837はネタだと思われ

840 :790:02/12/04 23:18
>>838
あ,そうでしたか。同じ2次方程式の問題だったから勘違いしてしまいますた。
ネタじゃないです。マジで誰かお願いします。


841 :デフォルトの名無しさん:02/12/04 23:23
>>840
よーわからんが、この辺はどうだ?
http://cl.rc.kyushu-u.ac.jp/Literacy/PP/H14/adp/program/equation.html

842 :790:02/12/04 23:25
>>841
ん〜。ここで>>829に書いてある実数解のを見つけたんですけど,虚数解のはなかったんですよね。

843 :デフォルトの名無しさん:02/12/04 23:33
>>842
大体虚数をどう表す気だ。 doubleは実数しか表せないんだぞ?
それさえ判れば自明じゃないのか?

844 :790:02/12/05 00:08
>>843
今はreal,imagをdoubleで宣言して,

real = -(b / (2.0*a));
imag = sqrt(fabs (D)) / (2.0*a);
printf("x1 = %15.15f + %15.15fi (虚数解)\n", real, imag);
printf("x2 = %15.15f - %15.15fi (虚数解)\n", real, imag);

のようにやってるんですけど,>>841のページを見ると実数の場合,

if(d >= 0){ /* 判別式が正のとき、解を計算 */
x1 = (-b + sqrt(d)) / (2.0 * a);
x2 = (-b - sqrt(d)) / (2.0 * a);
printf("x1 = %27.20e(%27.20e)\n",x1,a*x1*x1+b*x1+c);
printf("x2 = %27.20e(%27.20e)\n",x2,a*x2*x2+b*x2+c);
}
では桁落ちするらしく,
if(d >= 0){ /* 判別式が正のとき、解を計算 */
x1 = (fabs(b) + sqrt(d)) / (2.0 * a); /* 修正箇所 */
if ( b >= 0.0 ) {
x1 = -x1;
}
x2 = c / (a * x1); /* 修正箇所 */
printf("x1 = %27.20e(%27.20e)\n",x1,a*x1*x1+b*x1+c);
printf("x2 = %27.20e(%27.20e)\n",x2,a*x2*x2+b*x2+c);
}
のように修正すると書かれてたので,虚数解の場合も修正しないとまずいのでは?
と思ったのですが違うのでしょうか?

845 :790:02/12/05 00:11
>>844
追加
Dもdoubleで宣言し,↓のようにしています。
D=b*b -4.0*a*c


846 :デフォルトの名無しさん:02/12/05 00:17
毎度お馴染み TURBO C++ です。
#include <iostream.h>
#include <complex.h>

int main(void)
{
double x = 3.1, y = 4.2;
complex z = complex(x,y);
cout << "z = "<< z << "\n";
cout << " and imaginary real part = " << imag(z) << "\n";
cout << "z has complex conjugate = " << conj(z) << " \n";
return 0;
}

847 :デフォルトの名無しさん:02/12/05 01:03
>>846
Cの問題なので却下。

848 :デフォルトの名無しさん:02/12/05 19:00
引き篭もり

849 :デフォルトの名無しさん:02/12/05 19:38
double _Complex z;

850 :デフォルトの名無しさん:02/12/06 00:34
#include <stdio.h>
#include <math.h>

main()
{
int c=0,temp=0;


while((c=getchar())!='a'){
if(c==' ') temp=c;
else{
if(temp==' ') {
putchar(temp);
temp='a';
}
putchar(c);
}
}

return 0;
}

上のプログラムは,某本の二つ以上の空白を一つの空白に置き換えながら,入力を出力しなさいという問題の答えです。
このプログラムの改善点などありますでしょうか?

851 :デフォルトの名無しさん:02/12/06 00:35
#include <stdio.h>
#include <math.h>

main()
{
int c=0,temp=0;


while((c=getchar())!='a'){
if(c==' ') temp=c;
else{
if(temp==' ') {
putchar(temp);
temp='a';
}
putchar(c);
}
}

return 0;
}

上のプログラムは,某本の二つ以上の空白を一つの空白に置き換えながら,入力を出力しなさいという問題の答えです。
このプログラムの改善点などありますでしょうか?


852 :デフォルトの名無しさん:02/12/06 00:37
#include <stdio.h>
#include <math.h>

main()
{
  int c=0,temp=0;


  while((c=getchar())!='a'){
   if(c==' ') temp=c;
   else{
    if(temp==' ') {
     putchar(temp);
     temp='a';
    }
    putchar(c);
   }
  }

  return 0;
}

上のプログラムは,某本の二つ以上の空白を一つの空白に置き換えながら,入力を出力しなさいという問題の答えです。
このプログラムの改善点などありますでしょうか?

853 :デフォルトの名無しさん:02/12/06 00:37
ワラタ

854 :JPS ◆M0LaMzf5rY :02/12/06 00:40
>>852
#include <stdio.h>

int main(void)
{
int ch;

while ( (ch = getchar() ) != EOF )
{
putchar( ch );

while ( ch == ' ' )
ch = getchar();
}

return 0;
}

855 :デフォルトの名無しさん:02/12/06 00:43
>>854
それだと,
aa a a   a   a

aa
になってしまいます
aa a a a a
とならなくてはいけないので

856 :デフォルトの名無しさん:02/12/06 00:45
int ch, last_char_was_space = 0;

while ((ch = getchar()) != EOF)
{
if (! last_char_was_space || ch != ' ')
putchar(ch);

last_char_was_space = (ch == ' ');
}

857 :デフォルトの名無しさん:02/12/06 00:51
last_char_was_space = (ch == ' ');

の部分はどういう処理で?
chに' 'を入れる必要性は?

858 :JPS ◆M0LaMzf5rY :02/12/06 00:53
>>857
入れてるんでなくて、比較してんの

859 :デフォルトの名無しさん:02/12/06 00:57
>last_char_was_space
長ぇよ!w

860 :デフォルトの名無しさん:02/12/06 00:59
>>858
いや・・じらさないで早く挿入れて!

861 :デフォルトの名無しさん:02/12/06 01:00
>>846
これなに?

862 :デフォルトの名無しさん:02/12/06 01:00
>>858
chがスペースなら1,でないなら0っすか
で,if文で調べると
こんな高等な技術があったとは

>>859
あほな僕でもわかるようにと,考えてくださったのでしょう

863 :JPS ◆M0LaMzf5rY :02/12/06 01:06
>>862
がんがれ。オレも初めてこの使い方をみた時は正直あせったよ。

864 :西門 ◆J1DLkSnXwI :02/12/06 01:11
呼んだ?

865 :デフォルトの名無しさん:02/12/06 01:19
#include <iostream>
#include <iterator>
#include <algorithm>

bool space_seq(char f,char s){return (f==' ')&&(s==' ');}
main(){
std::cin.unsetf(std::ios::skipws);
std::unique_copy(std::istream_iterator<char>(std::cin),std::istream_iterator<char>(),std::ostream_iterator<char>(std::cout),space_seq);
}


866 :デフォルトの名無しさん:02/12/06 07:49
for(;;)
{
char* c=new char[100];
c=NULL;
}

867 :デフォルトの名無しさん:02/12/06 10:39
for(;;)
{
char* c=new char[100];
c=NULLPO;
}

868 :デフォルトの名無しさん:02/12/06 13:46
>>865
キタ

869 :宿題教えて!:02/12/06 16:02
#include<iostream.h>
/*行列を表すクラス*/
template <class T=int,int a=3> class Matrix {
T x[a];
public :
Matrix();
T &set(int row,int col){return x[(row-1)+(col-1)*a];}
//+演算子
friend Matrix<T,a> operator+(Matrix<T,a> &n,Matrix<T,a> &m){
int i;
Matrix<T,a> ret;
for(i=0; i<a*a; i++){ret.x[i] = n.x[i]+m.x[i];}
return ret;
}
void show();
};
//コンストラクタ
template<class T,int a> Matrix<T,a>::Matrix(){
int i;
for(i=0; i<a*a; i++) x[i] = 0;}
//表示関数
template<class T,int a>void Matrix<T,a>::show(){
int i;
for(i=0; i<a*a; i++){cout << x[i] << " " ;if(i%a == 2)cout << "\n";}
}


870 :宿題教えて!:02/12/06 16:03
int main(){
int length=3;
Matrix<int ,3> a,b,c;//3行3列の行列
int bNumber[9] = {6,5,4,3,2,1,9,8,7};
int i;
for(i=0; i<length*length; i++){a.set(i%length+1,i/length+1) = (i+1)*10;//i*10をセットする}
for(i=0; i<length*length; i++){b.set(i%length+1,i/length+1) = bNumber[i];//あらかじめ用意されたbNumberを入れる}
c.show();
c = a + b;//ここが実行されない
c.show();
return 0;
}
/*C++ですが、行列のクラスをテンプレートで実現して、
+ - * の演算子とinverse関数を実現せよ!とか云って来るんですよ
だから・・・お願いします。教えてください。
+のとこだけでよいので・・・
相談スレでスレ違いだったのでこっちに聞きます
マルチですが、相談すれは無視してください。
*/


871 :デフォルトの名無しさん:02/12/06 16:12
マルチうざー

872 :宿題教えて!:02/12/06 16:15
マルチっていうかスレ違いって云われて
こっちに誘導されますた

>>871
分かるならおしえて!

873 :デフォルトの名無しさん:02/12/06 16:18
実行されないってどういうことよ?

874 :デフォルトの名無しさん:02/12/06 16:24
>>869-870
T x[a];
でa(=3)個分しか用意してないのにa*a個にアクセスしようとしているお前に乾杯

875 :デフォルトの名無しさん:02/12/06 16:24
friend...
You and I are friend?

876 :宿題教えて!:02/12/06 16:33
>>874
あ・・・
ほんとだ
スマソ

877 :宿題教えて!:02/12/06 16:36
できた〜〜
いちおーjavaプログラマのつもりだったのに
情けないです・・・
修行してきます

878 :デフォルトの名無しさん:02/12/06 17:37
>>875
×You and I are friend?
○Are you my friend?

879 :デフォルトの名無しさん:02/12/06 17:47
int ch, last_ch = 0;

while ((ch = getchar()) != EOF)
{
 if (ch == ' ' && last_ch != ' ')
  putchar(ch);
 last_ch = ch;
}

880 :デフォルトの名無しさん:02/12/06 17:49
おもいっきり間違えた…。

while ((ch = getchar()) != EOF)
{
 if (ch != ' ' || ch != last_ch)
  putchar(ch);
 last_ch = ch;
}

881 :デフォルトの名無しさん:02/12/06 17:50
全然ダメだ…。

while ((ch = getchar()) != EOF)
{
 if (ch != ' ' || (ch == ' ' && ch != last_ch) )
  putchar(ch);
 last_ch = ch;
}

つーか複雑になってきたので意味無し。

882 :デフォルトの名無しさん:02/12/06 17:54
何したいのさ

883 :デフォルトの名無しさん:02/12/06 17:58
つーか JPS、前に 「漏れに聞け」 スレで全く同じの扱ったろう。
もう ungetc() を忘れたのか?

884 :デフォルトの名無しさん:02/12/06 18:09
>>881
if(ch != ' ' || lash_ch != ' ')

885 :デフォルトの名無しさん:02/12/06 18:27
>>883
JPSのカキコは全部釣りだって気づいてないのか?

886 :デフォルトの名無しさん:02/12/06 18:37
reiterate me.

887 :デフォルトの名無しさん:02/12/06 18:39
(´-`).。oO(VBスレで釣りだって喚いてた人かな…

888 :デフォルトの名無しさん:02/12/07 15:51
>>487
遅レスに便乗質問なんですけど,

>>else if (DD==0.0){
>浮動小数点でこういうことしない。

とあるのですが,この場合はどう処理するのが正しいのでしょうか?

http://www.google.co.jp/search?q=cache:http://www.cpnet.co.jp/gfan/techdoc/Geometry/numerr.htm
2つの浮動小数点数を、「==」で比較してはならない。「等しい」と判定されなければならない場面で、誤差により、
等しくならないことはしばしばである。この場合、2つの浮動小数点数の差を取り、
その絶対値が、誤差限界より小さい時には、等しいものと判定するようにする。

とあったのですが,どう書いたらよいのか分かりません。お願いします。

889 :デフォルトの名無しさん:02/12/07 15:54
if (fabs(DD) <= EPSILON)

890 :888:02/12/07 16:07
>>889
EPSILONって「十分小さい値」って意味ですかね?
入門用の本にはのって無いんですが。

891 :888:02/12/07 16:14
if(D == 0.0)をif (fabs(DD) <= EPSILON)に置き換えたら,

Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
niji.c:
エラー E2451 niji.c 41: 未定義のシンボル DD(関数 main )
エラー E2451 niji.c 41: 未定義のシンボル EPSILON(関数 main )
警告 W8070 niji.c 61: 関数は値を返すべき(関数 main )

っていうエラーが返ってきちゃったんですけど,なにか定義しなくちゃいけないんでしょうか?

892 :デフォルトの名無しさん:02/12/07 16:15
いや、それは自分で定義するもんじゃないの。
fabsって見た感じ、絶対値返すっぽいし。

893 :デフォルトの名無しさん:02/12/07 16:21
探すか,創る。つか、それぐらい作れ


894 :888:02/12/07 16:34
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vccore/html/_core_why_floating_point_numbers_may_lose_precision.asp
に書いてあるように,

#define EPSILON 0.0001

を追加し,if (fabs(DD)→if (fabs(D)にしたらできました。

実際問題,判別式として分ける場合,EPSILONはどの程度の値として定義すればいいのでしょうか?
0.0001よりもだいぶ小さい値になってるのもあるようなのですが…。

895 :デフォルトの名無しさん:02/12/07 18:24
>>894
> #define EPSILON 0.0001

そんな事するなするな。
<float.h> の DBL_EPSILON や FLT_EPSILON を使え。

896 :デフォルトの名無しさん:02/12/07 18:25
> DBL_EPSILON や FLT_EPSILON

まあ、もともとこんな定数用意してるぐらいだったら、標準で判定関数かマクロか
用意してくれてもいいじゃんとは思うけどナー。

897 :888:02/12/07 18:36
#include <float.h>
if(fabs(D) <= DBL_EPSILON)
記述の方法は↑で良いのでしょうか?
microsoftのページに
2.2204460492503131e-016 として定義された double 用の定数 DBL_EPSILONとあったのですが,
DBL_EPSILONは「どんな場合にも適したdouble用のEPSILONの値」という認識で間違ってませんか?

898 :デフォルトの名無しさん:02/12/07 18:43
判別式が負だったら解なし、解を二つ求めて等しくなったら重解ってことにすりゃいいじゃん。

899 :デフォルトの名無しさん:02/12/07 18:51
>>898
その場合でも
|x1-x2|<=DBL_EPSILONにする必要がありそうな

900 :デフォルトの名無しさん:02/12/07 19:05
>>899
非常に近いけど重解じゃありません、でいいんじゃん?

901 :デフォルトの名無しさん:02/12/07 19:29
fabs() 呼ぶのと、-DBL_EPSILON 〜 DBL_EPSILON の範囲でチェックするのとでは
どっちが速いんだろうな?

902 :デフォルトの名無しさん:02/12/07 19:56
微妙だが、FPU持っててインラインに展開されるとか、signビットのクリアに
なるようならfabs()のほうが速いかもしれん。


903 :option:02/12/07 22:59
要素数が n である配列 a から key と一致する全要素の添え字を、配列 idx の先頭から
順に格納し、一致した要素数を返す以下の関数を作成せよ。

int seachidx(int a[], int n, int key, int idx[]);

誰か完成させてくださいませんか?

904 : ◆F52DmOxJlc :02/12/07 23:10
>>903
これでいいのか?

int seachidx(int a[], int n, int key, int idx[]) {
 int i, j;
 j = 0;
 for (i = 0; i < n; i ++) {
  if (a[i] == key) {
   idx[j] = a[i];
   j ++;
  }
 }
 return j;
}

905 :デフォルトの名無しさん:02/12/07 23:10
>>903
丸なげ?

906 :デフォルトの名無しさん:02/12/07 23:35
0から1の実数をパラメータとして白黒階調画像を表示するPGを作りたい
んですけどアドバイスもらえませんか?

907 :option:02/12/07 23:41
>◆F52DmOxJlcさん
ありがとうございました。
今コンパイル出来ませんが(都合により)後日コンパイルしてみます。
本当に助かりました。

908 : ◆F52DmOxJlc :02/12/07 23:43
>>907
インデントに全角スペース使ってるからコピペはするなよ。

>>906
画像関係は経験ないのでわからない。すまん。

909 :デフォルトの名無しさん:02/12/07 23:48
>>906
256倍して表示汁。

910 :デフォルトの名無しさん:02/12/08 00:18
>>903 C++なら一行。
int seachidx(int a[], int n, int key, int idx[]) {
return std::remove_copy_if(a, a+n, idx, std::bind2nd(std::not_equal_to<int>(), key)) - idx;
}

911 :西門 ◆J1DLkSnXwI :02/12/08 00:22
>>906
よくわからんが、
「1つ1つの画素の輝度が[0,1]の実数で表されている画像を、
白黒2値の表示装置で表示したい」という意味なら、ディザリング
するのがよろしかろう。

#include <stdlib.h>

void dither(double input[], char output[], unsigned size,
  double contrast, double brightness)
{
 unsigned i;

 for (i = 0; i < size; i++) {
  double d = rand() * 2.0 / (RAND_MAX + 1) - 0.5;

  output[i] = (input[i] + d * contrast > brightness);
 }
}

912 :デフォルトの名無しさん:02/12/08 00:22
>>909
>906の言う「0から1の実数」が、「0以上1以下の実数」のことだったら
256倍すると256諧調に収まらないので、
255倍の方がいいかも。

913 :910:02/12/08 00:25
しまった!添え字を入れるのか・・・

914 :906:02/12/08 00:46
たくさんの方ありがとうございます。
912さんの言われると通り0以上1以下の値を持った
2次元配列の値をパラメータとしてそのパラメータを
突っ込めば白黒階調画像が表示できるようなPGという意味でした。
説明不足ですみません。

915 :906:02/12/08 01:08
255倍というナイスアイディアありがとうございました。
ぐぐりました所いい感じのソースが見つかりました。
またなにかありましたらよろしくお願いします。



916 :デフォルトの名無しさん:02/12/08 02:50


917 :デフォルトの名無しさん:02/12/08 05:04
>>905
ここは、そういうスレじゃないのか?

918 :デフォルトの名無しさん:02/12/08 11:42
>>917
そうか、ここはOKなんだな。>1にもとくに書いてないし。

919 :デフォルトの名無しさん:02/12/08 12:02
宿題スレは丸投げ上等だからな。
よくわからん質問。マルチは不定だが。

920 :デフォルトの名無しさん:02/12/08 12:45
こんな宿題がでました。
typedef struct{
int y;/*西暦年*/
int m;/*月(1〜12)*/
int d;/*日(1〜31)*/
}YMD;
上の構造体が与えられているとする。
日付xのn日後の日付を返す以下の関数を作成せよ。
YMD after(YMD x, int n);
日付xのn日前の日付を返す以下の関数を作成せよ。
YMD before(YMD x, int n);
。。。ヒント。。。
★日にち★
▼1〜27▼ 日にちに+1
▼28(2月) うるう年か?▼YES 日にち+1,NO 月+1、日にち+1
▼29 2月?▼YES 月+1、日にち=1,NO 日にち+1
▼30 4,6,9,11月?▼YES 月+1、日にち=1,NO 日にち+1
▼31 12月?▼YES 年+1、月=1、日にち=1,NO  月+1、日にち=1
うるう年は
int isleap(int year)
{
return (year % 4 == 0 && year % 100 != 0 || year % 400 == 0);
}

で求める。
ちなみに西暦は深く考えなくていいです。1735年(?)以前がどうとかあった
気がしましたが。
丸投げ上等らしいので、誰かソース提供して欲すぃのですが・・・。
だめかなぁ・・・。

921 :デフォルトの名無しさん:02/12/08 13:16
static long
jday(YMD x)
{
    int y = x.y, m = x.m;
    long d = x.d;
    if ((m -= 3) < 0) {m += 12; y--;}
    d += (long)y * 365 + y / 4 - y / 100 + y / 400;
    return d + (m * 153 + 2) / 5;
}


922 :デフォルトの名無しさん:02/12/08 13:16
static YMD
toYMD(long d)
{
    int y, m;
    --d;
    y = d / (365 * 400 + 97) * 400; d %= 365 * 400 + 97;
    y += (d / (365 * 4 + 3)) * 4; d %= 365 * 4 + 3;
    y += d / 365; d %= 365;
    m = (d / 153) * 5; d %= 153;
    m += (d / 61) * 2; d %= 61;
    m += d / 31; d %= 31;
    ++d;
    if ((m += 3) > 12) {m -= 12; ++y;}
    {YMD x = {y, m, d}; return x;}
}


923 :デフォルトの名無しさん:02/12/08 13:17
YMD after(YMD x, int n)
{
    return toYMD(jday(x) + n);
}

YMD before(YMD x, int n)
{
    return after(x, -n);
}


924 : ◆F52DmOxJlc :02/12/08 13:33
ヒントが出てるんならそれに沿って回答した方が先生も喜ぶかな。

YMD after(YMD x, int n) {
 int i;
 for (i = 0; i < n; i ++) {
  if (x.d < 28) {
   x.d ++;
  } else if (x.d == 28) {
   if (x.m == 2 && isleap(x.y)) {
    x.m ++;
    x.d = 1;
   } else {
    x.d ++;
   }
  } else if (x.d == 29) {
   if (x.m == 2) {
    x.m ++;
    x.d = 1;
   } else {
    x.d ++;
   }

925 : ◆F52DmOxJlc :02/12/08 13:35
  } else if (x.d == 30) {
   if (x.m == 4 || x.m == 6 || x.m == 9 || x.m == 11) {
    x.m ++;
    x.d = 1;
   } else {
    x.d ++;
   }
  } else {
   if (x.m == 12) {
    x.y ++;
    x.m = 1;
    x.d = 1;
   } else {
    x.m ++;
    x.d = 1;
   }
 }
 return x;
}

before() は after() を改造すればできるよね。

926 :920:02/12/08 14:36
おぉ!!こんなにソースが!!
有難いです。ここにいる方々には感謝してもしきれません。
本当にありがとうございました。
>◆F52DmOxJlc さん
あなたの事は神と呼ばせて下さい!!
神(^^)/ありがとう!!

927 : ◆F52DmOxJlc :02/12/08 14:42
>>926
インデントに全角スペース使ってるからコピペはするなよ。
しかも動作確認してないから間違ってたら適当に修正しておくれ。
//この程度で神はカンベンw

928 :デフォルトの名無しさん:02/12/08 14:45
いやー、JPSも成長したなあ。
人にいろいろ教えてあげるようになったとは。

929 :デフォルトの名無しさん:02/12/08 14:48
配列にデータを入力し、二乗の和と平均を表示するプログラムを作りなさい。
ただし、入力、二乗の和、合計のための関数を作って利用しなさい。

#include <stdio.h>
void input(double a[], int n);
double sum2(double sum2[],int n);
double sum(double sum[], int n);

int main(int argc, char* argv[])
{
double y[1000];
int n;
printf("いくつ入力するか決めてください:");
scanf("%d",&n);
input(y,n);
printf("二乗の和は%fです。\n",sum2(y,n));
printf("平均値は%fです。\n",sum(y,n)/n);
return 0;
}

void input(double a[], int n) {
int k;

for(k = 0; k < n; k++) {
printf("%d個目の数字を入力してください:", k+1);
scanf("%lf", &a[k]);
}
}


930 :デフォルトの名無しさん:02/12/08 14:48
馴れ合いはカンベンw

931 :929:02/12/08 14:50
double sum2(double sum2[], int n)
{
int i;
double x = 0;
for (i = 0; i < n; i++) {
x += sum2[i]*sum2[i];
}
return x;
}

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

作ってみたんですけど不安なのでおかしいところとか言ってくれませんか?

932 :デフォルトの名無しさん:02/12/08 15:12
すまん、>>922は間違ってた。百年単位の閏年の処理を抜かしてたのと、4年単
位のところでなぜか3を足してた。

static YMD
toYMD(long d)
{
    int y, m;
    --d;
    y = d / (365 * 400 + 97) * 400; d %= 365 * 400 + 97;
    y += (d / (365 * 100 + 24)) * 100; d %= 365 * 100 + 24;
    y += (d / (365 * 4 + 1)) * 4; d %= 365 * 4 + 1;
    y += d / 365; d %= 365;
    m = (d / 153) * 5; d %= 153;
    m += (d / 61) * 2; d %= 61;
    m += d / 31; d %= 31;
    ++d;
    if ((m += 3) > 12) {m -= 12; ++y;}
    {YMD x = {y, m, d}; return x;}
}


933 :920:02/12/08 15:17
修正ありがdです。
学校行ったらさっそく試してみますね。

934 :デフォルトの名無しさん:02/12/08 15:20
>>932
たびたびすまん。2000/2/29が間違ってた。

>     y += (d / (365 * 100 + 24)) * 100; d %= 365 * 100 + 24;
ここをこうしる。
    if (d == 365 * 400 + 96) {
        y += 3;
        d = 365 * 100 + 24;
    }
    else {
        y += (d / (365 * 100 + 24)) * 100; d %= 365 * 100 + 24;
    }


935 :デフォルトの名無しさん:02/12/08 15:29
>>929
それでいい。

936 :デフォルトの名無しさん:02/12/08 16:17
>>934
禿しく鬱。

static YMD
toYMD(long d)
{
    int y, m, i;
    --d;
    y = d / (365 * 400 + 97) * 400; d %= 365 * 400 + 97;
    if (d == 365 * 400 + 96) {
        y += 399;
        d = 365;
    }
    else {
        y += (d / (365 * 100 + 24)) * 100; d %= 365 * 100 + 24;
        y += (d / (365 * 4 + 1)) * 4; d %= 365 * 4 + 1;
        if (d == 365 * 4) {y += 3; d = 365;}
        else {y += d / 365; d %= 365;}
    }
    m = (d / 153) * 5; d %= 153;
    m += (d / 61) * 2; d %= 61;
    m += d / 31; d %= 31;
    ++d;
    if ((m += 3) > 12) {m -= 12; ++y;}
    {YMD x = {y, m, d}; return x;}
}


937 :デフォルトの名無しさん:02/12/08 16:35
N×L行列と、L×M行列の積を求めるプログラムですが、
N、L、Mをmain関数の中で与えたいのですが、
どのようにしたらよろしいのでしょうか?
#include <stdio.h>
#include <stdlib.h>
#define N 3
#define L 5
#define M 4
typedef double matNL[N][L];
typedef double matLM[L][M];
typedef double matNM[N][M];
void multiply(matNM c, matNL a, matLM b)
{
int i, j, k;
double s;
for (i = 0; i < N; i++)
for (j = 0; j < M; j++) {
s = 0;
for (k = 0; k < L; k++) s += a[i][k] * b[k][j];
c[i][j] = s;
}
}

void matprint(int nrow, int ncol, double *a)
{
int i, j;
for (i = 0; i < nrow; i++) {
for (j = 0; j < ncol; j++) printf("%8.1f", *a++);
printf("\n");
}
}

938 :937:02/12/08 16:35


int main(void)
{
int i, j;
static matNL a;
static matLM b;
static matNM c;
for (i = 0; i < N; i++)
for (j = 0; j < L; j++)
a[i][j] = rand() / (RAND_MAX / 10 + 1);
for (i = 0; i < L; i++)
for (j = 0; j < M; j++)
b[i][j] = rand() / (RAND_MAX / 10 + 1);
printf("A\n"); matprint(N, L, (double *)a);
printf("B\n"); matprint(L, M, (double *)b);
multiply(c, a, b);
printf("AB\n"); matprint(N, M, (double *)c);
return (0);
}


939 :デフォルトの名無しさん:02/12/08 17:04
>>937
malloc/freeって知ってる?

940 :937:02/12/08 17:15
>>939
malloc/freeは少しだけ使ったことあります。。
mallocでa[N][L]、b[L][M]、c[N][M]を確保して、
やろうと思ったのですが、
multiply()を定義する部分で、
()内をどうしたらよいのかわかりませんでした。

941 :デフォルトの名無しさん:02/12/08 17:29
void
multiply(double *c, double *a, double *b, int l, int n, int m)
{
  int i, j, k;
  double s;
  for (i = 0; i < n; i++) {
    for (j = 0; j < m; j++) {
      s = 0;
      for (k = 0; k < l; k++)
        s += a[i*l+k] * b[k*m+j];
      c[i*m+j] = s;
    }
  }
}


942 :937:02/12/08 17:44
>>941
ありがとうございます。
ちょっと、やってみます。

943 :ぼるじょあ ◆yBEncckFOU :02/12/08 18:03
すみません。C言語のMAKEファイルの宿題が出たんですが
さっぱりわからないんですがどこかに使い方の解説のサイトは無いでしょうか?
すれ違い?

944 :デフォルトの名無しさん:02/12/08 18:50
C言語初心者です。
19の47乗を143で割った余りを求めたかったので
C言語で以下のような記述をしました。

printf("%d\n", (int)pow(19, 47) % 143);

すると表示される結果は-24となります。
正の数を正の数で割ったので、あまりがマイナスになることはありません。
実際に合同式を用いて手作業で計算すると、
答えは24になりました。
どうしてC言語を用いて計算するとマイナスになるのでしょうか?
環境はCygwin+gccです。

945 :デフォルトの名無しさん:02/12/08 18:59
区間[0,1),[1,2),[2,3)に含まれるデータの個数を
配列を用いてカウントするプログラムを作成せよ。
ただし、個数のカウントに条件分岐をしようしてはいけない。

データ型の変換について習ったんでそれを使うんでしょうが、
条件分岐を使わないでどう組むのか全く分かりません。
助言お願いします。

946 :デフォルトの名無しさん:02/12/08 19:05
>>943
「MAKEファイル」でぐぐっただけだがこんなんはどうよ。
http://www-clim.kugi.kyoto-u.ac.jp/yasunaga/make.html

947 :デフォルトの名無しさん:02/12/08 19:09
>>944
19の47乗は61桁ほどになり、通常の処理系ではintでもdoubleでも正確に
表せないからどちらにしろ答えは無意味。

948 :デフォルトの名無しさん:02/12/08 19:10
>>944
19の47乗は10進で61桁の数になる。
浮動小数点数の有効桁数は17桁くらいだから、
正確な計算は全く期待できない。

949 :デフォルトの名無しさん:02/12/08 19:11
>>945
その3つの区間の数値は、小数点以下を切り捨てるとそれぞれ
0, 1, 2になる。これを配列の添え字に使う。

950 :デフォルトの名無しさん:02/12/08 19:12
>>944
> 実際に合同式を用いて手作業で計算すると、
最初からそっちでプログラムしろ。


951 :937:02/12/08 19:16
>>939,941
ありがとうございました。
無事解決できました。

952 :デフォルトの名無しさん:02/12/08 21:48
>>944
前スレに似たような質問があったような気がするが。

953 :デフォルトの名無しさん:02/12/08 21:58
unsigned long int modpow(unsigned long int a,unsigned long int k,unsigned long int m){
unsigned long int b;
for(b = 1; k > 0; a = a * a % m, k >>= 1)
if(k & 1) b = b * a % m;
return b;
}

954 :デフォルトの名無しさん:02/12/09 01:13
>>953
ビット演算がよく分かりません。
それはどういうアルゴリズムで、
どのぐらいの大きさまで計算できるんですか?

955 :デフォルトの名無しさん:02/12/09 01:50
>>947
(゚Д゚)ハァ?

956 :デフォルトの名無しさん:02/12/09 04:34
>>954
処理系に依存するっスよ

957 :デフォルトの名無しさん:02/12/09 04:49
>>955
その(゚Д゚)ハァ?の意味がわからない。どこかおかしいか?

958 :デフォルトの名無しさん:02/12/09 04:50
>>955
新しいため息のつきかた・・・

959 :デフォルトの名無しさん:02/12/09 05:24
リストに関するプログラム例として英語の文書ファイルに現れる単語リスト
を作成するプログラムを考えることにする。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct CELL{
char word[32];
struct CELL *next;
};

int main(){
struct CELL *words, *p;
char newword[32];

words = NULL;
while(scanf("%s",newword)== 1){
for(p=words; p!=NULL; p=p->next)
if(strcmp(newword, p->word)==0)break;
if(p==NULL){
p=(struct CELL *)malloc(sizeof(struct CELL));
strcpy(p->word,newword);
p->next=words;
words = p;
}
}
for(p=words; p!=NULL; p=p->next)printf("%s\n", p->word);
}

960 :デフォルトの名無しさん:02/12/09 05:26
>>959の例プログラムを単語リストがアルファベット順になるように
機能拡張してください。よろしくお願いします。

961 :943:02/12/09 05:51
>>946
有難うございました。当方初心者なものでこれでも
難しいです。MAKEする上でコンパイルについて簡単に書かれて
いるものってないでしょうか。

962 :デフォルトの名無しさん:02/12/09 06:12
スプレットシートのコード教えて

963 :デフォルトの名無しさん:02/12/09 07:38
>>961
>>946のページはgoogleで出た中で一通り書いてある所を選
んだだけだから、もっと単純なところも出て来るよ。


964 :デフォルトの名無しさん:02/12/09 13:56
>>960
〜略〜
int main(){
struct CELL *words, *p, *prev;
char newword[32];

words = NULL;
while(scanf("%s",newword)== 1){
prev=NULL;
for(p=words; p!=NULL; p=p->next){
if(strcmp(newword, p->word)<0)break;
prev=p;
}
p=(struct CELL *)malloc(sizeof(struct CELL));
strcpy(p->word,newword);
if(p==NULL || prev==NULL){
p->next=words;
words = p;
} else {
p->next=prev->next;
prev->next=p;
}
}
for(p=words; p!=NULL; p=p->next)printf("%s\n", p->word);
}

965 :デフォルトの名無しさん:02/12/09 14:25
>>964
どうもありがとうございます!
これで、レポートは間に合いそうです。

966 :デフォルトの名無しさん:02/12/09 15:06
>>954
(m-1)*(m-1) が桁溢れしなければ計算できるよ。
m が大きい場合はかけ算も同じように二進展開して計算するといい。

967 :943:02/12/09 19:00
>>963
もう少し探してみます。どうもです。

968 :デフォルトの名無しさん:02/12/11 19:02
最後の伸びが悪いな。
宿題こいやこいや〜。

969 :デフォルトの名無しさん:02/12/11 19:18
Amazon で注文したあずまんが大王が先ほど届いたので、これから読もうと思います。
応援してください。

970 :デフォルトの名無しさん:02/12/11 19:23
引き篭もりは篭れ!

971 :デフォルトの名無しさん:02/12/11 19:31
>>969
やめとけ、今の君には刺激が強すぎる。

972 :デフォルトの名無しさん:02/12/11 20:11
鼻血出ますた

973 :デフォルトの名無しさん:02/12/11 22:16
入力されたタブを,次のタブストップまでのスペースをうめる適当な数の空白で置き換える
プログラムを書け。
タブストップの位置は,例えばn文字ごとというように固定して考えよ。

という問題なんですが,文章の意味をもう少し判りやすく説明してください。

974 :デフォルトの名無しさん:02/12/11 22:27
「タブストップ」の意味はわかっているのか?

975 :デフォルトの名無しさん:02/12/11 22:27
>>973
出題者にきけよ

976 :デフォルトの名無しさん:02/12/11 22:28
日本語を噛み砕けというのは C/C++ の話じゃないと思うが・・・。

例えば 「タブ幅=4」 と設定された時に、

"a[\t]bc[\t]def[\t]ghij[\t]klmno[\t]pqrstu という文字列を、
"a   bc  def ghij    klmno   pqrstu" に展開しろという事だろ。

977 : :02/12/11 22:34
>>974
ただの\tじゃないんですか?
[\t]がタブストップ?

978 :デフォルトの名無しさん:02/12/11 22:39
>>977
その通り。
[\t] は単に見やすく書いただけ

979 :デフォルトの名無しさん:02/12/11 22:57
>>976
そういうことですか
\tの時に,
if(c[cnt]=='\t'){
printf(" ");
printf(" ");
printf(" ");
printf(" ");
}

という風に,表示するのをスペースにするものだと思っていました
文字列自体を変換するってことですか

いろいろとありがとうでした

980 :デフォルトの名無しさん:02/12/11 23:04
>if(c[cnt]=='\t'){
>printf(" ");
>printf(" ");
>printf(" ");
>printf(" ");
>}
これだと条件が足りない。
ab[\t]cd
のとき、
abの後ろに、半角スペースが ’2個 ’ だから。

981 :デフォルトの名無しさん:02/12/12 14:34
新スレ逝くの?

982 :デフォルトの名無しさん:02/12/12 14:44
ねえ逝っちゃうよ?逝っていいの?ぬるぽ(((;゚∀゚)))ガクガクブルブル

983 :デフォルトの名無しさん:02/12/12 21:42
>>976
アニキ
そのプログラムできませんでした・・・
教えて・・・

984 :デフォルトの名無しさん:02/12/12 23:40
s1=strtok(" ",s);//hankaku'space'kugiri
space_of_long = 4-strlen(s1);
put(s1);
space_of_long bun space put...
?

985 :デフォルトの名無しさん:02/12/13 03:06
TpTab

986 :デフォルトの名無しさん:02/12/13 04:20
int main(void)
{
  const int tab_stop = 4;
  char buf[] = "a\tbc\tdef\tghij\tklmno\tpqrstu\t";
  char *p = buf;
  int col = 0;
  printf("\"%s\"\n", buf);
  putchar('\"');
  while(*p)
  {
    if(*p == '\t')
      do putchar(' '); while(col = (col + 1) % tab_stop);
    else
      putchar(*p), col++;
    p++;
  }
  putchar('\"');
  return 0;
}

strtok() だと最後のタブ文字が捕捉できないにょ

987 :デフォルトの名無しさん:02/12/13 14:54
英小文字を英大文字に出力が作りたくて
以下のように組んだんですが、大文字がうまく変換されません。
どこがまずいでしょうか?

#include<stdio.h>

void change(char *a)
{
while (*a != '\0'){
if (0x61 <= *a <= 0x7a)
*a -= 32;

a++;
}
}

main()
{
char a[100];

printf("input words\n");
scanf("%s", a);

printf("%s\n", a);

change(a);
printf("%s\n", a);

return 0;
}

988 :デフォルトの名無しさん:02/12/13 15:06
よくわからんが toupper() を使え。

989 :デフォルトの名無しさん:02/12/13 15:33
>>987
よくわかるが toupper() を使え

990 :デフォルトの名無しさん:02/12/13 15:45
#include <stdio.h>
#include <ctype.h>
int main(void)
{
  char buf[100], *p = buf;
  puts("input words");
  fgets(buf, sizeof(buf), stdin);
  fputs(buf, stdout);
  while(*p = toupper(*p)) p++;
  fputs(buf, stdout);
  return 0;
}

991 :デフォルトの名無しさん:02/12/13 15:59
レス、有難うございます。

書き忘れていたんですが
ASCIIコードを使って変換しろということでした、すみません。

前述したプログラムを実行すると
英大文字も小文字と同様 -32されているようなので

if (0x61 <= *a <= 0x7a)

これがまずいのかなと考えてるんですが・・?

992 :デフォルトの名無しさん:02/12/13 16:13
> ASCIIコードを使って変換しろ

その課題出した香具師、砲撃していいよ・・・

993 :デフォルトの名無しさん:02/12/13 16:16
if (0x61 <= *a <= 0x7a)

if (0x61 <= (unsigned char)*a <= 0x7a)


994 :デフォルトの名無しさん:02/12/13 16:17
>>991
> if (0x61 <= *a <= 0x7a)

そういう書き方はできないよ。
if (0x61 <= *a && *a <= 0x7a)

995 :デフォルトの名無しさん:02/12/13 16:18
a++している場所が悪 よく考えて

996 :bloom:02/12/13 16:19

http://www.agemasukudasai.com/bloom/

997 :デフォルトの名無しさん:02/12/13 16:20
>>991
激しく( ゚Д゚)マズーです
if (0x61 <= *a && *a <= 0x7a)
としなさい

<=は左結合演算子なので左から順に評価されます
0x61 <= *a <= 0x7a とすると
まず 0x61 <= *a が評価され
この時点で大文字も小文字も真になります
言い切れませんが真は大抵 1 なので
0x61 <= *a が 1 に置き換わり
その後に右の <= が評価されるので
1 <= 0x7a が評価されることになり
これも真となります。
結局 if (0x61 <= *a <= 0x7a) だと
大文字小文字どころか
0x61 <= *a が成り立てば
全部通ってしまいます


998 :デフォルトの名無しさん:02/12/13 16:20
if ('A' <= *a && *a <= 'Z')
    *a = (*a - 'A') + 'a';
よく読んでないけど、こうすべきだと思ったのは俺だけか


999 :デフォルトの名無しさん:02/12/13 16:20
次スレ立つまで書き込み禁止
漏れ立てられないからだれかヨロシク

>>993
おいおい

1000 :デフォルトの名無しさん:02/12/13 16:20


お前等C/C++なんて糞言語やってないでDelphiしろ! デルファイ!


1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

239 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)