トップページ⇒tech
227コメント73KB

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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
私は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
0002デフォルトの名無しさんNGNG
今、高らかに2ゲットォ!
0003C++bow ◆xcuyI0AVpc NGNG
夏休みの宿題は俺様がまとめて片づけてやる。
0004デフォルトの名無しさんNGNG
立てたのか
0005高2NGNG
古典がわからないのですが・・・。
0006デフォルトの名無しさんNGNG
>>5
とにかく覚えなさい。
あと、お父さんお母さんを大事にしなさい。
0007デフォルトの名無しさんNGNG
(^Д^)ギャハ!↑みなさん、この人のレスどう思いますか♪
なんてありきたりなんでしょうね♪
誰もが皆、一瞬つけてみたくなる発想のレスです♪
しかし、賢明な人はその自らの短絡的思考を野放しにする事を嫌がり、
こういうレスは控えます♪
しかし、この人はしてしまったのです(^^;ワラ
「誰もが思い付くような事」を堂々と♪
この人にとってこのレスは何なのでしょうか♪
このレスをしている間にも時間は刻々と 過ぎ去っているのです♪
正にこの人のした事は「無意味」「無駄」でしかありません♪
ああ・・・何ていう事でしょう(^^;ワラ
図星で泣いちゃうかも(^^;ワラ
0008デフォルトの名無しさんNGNG
(^^;ワラ♪
0009デフォルトの名無しさんNGNG
使い古しのコピペネタを、一斉にトマトの対象にしたら楽しそうだよな
0010デフォルトの名無しさんNGNG
Д←これとか∀←これとかな。
0011デフォルトの名無しさんNGNG
∀ε∃δ:0<|x-x_0|<δ⇒|f(x)-f(x_0)|<ε
0012デフォルトの名無しさんNGNG
>>11
懐かしいなヲィ(藁 現役学生か?
0013デフォルトの名無しさんNGNG
「正の整数を入力し(その値が入力された時は再入力する事)、
その値が奇数であれば、1からその値までの奇数の和を、
偶数であれば、2からその値までの偶数の和を求めるプログラムを作成せよ。」
という問題を教えてください!!
0014デフォルトの名無しさんNGNG
>>13
はい!



わかりません!!!
0015デフォルトの名無しさんNGNG
>>13
正の整数が入力されたら再入力させるのか?
001613NGNG
すみません、「その値」ではなく、「負の値」でした・・・。

実行結果には

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

、となってます。
0017デフォルトの名無しさんNGNG
>>13
if文とfor文とwhileがわかってればできるだろ。
0018デフォルトの名無しさんNGNG
>>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;
}
0019デフォルトの名無しさんNGNG
winsockを使った簡単な通信プログラムを作っているのですが
クライアントとサーバの通信がうまく出来ません。

状況は
1.サーバはacceptまで完了している
2.クライアントはconnectまで完了している
3.クライアントはsend関数を実行して正常終了を示す値『送信したバイト数』を返している。
4.サーバはrecv関数を実行してもエラーを示す値『SOCK_ERROR』を返し続ける
です。どうか教えて下さい
0020デフォルトの名無しさんNGNG
listen socketをrecvしているオチではなかろうな。
とりあえず、WSAGetLastErrorでもっと詳細なエラーを取れ。
002118NGNG
}while(n<0);は}while(n<0&&printf("正の整数を入力してください。\n"));だな。
0022デフォルトの名無しさんNGNG
>>19
たぶんお前に足りないのはethereal
まずは騙されたと思ってインストールしてみろ
0023デフォルトの名無しさんNGNG
>>20
とりあえずエラーコードは出て来たのですが、どのコードかわかりませんでした。
WSAEBADF,WSAENOTCONN,WSAENOTSOCK
とりあえずこの三つのコードではありませんでした。

「listen socketをrecvしている」とはどう云う事なんでしょうか?
0024デフォルトの名無しさんNGNG
解決しました!
>>20様がおっしゃってた通り
accept(sockdisp,(LPSOCKADDR)&add,&add_len);
recv(sockdisp,mes,sizeof(mes),0);
とやってる事が原因でした
0025デフォルトの名無しさんNGNG
(^_^;)(^_^;)(^_^;)
0026デフォルトの名無しさんNGNG
このような問題なのですが、

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

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

0027デフォルトの名無しさんNGNG
>5回繰り返す
なら、forを使うのが普通、かな。
0028デフォルトの名無しさんNGNG
おやすみ
002926NGNG
forを使うとすると、

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

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

みたいな形になるのでしょうか?
さっぱりわかりません・・・
0030デフォルトの名無しさんNGNG
そのnに何の意味が
0031デフォルトの名無しさんNGNG
#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;
}
003226NGNG
5回目まで繰り返すから、n=5って思ったのですが、
i<=5で定義しているからいらないんですかね?
それとも、そもそも
int n,i; のところからいらないのでしょうか?

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


0033デフォルトの名無しさんNGNG
>>30>>32
nって入力先だろ?

ちなみに一例>>31
003426NGNG
すみません、%s というのと、? というのが
まだ習ってなくて意味がよくわかりません。
どういう意味なのでしょうか?
0035デフォルトの名無しさんNGNG
>>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;
}
003626NGNG
>>35
 あ、なんか分かりました!
 そういう様なの、今日(もう昨日か)少し習いました。
 夜遅くにご親切にありがとうございました!!
0037デフォルトの名無しさんNGNG
ポインターの勉強中なんですが
以下のソースがうまく動かなくて悩んでいます。
どなたか、添削して頂けないでしょうか?

#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 だとダメです。
文字数が多いとダメなんでしょうか・・・
003837NGNG
あっ、訂正です。
× nt=cnt;
○ int=cnt; です。
よろしくお願いします。m(_ _)m
0039デフォルトの名無しさんNGNG
そのstrはどこを指しているの?
strの先に領域を確保しておかないとだめ。

ポインタと文字列の扱いについて勉強しなおせ。
004037NGNG
>39
レスありがとうございます。
アソコが悪い、ココが間違ってるとかぢゃなく
根本的に間違ってたんですね。
文字数が少ない場合はコンパイル&実行出来てたんで
部分的に間違ってるのかと思ってました・・・

顔洗って出直してきます。
0041デフォルトの名無しさんNGNG
C言語の宿題なのですが、
「整数を入力し、その値の桁数を表示するプログラムを作成せよ、
 ただし、log関数等は用いないで、繰り返し処理を用いよ」
という問題です。

 どなたか教えてくださいませ。
0042デフォルトの名無しさんNGNG
>>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;
}
0043デフォルトの名無しさんNGNG
宿題なんですが、どうにもこうにも・・な状態です。
本当に困っております。どなたか組みあげてはくれませんでしょうか。
解答はここか、メールでお願いします。[email protected]

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

どうぞよろしくです。
0044デフォルトの名無しさんNGNG
>>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;
}
0045デフォルトの名無しさんNGNG
int number_of_digits(int value) {
if (value == 0) {
return 1;
} else {
int digits;
for (digits = 1; (value /= 10) != 0; ++digits)
;
return digits;
}
}
0046デフォルトの名無しさんNGNG
>>43
なんか、面白そうだな。。。

とりあえず、問題をよく読んでみるか。
ところで、この問題文以外に与えられた条件や資料とかはないのか?
0047デフォルトの名無しさんNGNG
>>43
・・・しかし、いい加減な訳だな(w

せめて、オリジナルの問題の回答が欲しいのか、
意訳問題(?)の回答が欲しいのか、明確にしれ。
0048デフォルトの名無しさんNGNG
>>46
英語の問題がオリジナルなので、特に他には与えられた条件、資料はないです。

>>47
意訳の方がお手数かけずにできると思います。意訳の方でよろしくお願いします。
0049デフォルトの名無しさんNGNG
ねぇねぇ、Cって何年生から授業にでるの?
うちは未だワープロの早撃ちしか習ってないばい
0050デフォルトの名無しさんNGNG
下の問題なんですが

<処理内容>
ポインタを用い変数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);
でも、代入してる事に変わりはないし・・・
代入せずに合計を求めるなんて事が出来るんでしょうか?
0051デフォルトの名無しさんNGNG
#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;
}
0052デフォルトの名無しさんNGNG
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;
}
0053デフォルトの名無しさんNGNG
p = &c;
*p = a + b;
0054デフォルトの名無しさんNGNG
pのポイント先がcである限り*pはcそのものだろう
だからこれへの代入は題意を満たさない
0055デフォルトの名無しさんNGNG
出題の意図は直接代入せずにポインタを使って代入しろってことじゃないの?
0056デフォルトの名無しさんNGNG
p=&c; *p=aでcと名前を付けられた領域にaの内容が入るが、別にcに代入するわけではない。
0057デフォルトの名無しさんNGNG
*(&c) = a + b;
0058デフォルトの名無しさんNGNG
>>56
>...,if it points to an object,
>the result is an lvalue designating the object.
つまり*の結果はポイント先のオブジェクト
0059デフォルトの名無しさんNGNG
>>58
cに代入というのはc=a;こういうのを言う。
間接的に代入するというならポインタを介してもいいけど。
0060デフォルトの名無しさんNGNG
>cに代入というのはc=a;こういうの(だけ)を言う
無理があるね。変数は配列や動的確保もある
0061デフォルトの名無しさんNGNG
配列に代入してくれ。
0062デフォルトの名無しさんNGNG
int a[20];
a[15]=3;/* *(a+15)=3 */
0063デフォルトの名無しさんNGNG
54とかは50の問題にどう答えるんだ?
006463NGNG
こうか

#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;
}
0065デフォルトの名無しさんNGNG
#define c (a+b)
006664NGNG
うっかりセミコロンつけちまった
#define c d
0067デフォルトの名無しさんNGNG
>>65
ポインタは?
0068デフォルトの名無しさんNGNG
>>64
>>51と大差ない

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

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

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

レスして下さった皆さん、ありがとうございました。m(_ _)m
0070デフォルトの名無しさんNGNG
こんばんは。
(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);
}

という風に考えました。
でも何がなんだかさっぱり分からなくて、
何がいいのか分かりません。
どなたか教えてください!
0071デフォルトの名無しさんNGNG
>printf("%d ",k[12]);
k[12]の12はどう考えて出てきたんだ?
非常に興味深いから教えてくれ。解答はそれからだ
0072デフォルトの名無しさんNGNG
>>71

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

0073デフォルトの名無しさんNGNG
>>72
k[12]よりは劣るがk[5]でも興味深い。なぜ5と書こうと思ったのだ?
0074デフォルトの名無しさんNGNG
  初期化する数値?が5つあるからK[5]かと思ったのですが、
  全く見当はずれなのでしょうか?
  何があっているのか、そうでないのかも全然分かりません・・・

0075デフォルトの名無しさんNGNG
面白すぎるぞ。
0076デフォルトの名無しさんNGNG
printf("%d ",k[5]);
じゃなくて、
printf("%d ",k[n]);
ですか?
何がおもしろいか分からないです・・・

0077デフォルトの名無しさんNGNG
>>74
配列の添え字は「0」から始まるよ。
0078デフォルトの名無しさんNGNG
>>74
なるほど全く分かっていない。ではまず配列からだな
配列というのは添え字でアクセスできる一連の変数のことだ。
そしてint k[5];というのは5個の変数の利用を宣言する。
そのそれぞれはk[0],k[1],k[2],k[3],k[4]である
0079デフォルトの名無しさんNGNG
空白で区切らなくていいの?
0080デフォルトの名無しさんNGNG
[]の中の0,1,2,3が添え字なのですね。
%dのあとに空白を作ったつもりなのですが、これも違いますか?
0081デフォルトの名無しさんNGNG
>return(0);
returnは関数ではないから、()は無用
0082デフォルトの名無しさんNGNG
スマソ。\t使うかと思ってた。
0083デフォルトの名無しさんNGNG
とりあえずこれで(1)はできたわけだ
0084デフォルトの名無しさんNGNG
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に対応という考え方でいいのですか?



0085デフォルトの名無しさんNGNG
>returnは関数ではないから、()は無用
そうだったんですか。目からうろこが落ちました。

return0;
0086デフォルトの名無しさんNGNG
k[1]が6ではなくて、5です。
0087デフォルトの名無しさんNGNG
>>84
6ってのはどっからひねり出してきたんだ?
0088デフォルトの名無しさんNGNG
>>84
リストを指定して宣言時に初期化するのは後で
k[0]=1;k[1]=5;k[2]=3;k[3]=9;k[4]=4;
とするのとほぼ同じ事
0089デフォルトの名無しさんNGNG
>>87 5の打ち間違いでした。
0090デフォルトの名無しさんNGNG
モチツケ
0091デフォルトの名無しさんNGNG
初期化の意味を取り違えてますね。
問題の行間をよく読んでください。

k[1]=0;
k[5]=0;
k[3]=0;
k[9]=0;
k[4]=0;
0092デフォルトの名無しさんNGNG
>>85
return 0;
0093デフォルトの名無しさんNGNG
>>91 すみません,初期化自体がもうよくわからないんです。
   なぜそのようになるのですか? 
0094デフォルトの名無しさんNGNG
>>93
あぁ、予想通りこの言葉を使うことになっちゃったな・・・。それは仕様です。
0095デフォルトの名無しさんNGNG
>>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;
と同じこと.
0096デフォルトの名無しさんNGNG
>>91こそ、初期化がなんたるかわかって無い
0097デフォルトの名無しさんNGNG
仕様??そういう決まったやり方ということでしょうか?
0098デフォルトの名無しさんNGNG
>>91 は釣りでしょ.
0099デフォルトの名無しさんNGNG
k[0]=1;k[1]=5;k[2]=3;k[3]=9;k[4]=4;
というのは文のどこかに入れるのですか?
0100デフォルトの名無しさんNGNG
>>95
代入と初期化は違う

ということを96は言いたいんだね。
0101デフォルトの名無しさんNGNG
>>99
それは,int k[] = {1,5,3,9,4}; の別な表現だから,入れる必要はありませ
ん.

>>100
しかし,0 を代入することが初期化,というのもおかしいと思うが.
0102デフォルトの名無しさんNGNG
for(n=0;n<5;n++)
printf("%d ",k[n]);
for(n=4;n>=0;n--)
printf("%d ",k[n]);
ってだけの単純な問題でなぜここまでのびる・・・
0103デフォルトの名無しさんNGNG
>>101
> しかし,0 を代入することが初期化,というのもおかしいと思うが.
無論
0104デフォルトの名無しさんNGNG
では、(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);
}

でいいのでしょうか?
0105デフォルトの名無しさんNGNG
>>104
いいかどうかは,自分でコンパイルして確かめればよいのでは.
0106デフォルトの名無しさんNGNG
ミラー http://members.tripod.co.jp/datochi2ch2/000/1058283913.htmlが消された(つД`)
0107デフォルトの名無しさんNGNG
初期化とは
変数を宣言するときに変数内部の状態をある値にすることである

間違ってたらごめ〜んっね
0108デフォルトの名無しさんNGNG
>>105 すみません、私のパソコンはコンパイルできる環境がないので,
    今自分では分からないのですよ。。。
0109デフォルトの名無しさんNGNG
>>108
オンラインコンパイルサービスを使え。
0110デフォルトの名無しさんNGNG
>>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 }
0111デフォルトの名無しさんNGNG
>>110 ご親切にありがとうございます。
    私は単位をとるために数日間だけC言語の授業を
    受けているもので、あんまり詳しい事はわかりません。。。

    8行目のsizeofというのはまだ習ってないのでよく分かりません。
    あと、教授がとりあえず最後の方に return(0);
とつけなさい!!と言っていたので、それにしてたわけで、
    皆さまのご忠告を無視したわけでは決してありません。
0112デフォルトの名無しさんNGNG
   ∧ ∧ 
  (# ゚Д゚)
 (_UUノ 
0113デフォルトの名無しさんNGNG
>>110
構文エラー : ';' が、識別子 # の前に必要です。
0114デフォルトの名無しさんNGNG
>>110
return 0; のメリットって何ですか?
 return( 0 ) の方が検索するとき便利なんですけど…
0115デフォルトの名無しさんNGNG
>>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--) {
0116デフォルトの名無しさんNGNG
>>114
http://www.st.rim.or.jp/~phinloda/cqa/cqa6.html
0117デフォルトの名無しさんNGNG
>>114
k[0]と書くのにk[(0)]と書くようなもの。ただの無駄
0118デフォルトの名無しさんNGNG
if( 0 == Value ) と似てますね。どうも。
小文字だけの関数名なんか付けないから私には意味がありませんが。
0119デフォルトの名無しさんNGNG
恥をしのんでお尋ねします。
某参考書の演習にある、「符号無し整数xを右にnビット回転した値を返す関数」
の作り方が全く分かりません。
近所の本屋にあるC関連の参考書を見たのですが、載っていませんでした。
ご存知の方、どうかご教授願います。
0120+++NGNG
>>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;
}
こういうのでいいんじゃなかろか。
0121デフォルトの名無しさんNGNG
>>120
すばらしい!
処理系依存の部分に手を入れれば完璧。
0122デフォルトの名無しさんNGNG
>>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
0123デフォルトの名無しさんNGNG
if(ror(1,-1)==(1<<1)) /*おめでとう*/; else /*残念でした*/;
0124山崎 渉NGNG
    (⌒V⌒)
   │ ^ ^ │<これからも僕を応援して下さいね(^^)。
  ⊂|    |つ
   (_)(_)                      山崎パン
0125119NGNG
ご回答ありがとうございます。
正直、私には、ぱっと見ただけでは仕組みが理解できませんが、
あとでじっくり理解していこうと思います。

本当にありがとうございました。
0126デフォルトの名無しさんNGNG
age
0127デフォルトの名無しさんNGNG
アドバイスお願いします。
構造体の中に配列を宣言して、その配列に初期値を設定したい場合、
1つ1つ値を代入(a->b[0]=7;みたいな)するしか方法はないのでしょうか?
配列の数が少なければ、それでも困らないのですが、
要素数が100個ぐらいある場合に、スマートに書く方法はないでしょうか?
0128デフォルトの名無しさんNGNG
memcpy()
0129デフォルトの名無しさんNGNG
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;

好きなように
0130127NGNG
>>129
ありがとうございます。
1行目の書き方で、やりたかったことはできそうなのですが、
↓は意味がちょっとわかりません。
> struct has_array s={{3,4,6,7}},t=proto_has_array;

ここでsとtは何を意味しているのでしょうか?
0131デフォルトの名無しさんNGNG
struct has_array型の変数(の初期化)
0132デフォルトの名無しさんNGNG
誰もカキコしていないぞ(゚Д゚)
0133デフォルトの名無しさんNGNG
(゚д゚)
0134あぼーんNGNG
あぼーん
0135デフォルトの名無しさんNGNG
入力系の関数(scanfとかgetcharとかgetcとかgets)や
出力系の関数(printfとかsprintfとかputcとかputs)等の
使い分けの指針ってのは、あるんでしょうか?
やっぱり、「人それぞれだから一概には答えられない」って事に
なっちゃうんでしょうか?
0136デフォルトの名無しさんNGNG
>>134
こいつまじヤバイのでは?削除依頼ケテーイ?
0137デフォルトの名無しさんNGNG
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 は多分素数;

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

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

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

などなど。
きちんとした式を調べてみるが、面倒なので、正しいものの再掲を望む。
0140デフォルトの名無しさんNGNG
>>134
scanf   エラーチェックなどに問題があり、あまり使わない。
      fgets(,,stdin)+sscanfを使う。
getchar  終了時にドス窓が勝手に閉じてしまうのを防ぐために使う事も。
getc    ファイルから1文字だけと言うのは無いので使ったことが無い。
      fgets、fread、fscanf(読み込むものが決まっている)を使う。
gets   受け取る配列からはみ出す場合があるのであまり使わない。
     fgets(,,stdin)を使う。
printf  多用する。
sprintf  数値を文字列にしたい時などに使用。
putc   getcと同じ理由で使ったことが無い。
     fputs、fwrite、fprintfを使う。
puts   puts("")として改行に使う。
0141デフォルトの名無しさんNGNG
>>137-138
もしかして、これか? ん?
http://www.geocities.co.jp/SiliconValley-PaloAlto/4639/page_PrimeNumber.htm
0142デフォルトの名無しさんNGNG
2×3行列の形で部屋a〜fがある。(1列目が左からabc、2列目が左からdef)
そこに1〜6の番号のついた部屋を割り当てて部屋間距離×物流量の値が最も小さく
なるときがいくつかを求めるプログラムを示せ、ただし部屋間距離は直行距離とする。
という問題なんですが、どうすればよいかがわかりません。いちお作ってみたのです
が、ネットで調べたダブルソート(?)というのを使ってみたんですけどこの問題
では使ってもダメみたいなので行き詰まってしまいました。とりあえず下にソースを
貼ってみるので教えて頂きたいです。ちなみにC言語でヒントは部屋1〜6を割り当て
る順列を考えろ、とのことです。
0143デフォルトの名無しさんNGNG
#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);
}
0144デフォルトの名無しさんNGNG
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);
}
0145デフォルトの名無しさんNGNG
puts   puts("")として改行に使う。
0146デフォルトの名無しさんNGNG
>142
物流量の定義がないが。入力させるのか?
6!(720)通りをブルートフォースで潰せば終わる問題ではないのか?
0147137NGNG
>>141
ここからじゃないけど、内容が同じだ!!て事は俺が見たサイトは
パクリ?
>>139
→参照してくだチャイ >>141
0148デフォルトの名無しさんNGNG
>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
といった感じです。ブルートフォースとは…なんでしょうか?
0149デフォルトの名無しさんNGNG
久しぶりに面白そうな話題・・・
6!を走査しない方法を探すのがキモかしらん?
0150139NGNG
>>137
1) 2) はできたが、3) のヤコビ数の計算部分で躓き中。
風呂入ってくるから、しばしまたれよ。今晩中には作成する予定だが・・・
0151137NGNG
>>150
         待ってるよん                 神でござる!!

     / / ∧_∧               ∧_∧ \ \ ∧ ∧ ∬
    / / /( ´∀`)    ▽  ̄ ̄∪    (・∀・ )\ \ \ ゚Д)旦
   ( ̄| ̄) (   つつ  /┴    ┴\  ⊂⊂  ) ( ̄| ̄)  つ \
   (  |  )/⌒~) ))    ̄|| ̄ ̄ ̄|| ̄   (( (~⌒\(  |  )   )    ̄|
   ̄.  |   ̄ ̄)(_ノノ    ||      ||    しし ( ̄ ̄  |   ̄ ̄)     |
0152デフォルトの名無しさんNGNG
まあでも、上下は対称やし、左右も対称やから、
6!/4で180まで落ちるような。
0153139NGNG
ヤコビ数は力技を使った。もっと速い計算手法があるのだが、忘れたのでそのまま。
---確率的素数判定
#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");
}
0154139NGNG
/* 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;
}
0155139NGNG
/* 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;
}
----- ここまで

インデント消えちゃったので、適当にほかんよろ。
0156119NGNG
恥ずかしながら、再びお尋ねします。

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

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

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

ご存知の方、よろしければご教授願います。
0157デフォルトの名無しさんNGNG
>>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を式の中で使うんだったらコンマ演算子とか使って工夫しなければならない
けど、一時変数の取り方が確かに難しいね。
0158139NGNG
ヤコビの計算は、倍以上速くなるものを見つけられた。

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

平方乗法の計算組み込むので、しばしまたれよ。
0159137NGNG
>>158
待ってマース!!
0160デフォルトの名無しさんNGNG
#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;
}
0161デフォルトの名無しさんNGNG
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 に当たる部分の
ソートは手抜きしてもいいかな。一応、これではきちんとソートしてるけど。
0162デフォルトの名無しさんNGNG
書き忘れ・・・
>>160-161 は、>>142宛てです。
0163139NGNG
ところで、>>137 さんの想定する入力範囲っていくつよ?

10万くらいまでなら、平方乗法を使おうが、ヤコビ高速化しようが、
計算時間は、力技の方が速いか同等かといった程度。
100万以上で、ようやく効果がわかるといった程度。
0164139NGNG
-----確率的素数判定(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;
}
0165139NGNG
/* 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;
}
-----ここまで

これ以外の関数は、最初のものと同じで大丈夫(のはず)。
おでかけの時間となりましたので、何かあっても自分でがんばよろ。
0166デフォルトの名無しさんNGNG
>>160-162
ありがとうございます!まだ勉強始めたばかりなので関数とか
よくわからないのですが作っていただいたの見て勉強します☆
あと、この課題もう一つあってそれは4×5行列で同様に考える
というものなんですがこれはパターンが多すぎて順列で考えて
は解けないそうです。何かいい方法はないでしょうか?
0167デフォルトの名無しさんNGNG
(必ず正しい解を得られる)アルゴリズムをあきらめる事だね
0168デフォルトの名無しさんNGNG
Cで万年カレンダーを作れ


作れませんナキ
だれか教えてください・・・お願いします
0169デフォルトの名無しさんNGNG
文字列str1の中に、文字列str2と同じ文字列が含まれているか調べるにはどうすればいいでしょうか?
0170137NGNG
>>165
今家に帰ってきたのでレス遅れてすまん。いろいろサンクスコ!!
何かあったらまた頼むわ
0171デフォルトの名無しさんNGNG
>>169
strstr()
0172デフォルトの名無しさんNGNG
うるう年と元旦が何曜日かわかったらつくれるよ。
0173デフォルトの名無しさんNGNG
独自のこよみでよければ
0174デフォルトの名無しさんNGNG
>>168
改暦を考えなければ簡単。
0175デフォルトの名無しさんNGNG
月のはじめの曜日と月の日数を受け取って(今月なら金と31)
一月分のカレンダーを表示する関数をつくる。

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

曜日を求める公式があったはずだけど忘れたので
ある時点の曜日から計算する。
日数は配列で持って、うるう年かどうか調べる。
0176デフォルトの名無しさんNGNG
zellerの公式
0177デフォルトの名無しさんNGNG
×zellerの公式
○zeldaの公式
0178デフォルトの名無しさんNGNG
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月として入力しなければならない.
0179デフォルトの名無しさんNGNG
おかしいぞ
0180デフォルトの名無しさんNGNG
こういう問題でした。お願いします!

*/万年カレンダーを表示する。/*
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
0181デフォルトの名無しさんNGNG
ああーカレンダーがズレてしまった・・・
スミマセン;;
0182137NGNG
>>165
どうやら7万程度までしか判定できていないようなのだが、原因は
思い当たる?
0183156NGNG
>>157

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

本当に、ありがとうございました。
0184デフォルトの名無しさんNGNG
どなたか助けてください。この課題をお願いします!

問題1

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

0185デフォルトの名無しさんNGNG
#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);
}
0186デフォルトの名無しさんNGNG
>>185
アンダーバーじゃなくてハイフンだろ
0187デフォルトの名無しさんNGNG
だれかPow関数を、2^4だったら、(2*2)*(2*2)→(4*4)みたいななんとか法という
累乗をするバージョンで作ってくんろ。
0188デフォルトの名無しさんNGNG
ビットシフトでできるかな。
0189デフォルトの名無しさんNGNG
4は110になるわけだから
右シフトしてビットが立ったら掛ければいい。
シフトするごとに掛ける数を2倍していく。
0190デフォルトの名無しさんNGNG
>>189
2だけっていう想定じゃ・・・・うーん、でも2だけでもいいかな。
とにかくおねがいしやす。
0191デフォルトの名無しさんNGNG
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;
}
0192191NGNG
前に作った奴。作るって程でもないけど
0193デフォルトの名無しさんNGNG
>>191
えっ、こんなコードでいけんの?マジ?
0194デフォルトの名無しさんNGNG
4は2進数で100だよ。
0195デフォルトの名無しさんNGNG
>>191
あのー、2だけのビット演算バージョンを作ってなんて・・・・
てへ
0196デフォルトの名無しさんNGNG
Int Pow(Int x,Int r){
Int t=1;
for (; r > 0; r >>= 1, x *= x)
if (r&1) t *= x;
return t;
}
0197デフォルトの名無しさんNGNG
>>196
まじありがとう、でも、そのA^nだったらAがいつも2って意味
だったんだよね。だから、Xの引数はいつも2って意味
ごめんね
0198デフォルトの名無しさんNGNG
Int Pow(Int r){
Int t=1;Int x = 2;
for (; r > 0; r >>= 1, x *= x)
if (r&1) t *= x;
return t;
}
0199デフォルトの名無しさんNGNG
Int Pow(Int r){
return 1 << (r-1);
}
0200デフォルトの名無しさんNGNG
-1いらなかった。
0201デフォルトの名無しさんNGNG
>>198
何度もすまぬかった。ありがとぅ
0202デフォルトの名無しさんNGNG
また、見るのじゃぞ。
0203デフォルトの名無しさんNGNG
あの多倍長演算のルーチンを組んでて、加算、減算、乗算、除算はできたんです
が、その4つの要素を使って、剰余演算の関数を作りたいと考えています。
で、今のアイデアはA%BをするのにA/B=C→(INT)C→A−Cとやるしかない
かなと考えております。でもあまりにも非効率的な感じがするわけです。
こんな場合どうすればよいでしょうか?
0204デフォルトの名無しさんNGNG
ぐぐればいろいろ見つかると思う。
0205デフォルトの名無しさんNGNG
割り算同様、上の桁から計算
0206デフォルトの名無しさんNGNG
いや下の桁からだな
0207デフォルトの名無しさんNGNG
>>205
そ、それが・・・・・、割り算をそうやってないんです。(理由になってない)
A/B をするために1/Bをニュートン法で求めて、A*(1/B)てな
感じなんです。やっぱりそちらの法がナチュラルですかね?
また、他の4つの関数をつかって、スマートにやるとしたら、やっぱり
自分の考えている方法しかないんでしょうか?
もう、そこまでいじる根気がなくなってきてしまって
0208デフォルトの名無しさんNGNG
多倍長って浮動小数点のかい
0209デフォルトの名無しさんNGNG
>>208
いやそうじゃないです。でも、除算の結果はどうしても浮動小数点に
なっちゃいますよね。
0210デフォルトの名無しさんNGNG
基数をr(=INT_MAX+1?)として、
a=an,...,a2,a1,a0
b=bm,...,b2,b1,b0
について普通にa/bの計算をするだけだろう
0211デフォルトの名無しさんNGNG
>>210
an/anって事ですか?繰り上がりとかくリ下がりがよく
分からないんですが、
0212tenpaiNGNG
ダイアログに貼り付けたピクチャボックスより大きい画像を表示するために、
ピクチャボックスにスクロールバーを付けたいのですがどうしたらいいのでしょうか。
0213デフォルトの名無しさんNGNG
他のスレへ。
0214139NGNG
>>182
こちらに犯せてもらた。多分これで大丈夫だと思うが・・・
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1027870433&res=138&fi=no
0215デフォルトの名無しさんNGNG
>>214
もういいかげん怒っちゃったのかと思ってた・・・・・・
本当にありがとうね。モニターの先でおがんでおくよ。
0216209NGNG
とりあえず剰余演算は当初の予定どおり、遅そうですが、
ごり押しで作ってみました。そこで、次にお聞きしたいことは
加算、減算、乗算、除算、剰余算の5つの多倍長のルーチン
はできました。で、この5つの要素を使って乱数の関数を作る
にはどうすればよろしいのでしょうか?また、乱数のアルゴリズム
自体よく分からないのでどなたか簡単に書いていただけると
助かります。
0217デフォルトの名無しさんNGNG
>>216
M系列乱数, Mersenne Twister
0218209NGNG
>>217
ぐぐった方がよろしいか?
0219デフォルトの名無しさんNGNG
基本だからね。
0220デフォルトの名無しさんNGNG
以下の用件を満たす九九の表を出力するプログラムを作成しなさい。
要件
 まず、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
0221デフォルトの名無しさんNGNG
>>220
全角数字じゃないといけないの?
0222デフォルトの名無しさんNGNG
inttable{9}{9},i,j;
見にくいしちょっとミスってしまったので訂正です。
↓
int table{9}{9}、i、j;
0223デフォルトの名無しさんNGNG
>>221
半角です。
0224デフォルトの名無しさんNGNG
>>222
それじゃコンパイルできない。
それにその方がみにくい
0225デフォルトの名無しさんNGNG
すみません、再度修正しました

int table{9}{9},i,j;
0226デフォルトの名無しさんNGNG
>>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');
}
}
0227デフォルトの名無しさんNGNG
>>185
なるほど、こう書けばよいのですね。
勉強になります。

ありがとうございました!!
■ このスレッドは過去ログ倉庫に格納されています