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

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

(つД`)C/C++の宿題は私にやらせてよ!Ver12

1 :デフォルトの名無しさん:03/08/13 01:39
私はJavaからC++に寝返ったC++房。
今まで1*日間、ほとんど毎日休まず一生懸命C++を勉強してきた。
わからない宿題若しくは処理があったら私にやらせてくださいm(_ _)m

前スレ http://pc2.2ch.net/test/read.cgi/tech/1058283913/
↑のミラー http://members.tripod.co.jp/datochi2ch2/000/1058283913.html

10代目 : http://pc2.2ch.net/tech/kako/1057/10570/1057070174.html
9代目: http://pc2.2ch.net/tech/kako/1055/10559/1055944101.html
8代目: http://pc2.2ch.net/tech/kako/1055/10550/1055056940.html
7代目: http://pc2.2ch.net/tech/kako/1053/10539/1053963794.html
6代目: http://pc2.2ch.net/tech/kako/1053/10530/1053045530.html
5代目: http://pc2.2ch.net/tech/kako/1051/10515/1051594046.html
4代目: http://pc2.2ch.net/tech/kako/1045/10450/1045074808.html
3代目: http://pc2.2ch.net/tech/kako/1041/10419/1041992392.html
2代目: http://pc3.2ch.net/tech/kako/1039/10397/1039772622.html
宿題手伝いますYO!!: http://pc3.2ch.net/tech/kako/1038/10380/1038024989.html

ラウンジ:質問が長い時はココを使うと便利
http://do.sakura.ne.jp/%7Ejunkroom/cgi-bin/megabbs/lounge/index.html

2 :デフォルトの名無しさん:03/08/13 01:43
今、高らかに2ゲットォ!

3 :C++bow ◆xcuyI0AVpc :03/08/13 01:51
夏休みの宿題は俺様がまとめて片づけてやる。

4 :デフォルトの名無しさん:03/08/13 02:11
立てたのか

5 :高2:03/08/13 04:29
古典がわからないのですが・・・。


6 :デフォルトの名無しさん:03/08/13 04:33
>>5
とにかく覚えなさい。
あと、お父さんお母さんを大事にしなさい。

7 :デフォルトの名無しさん:03/08/13 05:27
(^Д^)ギャハ!↑みなさん、この人のレスどう思いますか♪
なんてありきたりなんでしょうね♪
誰もが皆、一瞬つけてみたくなる発想のレスです♪
しかし、賢明な人はその自らの短絡的思考を野放しにする事を嫌がり、
こういうレスは控えます♪
しかし、この人はしてしまったのです(^^;ワラ
「誰もが思い付くような事」を堂々と♪
この人にとってこのレスは何なのでしょうか♪
このレスをしている間にも時間は刻々と 過ぎ去っているのです♪
正にこの人のした事は「無意味」「無駄」でしかありません♪
ああ・・・何ていう事でしょう(^^;ワラ
図星で泣いちゃうかも(^^;ワラ

8 :デフォルトの名無しさん:03/08/13 13:42
(^^;ワラ♪

9 :デフォルトの名無しさん:03/08/13 16:02
使い古しのコピペネタを、一斉にトマトの対象にしたら楽しそうだよな

10 :デフォルトの名無しさん:03/08/13 17:50
Д←これとか∀←これとかな。

11 :デフォルトの名無しさん:03/08/13 18:08
∀ε∃δ:0<|x-x_0|<δ⇒|f(x)-f(x_0)|<ε

12 :デフォルトの名無しさん:03/08/13 19:58
>>11
懐かしいなヲィ(藁 現役学生か?

13 :デフォルトの名無しさん:03/08/13 22:19
「正の整数を入力し(その値が入力された時は再入力する事)、
その値が奇数であれば、1からその値までの奇数の和を、
偶数であれば、2からその値までの偶数の和を求めるプログラムを作成せよ。」
という問題を教えてください!!

14 :デフォルトの名無しさん:03/08/13 22:20
>>13
はい!



わかりません!!!

15 :デフォルトの名無しさん:03/08/13 22:22
>>13
正の整数が入力されたら再入力させるのか?

16 :13:03/08/13 22:26
すみません、「その値」ではなく、「負の値」でした・・・。

実行結果には

正の整数:-5
正の整数を入力してください。
正の整数:0
正の整数を入力してください。
正の整数:21
1から21までの奇数の和は121です。

、となってます。

17 :デフォルトの名無しさん:03/08/13 22:26
>>13
if文とfor文とwhileがわかってればできるだろ。

18 :デフォルトの名無しさん:03/08/13 22:32
>>13
テストしていないからだめかも。

#include <stdio.h>

int main()
{
int i,n,total=0;
do{
printf("正の整数:");
scanf("%d",&n);
}while(n<0);
for(i=n&1?1:2;i<=n;i+=2)
total+=i;
if(n&1)
printf("1から%dまでの奇数の和は%dです。\n",n,total);
else
printf("2から%dまでの偶数の和は%dです。\n",n,total);

return 0;
}


19 :デフォルトの名無しさん:03/08/13 22:33
winsockを使った簡単な通信プログラムを作っているのですが
クライアントとサーバの通信がうまく出来ません。

状況は
1.サーバはacceptまで完了している
2.クライアントはconnectまで完了している
3.クライアントはsend関数を実行して正常終了を示す値『送信したバイト数』を返している。
4.サーバはrecv関数を実行してもエラーを示す値『SOCK_ERROR』を返し続ける
です。どうか教えて下さい

20 :デフォルトの名無しさん:03/08/13 22:36
listen socketをrecvしているオチではなかろうな。
とりあえず、WSAGetLastErrorでもっと詳細なエラーを取れ。

21 :18:03/08/13 22:36
}while(n<0);は}while(n<0&&printf("正の整数を入力してください。\n"));だな。

22 :デフォルトの名無しさん:03/08/13 22:39
>>19
たぶんお前に足りないのはethereal
まずは騙されたと思ってインストールしてみろ

23 :デフォルトの名無しさん:03/08/13 23:06
>>20
とりあえずエラーコードは出て来たのですが、どのコードかわかりませんでした。
WSAEBADF,WSAENOTCONN,WSAENOTSOCK
とりあえずこの三つのコードではありませんでした。

「listen socketをrecvしている」とはどう云う事なんでしょうか?

24 :デフォルトの名無しさん:03/08/13 23:36
解決しました!
>>20様がおっしゃってた通り
accept(sockdisp,(LPSOCKADDR)&add,&add_len);
recv(sockdisp,mes,sizeof(mes),0);
とやってる事が原因でした

25 :デフォルトの名無しさん:03/08/13 23:49
(^_^;)(^_^;)(^_^;)

26 :デフォルトの名無しさん:03/08/14 02:14
このような問題なのですが、

整数を入力して、正か0か負かを判断し、結果を表示する処理を
5回繰り返すプログラムを作成してください。

while文と、for文と、do〜while文のどれを使えばよいのか
よく分かりません。
どれでもよい様な気もしますが、違いもイマイチよくわかりません。



27 :デフォルトの名無しさん:03/08/14 02:22
>5回繰り返す
なら、forを使うのが普通、かな。

28 :デフォルトの名無しさん:03/08/14 02:28
おやすみ

29 :26:03/08/14 02:41
forを使うとすると、

#include <stdio.h>
int main(void)
{
int n,i;

n=5;
for(i=1;i<=5;i=i+1){

みたいな形になるのでしょうか?
さっぱりわかりません・・・


30 :デフォルトの名無しさん:03/08/14 02:43
そのnに何の意味が

31 :デフォルトの名無しさん:03/08/14 02:48
#include <stdio.h>
int main()
{
int i=5,n;
while(i--){
printf("さっさと入力しろ:");
scanf("%d",&n);
printf("%dはおそらく%sだな\n",n,n>0?"正":n<0?"負":"0");
}
return 0;
}

32 :26:03/08/14 02:51
5回目まで繰り返すから、n=5って思ったのですが、
i<=5で定義しているからいらないんですかね?
それとも、そもそも
int n,i; のところからいらないのでしょうか?

すみません、C言語を言うものを始めてから
日が浅いので、何がなんだかです。




33 :デフォルトの名無しさん:03/08/14 02:54
>>30>>32
nって入力先だろ?

ちなみに一例>>31

34 :26:03/08/14 03:00
すみません、%s というのと、? というのが
まだ習ってなくて意味がよくわかりません。
どういう意味なのでしょうか?

35 :デフォルトの名無しさん:03/08/14 03:05
>>34
じゃあ習っていそうな範囲で。

#include <stdio.h>

int main()
{
int i,n;

for(i=0;i<5;i++){
printf("数字を入力:");
scanf("%d",&n);
if(n>0)
printf("入力された数は正\n");
else if(n<0)
printf("入力された数は負\n");
else
printf("入力された数は0\n");
}

return 0;
}

36 :26:03/08/14 03:12
>>35
 あ、なんか分かりました!
 そういう様なの、今日(もう昨日か)少し習いました。
 夜遅くにご親切にありがとうございました!!


37 :デフォルトの名無しさん:03/08/14 03:58
ポインターの勉強中なんですが
以下のソースがうまく動かなくて悩んでいます。
どなたか、添削して頂けないでしょうか?

#include <stdio.h>
int main(void)
{
 char *str,*cmp;
 nt cnt=0;
 printf("文字列入力 :");
 gets(str);
 printf("検索文字入力:");
 scanf("%c%*c",cmp);
 for(;*str!='\0';str++){
  if(*str==*cmp) cnt++;
 }
 printf("%cの出現回数 :%d回\n",*cmp,cnt);
 return 0;
}

症状としては、最初の文字列入力直後に終了してしまいます。
tekitouninyuuryo なら無問題なんですが
tekitouninyuuryok や tekitouninyuuryoku だとダメです。
文字数が多いとダメなんでしょうか・・・

38 :37:03/08/14 04:03
あっ、訂正です。
× nt=cnt;
○ int=cnt; です。
よろしくお願いします。m(_ _)m

39 :デフォルトの名無しさん:03/08/14 05:32
そのstrはどこを指しているの?
strの先に領域を確保しておかないとだめ。

ポインタと文字列の扱いについて勉強しなおせ。

40 :37:03/08/14 06:16
>39
レスありがとうございます。
アソコが悪い、ココが間違ってるとかぢゃなく
根本的に間違ってたんですね。
文字数が少ない場合はコンパイル&実行出来てたんで
部分的に間違ってるのかと思ってました・・・

顔洗って出直してきます。

41 :デフォルトの名無しさん:03/08/14 07:37
C言語の宿題なのですが、
「整数を入力し、その値の桁数を表示するプログラムを作成せよ、
 ただし、log関数等は用いないで、繰り返し処理を用いよ」
という問題です。

 どなたか教えてくださいませ。

42 :デフォルトの名無しさん:03/08/14 08:37
>>41
#include <stdio.h>
int main(void)
{
int i, n;
scanf("%d", &n);
for (i = 1; n /= 10; ++i);
printf("%d\n", i);
return 0;
}

43 :デフォルトの名無しさん:03/08/14 11:07
宿題なんですが、どうにもこうにも・・な状態です。
本当に困っております。どなたか組みあげてはくれませんでしょうか。
解答はここか、メールでお願いします。tikun@itpmail.itp.ne.jp

http://www.geocities.co.jp/PowderRoom-Rose/9814/final_project.htm
▲オリジナル問題(英語)
http://www.geocities.co.jp/PowderRoom-Rose/9814/hw.html
▲意訳問題(日本語)

どうぞよろしくです。

44 :デフォルトの名無しさん:03/08/14 11:19
>>41
#include <stdio.h>
#include <ctype.h>

int main( void )
{
    char b[ 256 ], *s, *t;

    fgets( b, sizeof( b ), stdin );
    for( s = b ; *s != '\0' && ! isdigit( *s ) ; s ++ )
        ;
    for( t = s ; isdigit( *t ) ; t ++ )
        ;
    printf( "%d\n", t - s );
    return 0;
}


45 :デフォルトの名無しさん:03/08/14 11:31
int number_of_digits(int value) {
if (value == 0) {
return 1;
} else {
int digits;
for (digits = 1; (value /= 10) != 0; ++digits)
;
return digits;
}
}


46 :デフォルトの名無しさん:03/08/14 11:33
>>43
なんか、面白そうだな。。。

とりあえず、問題をよく読んでみるか。
ところで、この問題文以外に与えられた条件や資料とかはないのか?


47 :デフォルトの名無しさん:03/08/14 14:41
>>43
・・・しかし、いい加減な訳だな(w

せめて、オリジナルの問題の回答が欲しいのか、
意訳問題(?)の回答が欲しいのか、明確にしれ。

48 :デフォルトの名無しさん:03/08/14 15:43
>>46
英語の問題がオリジナルなので、特に他には与えられた条件、資料はないです。

>>47
意訳の方がお手数かけずにできると思います。意訳の方でよろしくお願いします。


49 :デフォルトの名無しさん:03/08/14 16:03
ねぇねぇ、Cって何年生から授業にでるの?
うちは未だワープロの早撃ちしか習ってないばい

50 :デフォルトの名無しさん:03/08/14 16:50
下の問題なんですが

<処理内容>
ポインタを用い変数a・bの内容を合計し表示せよ。
但し、結果表示はprintf("a+b=%d\n",c); で行うものとし、
変数cへの代入は禁ずる(c=a+b c+=a c+=b等)。
 a・bの値は次の通りとする。 int a=30,b=40; 
<出力様式>
a+b=70

代入せずに合計を求めるってのが解かりません。
int a=30,b=40,c,*pa,*pb;
pa=&a,pb=&b,c=(*pa)+(*pb);
でも、代入してる事に変わりはないし・・・
代入せずに合計を求めるなんて事が出来るんでしょうか?

51 :デフォルトの名無しさん:03/08/14 17:02
#include <stdio.h>

#define c *pa+*pb

int main(){
 int a=30,b=20;
 int *pa=&a,*pb=&b;
 printf("a+b=%d\n",c);
 return 0;
}

52 :デフォルトの名無しさん:03/08/14 18:00
void add(int *x, int y)
{
    *x += y;
}
int main(void)
{
    int a = 30, b = 40;
    int c = 0;
    add(&c, a);
    add(&c, b);
    printf("a+b=%d\n", c);
    return 0;
}


53 :デフォルトの名無しさん:03/08/14 19:48
p = &c;
*p = a + b;

54 :デフォルトの名無しさん:03/08/14 19:54
pのポイント先がcである限り*pはcそのものだろう
だからこれへの代入は題意を満たさない

55 :デフォルトの名無しさん:03/08/14 19:57
出題の意図は直接代入せずにポインタを使って代入しろってことじゃないの?

56 :デフォルトの名無しさん:03/08/14 20:05
p=&c; *p=aでcと名前を付けられた領域にaの内容が入るが、別にcに代入するわけではない。

57 :デフォルトの名無しさん:03/08/14 20:10
*(&c) = a + b;

58 :デフォルトの名無しさん:03/08/14 20:13
>>56
>...,if it points to an object,
>the result is an lvalue designating the object.
つまり*の結果はポイント先のオブジェクト

59 :デフォルトの名無しさん:03/08/14 20:21
>>58
cに代入というのはc=a;こういうのを言う。
間接的に代入するというならポインタを介してもいいけど。

60 :デフォルトの名無しさん:03/08/14 20:40
>cに代入というのはc=a;こういうの(だけ)を言う
無理があるね。変数は配列や動的確保もある

61 :デフォルトの名無しさん:03/08/14 20:46
配列に代入してくれ。

62 :デフォルトの名無しさん:03/08/14 20:50
int a[20];
a[15]=3;/* *(a+15)=3 */

63 :デフォルトの名無しさん:03/08/14 21:04
54とかは50の問題にどう答えるんだ?

64 :63:03/08/14 21:09
こうか

#include <stdio.h>

int main()
{
int a,b,c,d;
int *pa=&a,*pb=&b;

/* 省略 */

d=*pa+*pb;
#define c d;
printf("a+b=%d\n",c);

return 0;
}


65 :デフォルトの名無しさん:03/08/14 21:09
#define c (a+b)

66 :64:03/08/14 21:09
うっかりセミコロンつけちまった
#define c d

67 :デフォルトの名無しさん:03/08/14 21:13
>>65
ポインタは?

68 :デフォルトの名無しさん:03/08/14 21:20
>>64
>>51と大差ない

この問題の表現自体に不備があるのだからどうしようもないな。
間接代入がいいなら>>57を少しかえて*(&c)=*(&a)+*(&b);でいい事になるし。
もちろんよくある問題だからここにいる奴らは出題者の意図を完全に
分かっているだろうが、解く側がわざわざ行間を読む親切をするわけがない

69 :50:03/08/14 22:23
>51-68
皆さんのレスを読んでいて、私が一番最初に書いた

int a,b,c,*pa,*pb;
pa=&a,pb=&b,c=*pa+*pb;

で、正解なんじゃないかという気がしてきました。
>68氏の言うとおり、問題文が言葉足らずな印象は否めませんが・・・

レスして下さった皆さん、ありがとうございました。m(_ _)m

70 :デフォルトの名無しさん:03/08/15 00:06
こんばんは。
(1)整数の一次元配列を1,5,3,9,4で初期化し、配列の数値を空白で
区切って表示するプログラムを作成せよ。
(2)整数の一次元配列を1,5,3,9,4で初期化し、配列の数値を逆順に空白で
区切って表示するプログラムを作成せよ。
という問題です。

(1)の方を

#include <stdio.h>
int main(void)
{
int k[5]={1,5,3,9,4};
int n;

for(n=0.n<5;n++){
printf("%d ",k[12]);
}
printf("\n");
return(0);
}

という風に考えました。
でも何がなんだかさっぱり分からなくて、
何がいいのか分かりません。
どなたか教えてください!


71 :デフォルトの名無しさん:03/08/15 00:09
>printf("%d ",k[12]);
k[12]の12はどう考えて出てきたんだ?
非常に興味深いから教えてくれ。解答はそれからだ

72 :デフォルトの名無しさん:03/08/15 00:13
>>71

  すみません、k[12]ではなく、k[5]です。
  あと字下げしてるつもりですが、書き込まれると、全然下がって
  ないです。 



73 :デフォルトの名無しさん:03/08/15 00:15
>>72
k[12]よりは劣るがk[5]でも興味深い。なぜ5と書こうと思ったのだ?

74 :デフォルトの名無しさん:03/08/15 00:19
  初期化する数値?が5つあるからK[5]かと思ったのですが、
  全く見当はずれなのでしょうか?
  何があっているのか、そうでないのかも全然分かりません・・・



75 :デフォルトの名無しさん:03/08/15 00:19
面白すぎるぞ。

76 :デフォルトの名無しさん:03/08/15 00:23
printf("%d ",k[5]);
じゃなくて、
printf("%d ",k[n]);
ですか?
何がおもしろいか分からないです・・・



77 :デフォルトの名無しさん:03/08/15 00:23
>>74
配列の添え字は「0」から始まるよ。

78 :デフォルトの名無しさん:03/08/15 00:25
>>74
なるほど全く分かっていない。ではまず配列からだな
配列というのは添え字でアクセスできる一連の変数のことだ。
そしてint k[5];というのは5個の変数の利用を宣言する。
そのそれぞれはk[0],k[1],k[2],k[3],k[4]である

79 :デフォルトの名無しさん:03/08/15 00:30
空白で区切らなくていいの?

80 :デフォルトの名無しさん:03/08/15 00:33
[]の中の0,1,2,3が添え字なのですね。
%dのあとに空白を作ったつもりなのですが、これも違いますか?


81 :デフォルトの名無しさん:03/08/15 00:37
>return(0);
returnは関数ではないから、()は無用

82 :デフォルトの名無しさん:03/08/15 00:38
スマソ。\t使うかと思ってた。

83 :デフォルトの名無しさん:03/08/15 00:43
とりあえずこれで(1)はできたわけだ

84 :デフォルトの名無しさん:03/08/15 00:53
k[5]の範囲がk[0],k[1],k[2],k[3],k[4]なのですね。
それは
#include <stdio.h>
int main(void)
{
int k[5]={1,5,3,9,4};
int n;

for(n=0.n<5;n++){
printf("%d ",k[n]);
}
printf("\n");
return(0);
}

の中のint k[5]={1,5,3,9,4};
でk[0]が1、k[1]が6に対応という考え方でいいのですか?





85 :デフォルトの名無しさん:03/08/15 00:53
>returnは関数ではないから、()は無用
そうだったんですか。目からうろこが落ちました。

return0;

86 :デフォルトの名無しさん:03/08/15 00:55
k[1]が6ではなくて、5です。

87 :デフォルトの名無しさん:03/08/15 00:56
>>84
6ってのはどっからひねり出してきたんだ?

88 :デフォルトの名無しさん:03/08/15 00:57
>>84
リストを指定して宣言時に初期化するのは後で
k[0]=1;k[1]=5;k[2]=3;k[3]=9;k[4]=4;
とするのとほぼ同じ事

89 :デフォルトの名無しさん:03/08/15 00:57
>>87 5の打ち間違いでした。

90 :デフォルトの名無しさん:03/08/15 00:58
モチツケ

91 :デフォルトの名無しさん:03/08/15 00:59
初期化の意味を取り違えてますね。
問題の行間をよく読んでください。

k[1]=0;
k[5]=0;
k[3]=0;
k[9]=0;
k[4]=0;

92 :デフォルトの名無しさん:03/08/15 01:02
>>85
return 0;

93 :デフォルトの名無しさん:03/08/15 01:08
>>91 すみません,初期化自体がもうよくわからないんです。
   なぜそのようになるのですか? 

94 :デフォルトの名無しさん:03/08/15 01:11
>>93
あぁ、予想通りこの言葉を使うことになっちゃったな・・・。それは仕様です。

95 :デフォルトの名無しさん:03/08/15 01:14
>>70
for(n=0.n<5;n++){
ではなくて,
for(n=0;n<5;n++){
だな.

> int k[5] = {1,5,3,9,4}; でk[0]が1、k[1]が6に対応という考え方でいいのですか?
6っていうのはどこから出てきた?

int k[] = {1,5,3,9,4};
というのは,
int k[5];
k[0]=1;
k[1]=5;
k[2]=3;
k[3]=9;
k[4]=4;
と同じこと.


96 :デフォルトの名無しさん:03/08/15 01:16
>>91こそ、初期化がなんたるかわかって無い

97 :デフォルトの名無しさん:03/08/15 01:16
仕様??そういう決まったやり方ということでしょうか?

98 :デフォルトの名無しさん:03/08/15 01:22
>>91 は釣りでしょ.

99 :デフォルトの名無しさん:03/08/15 01:22
k[0]=1;k[1]=5;k[2]=3;k[3]=9;k[4]=4;
というのは文のどこかに入れるのですか?


100 :デフォルトの名無しさん:03/08/15 01:22
>>95
代入と初期化は違う

ということを96は言いたいんだね。

101 :デフォルトの名無しさん:03/08/15 01:25
>>99
それは,int k[] = {1,5,3,9,4}; の別な表現だから,入れる必要はありませ
ん.

>>100
しかし,0 を代入することが初期化,というのもおかしいと思うが.

102 :デフォルトの名無しさん:03/08/15 01:25
for(n=0;n<5;n++)
printf("%d ",k[n]);
for(n=4;n>=0;n--)
printf("%d ",k[n]);
ってだけの単純な問題でなぜここまでのびる・・・

103 :デフォルトの名無しさん:03/08/15 01:26
>>101
> しかし,0 を代入することが初期化,というのもおかしいと思うが.
無論

104 :デフォルトの名無しさん:03/08/15 01:27
では、(1)は、

#include <stdio.h>
int main(void)
{
int k[5]={1,5,3,9,4};
int n;

for(n=0;n<5;n++){
printf("%d ",k[n]);
}
printf("\n");
return(0);
}

でいいのでしょうか?


105 :デフォルトの名無しさん:03/08/15 01:29
>>104
いいかどうかは,自分でコンパイルして確かめればよいのでは.

106 :デフォルトの名無しさん:03/08/15 01:29
ミラー http://members.tripod.co.jp/datochi2ch2/000/1058283913.htmlが消された(つД`)

107 :デフォルトの名無しさん:03/08/15 01:32
初期化とは
変数を宣言するときに変数内部の状態をある値にすることである

間違ってたらごめ〜んっね

108 :デフォルトの名無しさん:03/08/15 01:32
>>105 すみません、私のパソコンはコンパイルできる環境がないので,
    今自分では分からないのですよ。。。

109 :デフォルトの名無しさん:03/08/15 01:34
>>108
オンラインコンパイルサービスを使え。

110 :デフォルトの名無しさん:03/08/15 01:35
>>108
とりあえず,それで動作しますよ.

return 0; にしろっていう忠告はスルーですか?

こんな感じで書くとよりプロっぽいけど(w

1 #include <stdio.h>
2
3 int main(void)
4 {
5 int k[]={1,5,3,9,4};
6 int n;
7
8 for (n=0; n<sizeof(k)/sizeof(k[0]); n++){
9 printf("%d ", k[n]);
10 }
11 printf("\n");
12
13 return 0;
14 }


111 :デフォルトの名無しさん:03/08/15 01:47
>>110 ご親切にありがとうございます。
    私は単位をとるために数日間だけC言語の授業を
    受けているもので、あんまり詳しい事はわかりません。。。

    8行目のsizeofというのはまだ習ってないのでよく分かりません。
    あと、教授がとりあえず最後の方に return(0);
とつけなさい!!と言っていたので、それにしてたわけで、
    皆さまのご忠告を無視したわけでは決してありません。

112 :デフォルトの名無しさん:03/08/15 01:49
   ∧ ∧ 
  (# ゚Д゚)
 (_UUノ 

113 :デフォルトの名無しさん:03/08/15 01:56
>>110
構文エラー : ';' が、識別子 # の前に必要です。

114 :デフォルトの名無しさん:03/08/15 02:07
>>110
return 0; のメリットって何ですか?
 return( 0 ) の方が検索するとき便利なんですけど…

115 :デフォルトの名無しさん:03/08/15 02:10
>>113
行番号はとれよ.

#include <stdio.h>

int main(void)
{
int k[]={1,5,3,9,4};
int n;

for (n=0; n<sizeof(k)/sizeof(k[0]); n++) {
printf("%d ", k[n]);
}
printf("\n");

return 0;
}

ちなみに,for の所を↓に変えれば (2) の答.

for (n=(sizeof(k)/sizeof(k[0]))-1; n>=0; n--) {


116 :デフォルトの名無しさん:03/08/15 02:11
>>114
http://www.st.rim.or.jp/~phinloda/cqa/cqa6.html

117 :デフォルトの名無しさん:03/08/15 02:16
>>114
k[0]と書くのにk[(0)]と書くようなもの。ただの無駄

118 :デフォルトの名無しさん:03/08/15 02:20
if( 0 == Value ) と似てますね。どうも。
小文字だけの関数名なんか付けないから私には意味がありませんが。

119 :デフォルトの名無しさん:03/08/15 02:50
恥をしのんでお尋ねします。
某参考書の演習にある、「符号無し整数xを右にnビット回転した値を返す関数」
の作り方が全く分かりません。
近所の本屋にあるC関連の参考書を見たのですが、載っていませんでした。
ご存知の方、どうかご教授願います。


120 :+++:03/08/15 04:12
>>119
unsigned int ror( unsigned int x, int rn ){
int bitwidth = sizeof( int ) * 8;
unsigned int tmp = x;

rn %= bitwidth;
tmp <<= bitwidth - rn;
x >>= rn;

return tmp | x;
}
こういうのでいいんじゃなかろか。

121 :デフォルトの名無しさん:03/08/15 10:45
>>120
すばらしい!
処理系依存の部分に手を入れれば完璧。

122 :デフォルトの名無しさん:03/08/15 10:57
>>43
しかし、この
probability_of_arrival lane 1 (car): 0.8
て奴は「1秒間のうちに lane 1 に car が出現する確率」
って解釈でいいのかな?

サンプルの条件で実行すると、かならず超々渋滞になってしまう・・・

The simulation should keep track of the number of vehicles
that passed through the intersection and the average time that vehicles wait.

お前、ただ「平均値を出せ」言いたいだけちゃうんかと(w


123 :デフォルトの名無しさん:03/08/15 11:06
if(ror(1,-1)==(1<<1)) /*おめでとう*/; else /*残念でした*/;

124 :山崎 渉:03/08/15 15:17
    (⌒V⌒)
   │ ^ ^ │<これからも僕を応援して下さいね(^^)。
  ⊂|    |つ
   (_)(_)                      山崎パン

125 :119:03/08/15 17:37
ご回答ありがとうございます。
正直、私には、ぱっと見ただけでは仕組みが理解できませんが、
あとでじっくり理解していこうと思います。

本当にありがとうございました。


126 :デフォルトの名無しさん:03/08/15 20:07
age

127 :デフォルトの名無しさん:03/08/16 00:21
アドバイスお願いします。
構造体の中に配列を宣言して、その配列に初期値を設定したい場合、
1つ1つ値を代入(a->b[0]=7;みたいな)するしか方法はないのでしょうか?
配列の数が少なければ、それでも困らないのですが、
要素数が100個ぐらいある場合に、スマートに書く方法はないでしょうか?


128 :デフォルトの名無しさん:03/08/16 00:23
memcpy()

129 :デフォルトの名無しさん:03/08/16 00:28
struct has_array{int a[50];}proto_has_array={{1,2,3,4,5,6,7}};

struct has_array s={{3,4,6,7}},t=proto_has_array;
struct has_array *p=(struct has_array*)malloc(sizeof(struct has_array));
*p=proto_has_array;

好きなように

130 :127:03/08/16 01:11
>>129
ありがとうございます。
1行目の書き方で、やりたかったことはできそうなのですが、
↓は意味がちょっとわかりません。
> struct has_array s={{3,4,6,7}},t=proto_has_array;

ここでsとtは何を意味しているのでしょうか?


131 :デフォルトの名無しさん:03/08/16 01:22
struct has_array型の変数(の初期化)

132 :デフォルトの名無しさん:03/08/18 07:26
誰もカキコしていないぞ(゚Д゚)

133 :デフォルトの名無しさん:03/08/18 14:47
(゚д゚)

134 :あぼーん:あぼーん
あぼーん

135 :デフォルトの名無しさん:03/08/18 18:46
入力系の関数(scanfとかgetcharとかgetcとかgets)や
出力系の関数(printfとかsprintfとかputcとかputs)等の
使い分けの指針ってのは、あるんでしょうか?
やっぱり、「人それぞれだから一概には答えられない」って事に
なっちゃうんでしょうか?

136 :デフォルトの名無しさん:03/08/18 22:53
>>134
こいつまじヤバイのでは?削除依頼ケテーイ?


137 :デフォルトの名無しさん:03/08/18 23:02
1:フェルマー法
アルゴリズム(フェルマー法): 予め決められた整数L と判定対象の整数p に対して以下を実行.
p = 素数の候補;
以下をL 回繰り返す{
1 < a < p なるa をランダムに生成;
if ( a p-1 mod p ≠ 1 ) p は素数でない;
};
p は多分素数;

2:ラビン法
アルゴリズム(ラビン法): 予め決められた整数L と判定対象の整数p に対して以下を実行.
p = 素数の候補;
p = 1 + 2kw を満たすk とw を計算(ただし, w は奇数);
以下をL 回繰り返す{
1 < a < p なるa をランダムに生成;
y = aw mod p;
j = 0;
while ( ( j < k ) and ( y ≠ 1 ) and ( y ≠ p-1 ) ) {
y = y 2 mod p ;
j = j+1;
if ( ( j = k ) or (( j > 0 ) and ( y = 1 )) ) p は素数でない;
};
p は多分素数;



138 :デフォルトの名無しさん:03/08/18 23:02
上の残り
3:ソロベイ・ストラッセン法
アルゴリズム(ソロベイ・ストラッセン法): 予め決められた整数L と判定対象の整数p に対して以
下を実行.
p = 素数の候補;
以下をL 回繰り返す{
1 < a < p なるa をランダムに生成;
if ( p mod a p) | (a 1)/2 (p- 1 ) p は素数でない;
p は多分素数

引数nを与えた時に以上の3つの方法それぞれで素数かを判定する関数を作れだってさ。
んなん無理じゃ!!こんな宿題俺らのようなアホにできるわきゃない。
どこぞの神、手を差し伸べてくれ。(注・試行回数は定数で変えられるようにしてチョ)
あと、過去ログにありそうだけどあったらごめんチョ

139 :デフォルトの名無しさん:03/08/18 23:45
>>137-138
今、作っているんだけど、式の部分が曖昧だな。

1) a p-1 mod p は、 a^(p-1) mod p
2) p = 1 + 2kw は、 p = 1 + (2^k) w

などなど。
きちんとした式を調べてみるが、面倒なので、正しいものの再掲を望む。

140 :デフォルトの名無しさん:03/08/18 23:53
>>134
scanf   エラーチェックなどに問題があり、あまり使わない。
      fgets(,,stdin)+sscanfを使う。
getchar  終了時にドス窓が勝手に閉じてしまうのを防ぐために使う事も。
getc    ファイルから1文字だけと言うのは無いので使ったことが無い。
      fgets、fread、fscanf(読み込むものが決まっている)を使う。
gets   受け取る配列からはみ出す場合があるのであまり使わない。
     fgets(,,stdin)を使う。
printf  多用する。
sprintf  数値を文字列にしたい時などに使用。
putc   getcと同じ理由で使ったことが無い。
     fputs、fwrite、fprintfを使う。
puts   puts("")として改行に使う。

141 :デフォルトの名無しさん:03/08/19 00:05
>>137-138
もしかして、これか? ん?
http://www.geocities.co.jp/SiliconValley-PaloAlto/4639/page_PrimeNumber.htm

142 :デフォルトの名無しさん:03/08/19 00:58
2×3行列の形で部屋a〜fがある。(1列目が左からabc、2列目が左からdef)
そこに1〜6の番号のついた部屋を割り当てて部屋間距離×物流量の値が最も小さく
なるときがいくつかを求めるプログラムを示せ、ただし部屋間距離は直行距離とする。
という問題なんですが、どうすればよいかがわかりません。いちお作ってみたのです
が、ネットで調べたダブルソート(?)というのを使ってみたんですけどこの問題
では使ってもダメみたいなので行き詰まってしまいました。とりあえず下にソースを
貼ってみるので教えて頂きたいです。ちなみにC言語でヒントは部屋1〜6を割り当て
る順列を考えろ、とのことです。

143 :デフォルトの名無しさん:03/08/19 00:59
#include <stdio.h>
int main()
{
int a,i,j;
int data[15],min,sum;
for (i=0; i<15; i++){
printf("data nyuryoku");
scanf("%d",&data[i]);
}
min=data[0]*1+data[1]*2+data[2]*1+data[3]*2+data[4]*3+data[5]*1+data[6]*2+data[7]*1
+data[8]*2+data[9]*3+data[10]*2+data[11]*1+data[12]*1+data[13]*2+data[14]*1
for (i=0; i<14; i++){
for (j=0; j<15; j++){
if(data[j]>data[j+1]){
a=data[j];
data[j]=data[j+1];
data[j+1]=a;
sum=data[0]*1+data[1]*2+data[2]*1+data[3]*2+data[4]*3+data[5]*1+data[6]*2+data[7]*1
+data[8]*2+data[9]*3+data[10]*2+data[11]*1+data[12]*1+data[13]*2+data[14]*1
if(min>sum){
min=sum;
}
}
}
}
printf("min=%d\n",min);
}

144 :デフォルトの名無しさん:03/08/19 01:00
data[j+1]=a;
sum=data[0]*1+data[1]*2+data[2]*1+data[3]*2+data[4]*3+data[5]*1+data[6]*2+data[7]*1
+data[8]*2+data[9]*3+data[10]*2+data[11]*1+data[12]*1+data[13]*2+data[14]*1
if(min>sum){
min=sum;
}
}
}
}
printf("min=%d\n",min);
}


145 :デフォルトの名無しさん:03/08/19 01:00
puts   puts("")として改行に使う。

146 :デフォルトの名無しさん:03/08/19 01:06
>142
物流量の定義がないが。入力させるのか?
6!(720)通りをブルートフォースで潰せば終わる問題ではないのか?

147 :137:03/08/19 01:12
>>141
ここからじゃないけど、内容が同じだ!!て事は俺が見たサイトは
パクリ?
>>139
→参照してくだチャイ >>141


148 :デフォルトの名無しさん:03/08/19 01:14
>146
すみません、物流量は入力させます。
 1 2 3 4 5 6
1― 5 2 4 1 0
2  - 3 0 2 2
3   ― 0 0 0
4     - 5 2
5      ― 10
6        ―
です。見づらいかもしれませんが1-2間が5、5-6間が10
といった感じです。ブルートフォースとは…なんでしょうか?

149 :デフォルトの名無しさん:03/08/19 01:20
久しぶりに面白そうな話題・・・
6!を走査しない方法を探すのがキモかしらん?

150 :139:03/08/19 01:22
>>137
1) 2) はできたが、3) のヤコビ数の計算部分で躓き中。
風呂入ってくるから、しばしまたれよ。今晩中には作成する予定だが・・・

151 :137:03/08/19 01:27
>>150
         待ってるよん                 神でござる!!

     / / ∧_∧               ∧_∧ \ \ ∧ ∧ ∬
    / / /( ´∀`)    ▽  ̄ ̄∪    (・∀・ )\ \ \ ゚Д)旦
   ( ̄| ̄) (   つつ  /┴    ┴\  ⊂⊂  ) ( ̄| ̄)  つ \
   (  |  )/⌒~) ))    ̄|| ̄ ̄ ̄|| ̄   (( (~⌒\(  |  )   )    ̄|
   ̄.  |   ̄ ̄)(_ノノ    ||      ||    しし ( ̄ ̄  |   ̄ ̄)     |

152 :デフォルトの名無しさん:03/08/19 02:24
まあでも、上下は対称やし、左右も対称やから、
6!/4で180まで落ちるような。

153 :139:03/08/19 02:31
ヤコビ数は力技を使った。もっと速い計算手法があるのだが、忘れたのでそのまま。
---確率的素数判定
#include <stdio.h>
#include <stdlib.h>

/* ループ回数 L */
#define LOOP 10

/* 各手法による確率的素数判定 */
/* 返値 0: not prime, 1: prime */
int isPrimeFermat(int);
int isPrimeRabin(int);
int isPrimeSS(int);

int input() {
int val; char buf[100]={0};
printf("素数の候補pを入力 : ");
fgets(buf, 50, stdin);
sscanf(buf, "%d", &val);
return val;
}
int main() {
int p = 0, flag = 0; /* flag=1 なら素数 */
while(p <= 1) p = input();
srand(p);
if(p == 2)
flag = 1;
else
flag = isPrimeFermat(p) && isPrimeRabin(p) && isPrimeSS(p);
printf("p = %d is %s prime.\n", p, flag ? "" : "not");
}

154 :139:03/08/19 02:32
/* Fermat法に基づく素数判定 */
int isPrimeFermat(int p) {
int i, j;
for(i = 0; i < LOOP; i++) {
int a = rand() % (p -2) +2, b = 1;
for(j = 0; j < p-1; j++) b = (b * a) % p;
if((b % p) != 1) return 0;
}
return 1;
}
/* Rabin-Miller法に基づく素数判定 */
int isPrimeRabin(int p) {
int i, j, w, k;
if(p == 3) { w = 1; k = 1; }
else {
for(k = 1; (1 << k) < p -1; k++) {
if((p-1) % (1 << k) == 0) {
w = (p -1) /(1 << k); if(w % 2) break;
} } }
for(i = 0; i < LOOP; i++) {
int a = rand() % (p -2) +2, y = 1;
for(j = 0; j < w; j++) y = (y * a) % p;
j = 0;
while((j < k) && (y != 1) && (y != p-1)) {
y = (y * y) % p; j += 1;
}
if((j == k) || ((j > 0) && (y == 1))) return 0;
}
return 1;
}

155 :139:03/08/19 02:34
/* Solovey--Strassen法に基づく素数判定 */
int isPrimeSS(int p) {
int i, j;
for(i = 0; i < LOOP; i++) {
int a = rand() % (p -2) +2, y = 1, z = -1;
/* y = a^((p-1)/2) mod p の算出 */
for(j = 0; j < (p-1)/2; j++) y = (y * a) % p;
if(y > 1) y -= p;
/* z = (a/p) の算出(ヤコビ数の算出) */
for(j = 0; j <= p/2; j++)
if((j * j) % p == a) {z = 1; break;}
if(y != z) return 0;
}
return 1;
}
----- ここまで

インデント消えちゃったので、適当にほかんよろ。

156 :119:03/08/19 05:36
恥ずかしながら、再びお尋ねします。

「type型の二つの値を交換する関数形式マクロ
 swap(type, a, b) を定義せよ」

という問題なのですが、どうにも解けません。

typeで型を反映させる方法と、値を交換するとき仲介として用いる変数の
定義の仕方がわかりません。
はじめは簡単な問題だとたかをくくっていたのですが、どうにも解けません。

ご存知の方、よろしければご教授願います。

157 :デフォルトの名無しさん:03/08/19 06:18
>>156
C++だったら...typeにoperator =が定義されているものとして
#define swap(type,a,b){type *t=new type;t=a;a=b;b=t;delete t;}
というのが最も簡単そうな感じ。
operator =が定義されていなければ
#define swap(type,a,b){void *t=malloc(sizeof(type));memcpy(t,&a,sizeof(type)\
memcpy(&a,&b,sizeof(type));memcpy(&b,t,sizeof(type));free(t);}
って感じでどうよ?(結果は無保証)
swapを式の中で使うんだったらコンマ演算子とか使って工夫しなければならない
けど、一時変数の取り方が確かに難しいね。

158 :139:03/08/19 07:30
ヤコビの計算は、倍以上速くなるものを見つけられた。

しかし、aの(p-1)乗 mod p を計算するのが遅いことに気づく。
これだけで O(p) になってる。あほや。

平方乗法の計算組み込むので、しばしまたれよ。

159 :137:03/08/19 07:56
>>158
待ってマース!!


160 :デフォルトの名無しさん:03/08/19 08:13
#include <stdio.h>
void sort(int *pd);
int main(void)
{
char buf[5];
int i, j, k = 0,
dp[15]={1,1,1,1,1,1,1,2,2,2,2,2,2,3,3},/*Distance Pattern*/
pd[15],/*Physical Distribution*/
amount = 0;

for(i = 0; i < 5; i++)
for(j = i+1; j < 6; j++)
{
printf("%d - %d 間、物流量を入力\n", i + 1, j + 1);
do
{
printf(">");
fgets(buf,5,stdin);
}while(sscanf(buf,"%d",&pd[k]) != 1);
k++;
}

sort(pd);

for(i = 0; i < 15; i++)
amount += dp[i] * pd[i];

printf("最小「部屋間距離×物流量」は %d です。",amount);

return 0;
}

161 :デフォルトの名無しさん:03/08/19 08:13
void sort(int *pd)
{
int i, j, temp;

for(i = 0; i < 15; i++)
for(j = 0; 14 - j - i; j++)
if(pd[j] < pd[j+1])
{
temp = pd[j];
pd[j] = pd[j+1];
pd[j+1] = temp;
}
}
ソートはバブルソートを考えてるようなので、一応それで書いたけど
気に入らなかったら、sort()関数を別のソート方法に書き換えるなり
ライブラリ関数の qsort()を呼ぶなり好きなように書き換えてくだせぇ。
あと、バブルソートなら要素を全て並び替えずとも、部屋間距離 1 に当たる部分の
ソートは手抜きしてもいいかな。一応、これではきちんとソートしてるけど。

162 :デフォルトの名無しさん:03/08/19 08:23
書き忘れ・・・
>>160-161 は、>>142宛てです。

163 :139:03/08/19 08:49
ところで、>>137 さんの想定する入力範囲っていくつよ?

10万くらいまでなら、平方乗法を使おうが、ヤコビ高速化しようが、
計算時間は、力技の方が速いか同等かといった程度。
100万以上で、ようやく効果がわかるといった程度。

164 :139:03/08/19 08:57
-----確率的素数判定(Fermat) : 平方乗法版
int calcMul(int x, int y, int z) { /* 掛け算の筆算 */
int i, v = 0;
if(x < y) {i = x; x = y; y = i;}
if(y == 1) return x;
for(i = 31; i >= 0; i--) {
v = (v * 2) % z;
if((x >> i) % 2 == 1) v = (v + y) % z;
}
return v % z;
}
int calcSqMul(int x, int y, int z) { /* x^y mod z を平方乗法で求める */
int i, j, v = 1;
if(y < 100000) {
for(i = 0; i < y; i++) v = (v * x) % z;
return v;
}
for(i = 31; i >= 0; i--) {
v = calcMul(v, v, z);
if((y >> i) % 2 == 1) v = calcMul(v, x, z);
}
return v % z;
}
int isPrimeFermat(int p) { /* Fermat法に基づく素数判定 */
int i, j;
for(i = 0; i < LOOP; i++) {
int a = rand() % (p -2) +2, b = 1,c;
b = calcSqMul(a, p-1, p);
if((b % p) != 1) return 0;
}
return 1;
}

165 :139:03/08/19 08:59
/* Solovey--Strassen法に基づく素数判定 */
int isPrimeSS(int p) {
int i, j;
for(i = 0; i < LOOP; i++) {
int a = rand() % (p -2) +2, b, y = 1, z = 1, q = p;
/* y = a^((p-1)/2) mod p の算出 */
y = calcSqMul(a, (p-1)/2, p);
if(y > 1) y -= p;
/* z = (a/p) の算出(ヤコビ数の算出) */
while(a > 2) {
if(a % 2 == 0) {
a /= 2;
if(q % 8 != 1 && q % 8 != 7) z *= -1;
}
else {
if(a % 4 == 3 && q % 4 == 3) z *= -1;
b = a; a = q; q = b;
a %= q;
}
}
if(a == 0) z = 0;
else if(a == 2 && q % 8 != 1 && q % 8 != 7) z *= -1;
if(y != z) return 0;
}
return 1;
}
-----ここまで

これ以外の関数は、最初のものと同じで大丈夫(のはず)。
おでかけの時間となりましたので、何かあっても自分でがんばよろ。

166 :デフォルトの名無しさん:03/08/19 13:10
>>160-162
ありがとうございます!まだ勉強始めたばかりなので関数とか
よくわからないのですが作っていただいたの見て勉強します☆
あと、この課題もう一つあってそれは4×5行列で同様に考える
というものなんですがこれはパターンが多すぎて順列で考えて
は解けないそうです。何かいい方法はないでしょうか?

167 :デフォルトの名無しさん:03/08/19 14:54
(必ず正しい解を得られる)アルゴリズムをあきらめる事だね

168 :デフォルトの名無しさん:03/08/19 20:40
Cで万年カレンダーを作れ


作れませんナキ
だれか教えてください・・・お願いします

169 :デフォルトの名無しさん:03/08/19 20:49
文字列str1の中に、文字列str2と同じ文字列が含まれているか調べるにはどうすればいいでしょうか?


170 :137:03/08/19 20:57
>>165
今家に帰ってきたのでレス遅れてすまん。いろいろサンクスコ!!
何かあったらまた頼むわ


171 :デフォルトの名無しさん:03/08/19 21:38
>>169
strstr()

172 :デフォルトの名無しさん:03/08/19 22:28
うるう年と元旦が何曜日かわかったらつくれるよ。

173 :デフォルトの名無しさん:03/08/19 22:33
独自のこよみでよければ

174 :デフォルトの名無しさん:03/08/19 22:37
>>168
改暦を考えなければ簡単。

175 :デフォルトの名無しさん:03/08/19 22:54
月のはじめの曜日と月の日数を受け取って(今月なら金と31)
一月分のカレンダーを表示する関数をつくる。

年と月から曜日と日数を計算すれば、
どんな月のカレンダーでも表示できる。

曜日を求める公式があったはずだけど忘れたので
ある時点の曜日から計算する。
日数は配列で持って、うるう年かどうか調べる。

176 :デフォルトの名無しさん:03/08/19 22:57
zellerの公式

177 :デフォルトの名無しさん:03/08/19 22:59
×zellerの公式
○zeldaの公式

178 :デフォルトの名無しさん:03/08/19 23:03
ttp://apricot.ese.yamanashi.ac.jp/~morisawa/edu/1998/ade1/ex04-2.html
曜日を求める公式

y年m月d日とすると,

(y+y/4-y/100+y/400+2.6m+1.6+d)/7を計算する.

あまりが0なら日曜日,1なら月曜日,2なら火曜日(以下同様)である.

但し,1月と2月は,前の年の13月,14月として入力しなければならない.

179 :デフォルトの名無しさん:03/08/19 23:06
おかしいぞ

180 :デフォルトの名無しさん:03/08/19 23:49
こういう問題でした。お願いします!

*/万年カレンダーを表示する。/*
1.西暦の年を取り込む。(マイナスや0を入力した場合は再入力)
2.月を取り込む。(1から12以外の数字を入力した場合は再入力)
3.西暦1年1月1日を1とした時の前の月までの総日数を計算。
  1=365*年数+閏年の年数*1日+その他の1月1日から前の月までの総日数
  閏年の年数=(年−1)/4−(年−1)/100+(年−1)/400
* 西暦1年1月1日は月曜日。
* 閏年は4年に一回だが100年目は除く。(ただし、400年目は除かない。)
  つまり、(4で割った余りが0 かつ 100で割った余りが0でない 
または400で割った余りが0でない)で判定。
  400で割り切れる年は閏年である。400・800・1200・1600・2000など
4.月の先頭(1日)の曜日の確定。
  1/7の余りがスペースの数で、スペースの次から1が始まる。
* 月 火 水 木 金 土 日
  1 2 3 4 5 6 0
5.月の日数を決定。(28、29、30、31)。
6.コントロール+cで終了。
*/入出力仕様/*
西暦の年 1993
   月 11
−−−1993年11月−−−
SUN MON TUE WED THU FRI SAT
   1  2  3  4  5   6
 7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

181 :デフォルトの名無しさん:03/08/19 23:51
ああーカレンダーがズレてしまった・・・
スミマセン;;

182 :137:03/08/20 01:29
>>165
どうやら7万程度までしか判定できていないようなのだが、原因は
思い当たる?

183 :156:03/08/20 02:48
>>157

ご回答いただき、ありがとうございます。
正直、式をみてもチンプンカンプンですが、
そちらの方は自分で調べようと思います。

本当に、ありがとうございました。


184 :デフォルトの名無しさん:03/08/20 07:15
どなたか助けてください。この課題をお願いします!

問題1

ファイルを読み込み、先頭から128バイト削り、ファイル名に"-"を加えて
元のファイルと同じ場所に保存する。



185 :デフォルトの名無しさん:03/08/20 10:12
#include <stdio.h>
#include <stdlib.h>

int main(int argc,char **argv){
FILE *ifp,*ofp;
char outname[BUFSIZ],buf;

if(argc==1){
fprintf(stderr,"プログラムの使い方をうぬーんかぬーん\n");
return -1;
}
// 出力先ファイル名の設定
sprintf(outname,"_%s",argv[1]);

ifp=fopen(argv[1],"r");
ofp=fopen(outname,"w");
if(ifp==NULL){
fprintf(stderr,"%sが開けませんか?\n",argv[1]);
return -1;
}
if(ofp==NULL){
fprintf(stderr,"%sが開けませんか?\n",outname);
return -1;
}
fseek(ifp,128,SEEK_SET); // 128文字ずらした位置から始める
while ( (buf=fgetc(ifp)) != EOF){// ifpから1文字ずつ読み込んで、ofpに出力する
fputc(buf,ofp);
}
fclose(ifp);
fclose(ofp);
}

186 :デフォルトの名無しさん:03/08/20 11:47
>>185
アンダーバーじゃなくてハイフンだろ

187 :デフォルトの名無しさん:03/08/20 15:07
だれかPow関数を、2^4だったら、(2*2)*(2*2)→(4*4)みたいななんとか法という
累乗をするバージョンで作ってくんろ。

188 :デフォルトの名無しさん:03/08/20 15:09
ビットシフトでできるかな。

189 :デフォルトの名無しさん:03/08/20 15:12
4は110になるわけだから
右シフトしてビットが立ったら掛ければいい。
シフトするごとに掛ける数を2倍していく。

190 :デフォルトの名無しさん:03/08/20 15:13
>>189
2だけっていう想定じゃ・・・・うーん、でも2だけでもいいかな。
とにかくおねがいしやす。


191 :デフォルトの名無しさん:03/08/20 15:15
template <class Int>
Int Pow(Int x,Int r){
  Int t=1;
  do{
    if(r%2) t*=x;
    x*=x;
  }while(r/=2);
  return t;
}

192 :191:03/08/20 15:16
前に作った奴。作るって程でもないけど

193 :デフォルトの名無しさん:03/08/20 15:16
>>191
えっ、こんなコードでいけんの?マジ?


194 :デフォルトの名無しさん:03/08/20 15:17
4は2進数で100だよ。

195 :デフォルトの名無しさん:03/08/20 15:17
>>191
あのー、2だけのビット演算バージョンを作ってなんて・・・・
てへ


196 :デフォルトの名無しさん:03/08/20 15:20
Int Pow(Int x,Int r){
Int t=1;
for (; r > 0; r >>= 1, x *= x)
if (r&1) t *= x;
return t;
}

197 :デフォルトの名無しさん:03/08/20 15:24
>>196
まじありがとう、でも、そのA^nだったらAがいつも2って意味
だったんだよね。だから、Xの引数はいつも2って意味
ごめんね


198 :デフォルトの名無しさん:03/08/20 15:25
Int Pow(Int r){
Int t=1;Int x = 2;
for (; r > 0; r >>= 1, x *= x)
if (r&1) t *= x;
return t;
}

199 :デフォルトの名無しさん:03/08/20 15:27
Int Pow(Int r){
return 1 << (r-1);
}

200 :デフォルトの名無しさん:03/08/20 15:27
-1いらなかった。

201 :デフォルトの名無しさん:03/08/20 15:33
>>198
何度もすまぬかった。ありがとぅ


202 :デフォルトの名無しさん:03/08/20 15:42
また、見るのじゃぞ。

203 :デフォルトの名無しさん:03/08/20 15:43
あの多倍長演算のルーチンを組んでて、加算、減算、乗算、除算はできたんです
が、その4つの要素を使って、剰余演算の関数を作りたいと考えています。
で、今のアイデアはA%BをするのにA/B=C→(INT)C→A−Cとやるしかない
かなと考えております。でもあまりにも非効率的な感じがするわけです。
こんな場合どうすればよいでしょうか?

204 :デフォルトの名無しさん:03/08/20 15:48
ぐぐればいろいろ見つかると思う。

205 :デフォルトの名無しさん:03/08/20 15:49
割り算同様、上の桁から計算

206 :デフォルトの名無しさん:03/08/20 15:50
いや下の桁からだな

207 :デフォルトの名無しさん:03/08/20 15:53
>>205
そ、それが・・・・・、割り算をそうやってないんです。(理由になってない)
A/B をするために1/Bをニュートン法で求めて、A*(1/B)てな
感じなんです。やっぱりそちらの法がナチュラルですかね?
また、他の4つの関数をつかって、スマートにやるとしたら、やっぱり
自分の考えている方法しかないんでしょうか?
もう、そこまでいじる根気がなくなってきてしまって

208 :デフォルトの名無しさん:03/08/20 15:58
多倍長って浮動小数点のかい

209 :デフォルトの名無しさん:03/08/20 16:00
>>208
いやそうじゃないです。でも、除算の結果はどうしても浮動小数点に
なっちゃいますよね。

210 :デフォルトの名無しさん:03/08/20 16:07
基数をr(=INT_MAX+1?)として、
a=an,...,a2,a1,a0
b=bm,...,b2,b1,b0
について普通にa/bの計算をするだけだろう

211 :デフォルトの名無しさん:03/08/20 16:15
>>210
an/anって事ですか?繰り上がりとかくリ下がりがよく
分からないんですが、


212 :tenpai:03/08/20 17:04
ダイアログに貼り付けたピクチャボックスより大きい画像を表示するために、
ピクチャボックスにスクロールバーを付けたいのですがどうしたらいいのでしょうか。

213 :デフォルトの名無しさん:03/08/20 17:07
他のスレへ。

214 :139:03/08/20 21:49
>>182
こちらに犯せてもらた。多分これで大丈夫だと思うが・・・
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1027870433&res=138&fi=no

215 :デフォルトの名無しさん:03/08/20 22:19
>>214
もういいかげん怒っちゃったのかと思ってた・・・・・・
本当にありがとうね。モニターの先でおがんでおくよ。


216 :209:03/08/20 22:34
とりあえず剰余演算は当初の予定どおり、遅そうですが、
ごり押しで作ってみました。そこで、次にお聞きしたいことは
加算、減算、乗算、除算、剰余算の5つの多倍長のルーチン
はできました。で、この5つの要素を使って乱数の関数を作る
にはどうすればよろしいのでしょうか?また、乱数のアルゴリズム
自体よく分からないのでどなたか簡単に書いていただけると
助かります。

217 :デフォルトの名無しさん:03/08/20 22:41
>>216
M系列乱数, Mersenne Twister

218 :209:03/08/20 23:32
>>217
ぐぐった方がよろしいか?


219 :デフォルトの名無しさん:03/08/20 23:42
基本だからね。

220 :デフォルトの名無しさん:03/08/21 00:01
以下の用件を満たす九九の表を出力するプログラムを作成しなさい。
要件
 まず、for()文を使って2次元配列table{ }に九九の計算結果を代入する。
 次に、for()文を使って2次元配列table{ }に九九の計算結果を代入する。
#include <stdio.h>

void main(void)
{
inttable{9}{9},i,j;

//ここを埋める

}

実行結果はこうなる見たいなんです

1  2  3  4  5  6  7  8  9
2  4  6  8 10 12 14 16 18
3  6  9 12 15 18 21 24 27
4  8 12 16 20 24 28 32 36
5 10 15 20 25 30 35 40 45
6 12 18 24 30 36 42 48 54
7 14 21 28 35 42 49 56 63
8 16 24 32 40 48 56 64 72
9 18 27 36 45 54 63 72 81


221 :デフォルトの名無しさん:03/08/21 00:02
>>220
全角数字じゃないといけないの?

222 :デフォルトの名無しさん:03/08/21 00:05
inttable{9}{9},i,j;
見にくいしちょっとミスってしまったので訂正です。

int table{9}{9}、i、j;

223 :デフォルトの名無しさん:03/08/21 00:06
>>221
半角です。

224 :デフォルトの名無しさん:03/08/21 00:06
>>222
それじゃコンパイルできない。
それにその方がみにくい

225 :デフォルトの名無しさん:03/08/21 00:09
すみません、再度修正しました

int table{9}{9},i,j;


226 :デフォルトの名無しさん:03/08/21 00:10
>>220

for(i=1;i<=9;i++){
for(j=1;j<=9;j++){
printf("%3d",table[i][j]=i*j);
if(i==9)
putchar('\n');
}
}


227 :デフォルトの名無しさん:03/08/21 05:21
>>185
なるほど、こう書けばよいのですね。
勉強になります。

ありがとうございました!!


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

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.02.02 2014/06/23 Mango Mangüé ★
FOX ★ DSO(Dynamic Shared Object)