(つД`)C/C++の宿題は私にやらせてよ!Ver12
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNG今まで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デフォルトの名無しさん
NGNG0003C++bow ◆xcuyI0AVpc
NGNG0004デフォルトの名無しさん
NGNG0005高2
NGNG0006デフォルトの名無しさん
NGNGとにかく覚えなさい。
あと、お父さんお母さんを大事にしなさい。
0007デフォルトの名無しさん
NGNGなんてありきたりなんでしょうね♪
誰もが皆、一瞬つけてみたくなる発想のレスです♪
しかし、賢明な人はその自らの短絡的思考を野放しにする事を嫌がり、
こういうレスは控えます♪
しかし、この人はしてしまったのです(^^;ワラ
「誰もが思い付くような事」を堂々と♪
この人にとってこのレスは何なのでしょうか♪
このレスをしている間にも時間は刻々と 過ぎ去っているのです♪
正にこの人のした事は「無意味」「無駄」でしかありません♪
ああ・・・何ていう事でしょう(^^;ワラ
図星で泣いちゃうかも(^^;ワラ
0008デフォルトの名無しさん
NGNG0009デフォルトの名無しさん
NGNG0010デフォルトの名無しさん
NGNG0011デフォルトの名無しさん
NGNG0012デフォルトの名無しさん
NGNG懐かしいなヲィ(藁 現役学生か?
0013デフォルトの名無しさん
NGNGその値が奇数であれば、1からその値までの奇数の和を、
偶数であれば、2からその値までの偶数の和を求めるプログラムを作成せよ。」
という問題を教えてください!!
0014デフォルトの名無しさん
NGNGはい!
わかりません!!!
0015デフォルトの名無しさん
NGNG正の整数が入力されたら再入力させるのか?
001613
NGNG実行結果には
正の整数:-5
正の整数を入力してください。
正の整数:0
正の整数を入力してください。
正の整数:21
1から21までの奇数の和は121です。
、となってます。
0017デフォルトの名無しさん
NGNGif文とfor文とwhileがわかってればできるだろ。
0018デフォルトの名無しさん
NGNGテストしていないからだめかも。
#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クライアントとサーバの通信がうまく出来ません。
状況は
1.サーバはacceptまで完了している
2.クライアントはconnectまで完了している
3.クライアントはsend関数を実行して正常終了を示す値『送信したバイト数』を返している。
4.サーバはrecv関数を実行してもエラーを示す値『SOCK_ERROR』を返し続ける
です。どうか教えて下さい
0020デフォルトの名無しさん
NGNGとりあえず、WSAGetLastErrorでもっと詳細なエラーを取れ。
002118
NGNG0022デフォルトの名無しさん
NGNGたぶんお前に足りないのはethereal
まずは騙されたと思ってインストールしてみろ
0023デフォルトの名無しさん
NGNGとりあえずエラーコードは出て来たのですが、どのコードかわかりませんでした。
WSAEBADF,WSAENOTCONN,WSAENOTSOCK
とりあえずこの三つのコードではありませんでした。
「listen socketをrecvしている」とはどう云う事なんでしょうか?
0024デフォルトの名無しさん
NGNG>>20様がおっしゃってた通り
accept(sockdisp,(LPSOCKADDR)&add,&add_len);
recv(sockdisp,mes,sizeof(mes),0);
とやってる事が原因でした
0025デフォルトの名無しさん
NGNG0026デフォルトの名無しさん
NGNG整数を入力して、正か0か負かを判断し、結果を表示する処理を
5回繰り返すプログラムを作成してください。
while文と、for文と、do〜while文のどれを使えばよいのか
よく分かりません。
どれでもよい様な気もしますが、違いもイマイチよくわかりません。
0027デフォルトの名無しさん
NGNGなら、forを使うのが普通、かな。
0028デフォルトの名無しさん
NGNG002926
NGNG#include <stdio.h>
int main(void)
{
int n,i;
n=5;
for(i=1;i<=5;i=i+1){
みたいな形になるのでしょうか?
さっぱりわかりません・・・
0030デフォルトの名無しさん
NGNG0031デフォルトの名無しさん
NGNGint main()
{
int i=5,n;
while(i--){
printf("さっさと入力しろ:");
scanf("%d",&n);
printf("%dはおそらく%sだな\n",n,n>0?"正":n<0?"負":"0");
}
return 0;
}
003226
NGNGi<=5で定義しているからいらないんですかね?
それとも、そもそも
int n,i; のところからいらないのでしょうか?
すみません、C言語を言うものを始めてから
日が浅いので、何がなんだかです。
0033デフォルトの名無しさん
NGNGnって入力先だろ?
ちなみに一例>>31
003426
NGNGまだ習ってなくて意味がよくわかりません。
どういう意味なのでしょうか?
0035デフォルトの名無しさん
NGNGじゃあ習っていそうな範囲で。
#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;
}
003626
NGNGあ、なんか分かりました!
そういう様なの、今日(もう昨日か)少し習いました。
夜遅くにご親切にありがとうございました!!
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 だとダメです。
文字数が多いとダメなんでしょうか・・・
003837
NGNG× nt=cnt;
○ int=cnt; です。
よろしくお願いします。m(_ _)m
0039デフォルトの名無しさん
NGNGstrの先に領域を確保しておかないとだめ。
ポインタと文字列の扱いについて勉強しなおせ。
004037
NGNGレスありがとうございます。
アソコが悪い、ココが間違ってるとかぢゃなく
根本的に間違ってたんですね。
文字数が少ない場合はコンパイル&実行出来てたんで
部分的に間違ってるのかと思ってました・・・
顔洗って出直してきます。
0041デフォルトの名無しさん
NGNG「整数を入力し、その値の桁数を表示するプログラムを作成せよ、
ただし、log関数等は用いないで、繰り返し処理を用いよ」
という問題です。
どなたか教えてくださいませ。
0042デフォルトの名無しさん
NGNG#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#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デフォルトの名無しさん
NGNGif (value == 0) {
return 1;
} else {
int digits;
for (digits = 1; (value /= 10) != 0; ++digits)
;
return digits;
}
}
0046デフォルトの名無しさん
NGNGなんか、面白そうだな。。。
とりあえず、問題をよく読んでみるか。
ところで、この問題文以外に与えられた条件や資料とかはないのか?
0047デフォルトの名無しさん
NGNG・・・しかし、いい加減な訳だな(w
せめて、オリジナルの問題の回答が欲しいのか、
意訳問題(?)の回答が欲しいのか、明確にしれ。
0048デフォルトの名無しさん
NGNG英語の問題がオリジナルなので、特に他には与えられた条件、資料はないです。
>>47
意訳の方がお手数かけずにできると思います。意訳の方でよろしくお願いします。
0049デフォルトの名無しさん
NGNGうちは未だワープロの早撃ちしか習ってないばい
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#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{
*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 = a + b;
0054デフォルトの名無しさん
NGNGだからこれへの代入は題意を満たさない
0055デフォルトの名無しさん
NGNG0056デフォルトの名無しさん
NGNG0057デフォルトの名無しさん
NGNG0058デフォルトの名無しさん
NGNG>...,if it points to an object,
>the result is an lvalue designating the object.
つまり*の結果はポイント先のオブジェクト
0059デフォルトの名無しさん
NGNGcに代入というのはc=a;こういうのを言う。
間接的に代入するというならポインタを介してもいいけど。
0060デフォルトの名無しさん
NGNG無理があるね。変数は配列や動的確保もある
0061デフォルトの名無しさん
NGNG0062デフォルトの名無しさん
NGNGa[15]=3;/* *(a+15)=3 */
0063デフォルトの名無しさん
NGNG006463
NGNG#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デフォルトの名無しさん
NGNG006664
NGNG#define c d
0067デフォルトの名無しさん
NGNGポインタは?
0068デフォルトの名無しさん
NGNG>>51と大差ない
この問題の表現自体に不備があるのだからどうしようもないな。
間接代入がいいなら>>57を少しかえて*(&c)=*(&a)+*(&b);でいい事になるし。
もちろんよくある問題だからここにいる奴らは出題者の意図を完全に
分かっているだろうが、解く側がわざわざ行間を読む親切をするわけがない
006950
NGNG皆さんのレスを読んでいて、私が一番最初に書いた
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デフォルトの名無しさん
NGNGk[12]の12はどう考えて出てきたんだ?
非常に興味深いから教えてくれ。解答はそれからだ
0072デフォルトの名無しさん
NGNGすみません、k[12]ではなく、k[5]です。
あと字下げしてるつもりですが、書き込まれると、全然下がって
ないです。
0073デフォルトの名無しさん
NGNGk[12]よりは劣るがk[5]でも興味深い。なぜ5と書こうと思ったのだ?
0074デフォルトの名無しさん
NGNG全く見当はずれなのでしょうか?
何があっているのか、そうでないのかも全然分かりません・・・
0075デフォルトの名無しさん
NGNG0076デフォルトの名無しさん
NGNGじゃなくて、
printf("%d ",k[n]);
ですか?
何がおもしろいか分からないです・・・
0077デフォルトの名無しさん
NGNG配列の添え字は「0」から始まるよ。
0078デフォルトの名無しさん
NGNGなるほど全く分かっていない。ではまず配列からだな
配列というのは添え字でアクセスできる一連の変数のことだ。
そしてint k[5];というのは5個の変数の利用を宣言する。
そのそれぞれはk[0],k[1],k[2],k[3],k[4]である
0079デフォルトの名無しさん
NGNG0080デフォルトの名無しさん
NGNG%dのあとに空白を作ったつもりなのですが、これも違いますか?
0081デフォルトの名無しさん
NGNGreturnは関数ではないから、()は無用
0082デフォルトの名無しさん
NGNG0083デフォルトの名無しさん
NGNG0084デフォルトの名無しさん
NGNGそれは
#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そうだったんですか。目からうろこが落ちました。
return0;
0086デフォルトの名無しさん
NGNG0087デフォルトの名無しさん
NGNG6ってのはどっからひねり出してきたんだ?
0088デフォルトの名無しさん
NGNGリストを指定して宣言時に初期化するのは後で
k[0]=1;k[1]=5;k[2]=3;k[3]=9;k[4]=4;
とするのとほぼ同じ事
0089デフォルトの名無しさん
NGNG0090デフォルトの名無しさん
NGNG0091デフォルトの名無しさん
NGNG問題の行間をよく読んでください。
k[1]=0;
k[5]=0;
k[3]=0;
k[9]=0;
k[4]=0;
0092デフォルトの名無しさん
NGNGreturn 0;
0093デフォルトの名無しさん
NGNGなぜそのようになるのですか?
0094デフォルトの名無しさん
NGNGあぁ、予想通りこの言葉を使うことになっちゃったな・・・。それは仕様です。
0095デフォルトの名無しさん
NGNGfor(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デフォルトの名無しさん
NGNG0097デフォルトの名無しさん
NGNG0098デフォルトの名無しさん
NGNG0099デフォルトの名無しさん
NGNGというのは文のどこかに入れるのですか?
0100デフォルトの名無しさん
NGNG代入と初期化は違う
ということを96は言いたいんだね。
0101デフォルトの名無しさん
NGNGそれは,int k[] = {1,5,3,9,4}; の別な表現だから,入れる必要はありませ
ん.
>>100
しかし,0 を代入することが初期化,というのもおかしいと思うが.
0102デフォルトの名無しさん
NGNGprintf("%d ",k[n]);
for(n=4;n>=0;n--)
printf("%d ",k[n]);
ってだけの単純な問題でなぜここまでのびる・・・
0103デフォルトの名無しさん
NGNG> しかし,0 を代入することが初期化,というのもおかしいと思うが.
無論
0104デフォルトの名無しさん
NGNG#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いいかどうかは,自分でコンパイルして確かめればよいのでは.
0106デフォルトの名無しさん
NGNG0107デフォルトの名無しさん
NGNG変数を宣言するときに変数内部の状態をある値にすることである
間違ってたらごめ〜んっね
0108デフォルトの名無しさん
NGNG今自分では分からないのですよ。。。
0109デフォルトの名無しさん
NGNGオンラインコンパイルサービスを使え。
0110デフォルトの名無しさん
NGNGとりあえず,それで動作しますよ.
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私は単位をとるために数日間だけC言語の授業を
受けているもので、あんまり詳しい事はわかりません。。。
8行目のsizeofというのはまだ習ってないのでよく分かりません。
あと、教授がとりあえず最後の方に return(0);
とつけなさい!!と言っていたので、それにしてたわけで、
皆さまのご忠告を無視したわけでは決してありません。
0112デフォルトの名無しさん
NGNG(# ゚Д゚)
(_UUノ
0113デフォルトの名無しさん
NGNG構文エラー : ';' が、識別子 # の前に必要です。
0114デフォルトの名無しさん
NGNGreturn 0; のメリットって何ですか?
return( 0 ) の方が検索するとき便利なんですけど…
0115デフォルトの名無しさん
NGNG行番号はとれよ.
#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デフォルトの名無しさん
NGNGhttp://www.st.rim.or.jp/~phinloda/cqa/cqa6.html
0117デフォルトの名無しさん
NGNGk[0]と書くのにk[(0)]と書くようなもの。ただの無駄
0118デフォルトの名無しさん
NGNG小文字だけの関数名なんか付けないから私には意味がありませんが。
0119デフォルトの名無しさん
NGNG某参考書の演習にある、「符号無し整数xを右にnビット回転した値を返す関数」
の作り方が全く分かりません。
近所の本屋にあるC関連の参考書を見たのですが、載っていませんでした。
ご存知の方、どうかご教授願います。
0120+++
NGNGunsigned 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すばらしい!
処理系依存の部分に手を入れれば完璧。
0122デフォルトの名無しさん
NGNGしかし、この
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デフォルトの名無しさん
NGNG0124山崎 渉
NGNG│ ^ ^ │<これからも僕を応援して下さいね(^^)。
⊂| |つ
(_)(_) 山崎パン
0125119
NGNG正直、私には、ぱっと見ただけでは仕組みが理解できませんが、
あとでじっくり理解していこうと思います。
本当にありがとうございました。
0126デフォルトの名無しさん
NGNG0127デフォルトの名無しさん
NGNG構造体の中に配列を宣言して、その配列に初期値を設定したい場合、
1つ1つ値を代入(a->b[0]=7;みたいな)するしか方法はないのでしょうか?
配列の数が少なければ、それでも困らないのですが、
要素数が100個ぐらいある場合に、スマートに書く方法はないでしょうか?
0128デフォルトの名無しさん
NGNG0129デフォルトの名無しさん
NGNGstruct 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;
好きなように
0130127
NGNGありがとうございます。
1行目の書き方で、やりたかったことはできそうなのですが、
↓は意味がちょっとわかりません。
> struct has_array s={{3,4,6,7}},t=proto_has_array;
ここでsとtは何を意味しているのでしょうか?
0131デフォルトの名無しさん
NGNG0132デフォルトの名無しさん
NGNG0133デフォルトの名無しさん
NGNG0134あぼーん
NGNG0135デフォルトの名無しさん
NGNG出力系の関数(printfとかsprintfとかputcとかputs)等の
使い分けの指針ってのは、あるんでしょうか?
やっぱり、「人それぞれだから一概には答えられない」って事に
なっちゃうんでしょうか?
0136デフォルトの名無しさん
NGNGこいつまじヤバイのでは?削除依頼ケテーイ?
0137デフォルトの名無しさん
NGNGアルゴリズム(フェルマー法): 予め決められた整数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デフォルトの名無しさん
NGNG3:ソロベイ・ストラッセン法
アルゴリズム(ソロベイ・ストラッセン法): 予め決められた整数L と判定対象の整数p に対して以
下を実行.
p = 素数の候補;
以下をL 回繰り返す{
1 < a < p なるa をランダムに生成;
if ( p mod a p) | (a 1)/2 (p- 1 ) p は素数でない;
p は多分素数
引数nを与えた時に以上の3つの方法それぞれで素数かを判定する関数を作れだってさ。
んなん無理じゃ!!こんな宿題俺らのようなアホにできるわきゃない。
どこぞの神、手を差し伸べてくれ。(注・試行回数は定数で変えられるようにしてチョ)
あと、過去ログにありそうだけどあったらごめんチョ
0139デフォルトの名無しさん
NGNG今、作っているんだけど、式の部分が曖昧だな。
1) a p-1 mod p は、 a^(p-1) mod p
2) p = 1 + 2kw は、 p = 1 + (2^k) w
などなど。
きちんとした式を調べてみるが、面倒なので、正しいものの再掲を望む。
0140デフォルトの名無しさん
NGNGscanf エラーチェックなどに問題があり、あまり使わない。
fgets(,,stdin)+sscanfを使う。
getchar 終了時にドス窓が勝手に閉じてしまうのを防ぐために使う事も。
getc ファイルから1文字だけと言うのは無いので使ったことが無い。
fgets、fread、fscanf(読み込むものが決まっている)を使う。
gets 受け取る配列からはみ出す場合があるのであまり使わない。
fgets(,,stdin)を使う。
printf 多用する。
sprintf 数値を文字列にしたい時などに使用。
putc getcと同じ理由で使ったことが無い。
fputs、fwrite、fprintfを使う。
puts puts("")として改行に使う。
0141デフォルトの名無しさん
NGNGもしかして、これか? ん?
http://www.geocities.co.jp/SiliconValley-PaloAlto/4639/page_PrimeNumber.htm
0142デフォルトの名無しさん
NGNGそこに1〜6の番号のついた部屋を割り当てて部屋間距離×物流量の値が最も小さく
なるときがいくつかを求めるプログラムを示せ、ただし部屋間距離は直行距離とする。
という問題なんですが、どうすればよいかがわかりません。いちお作ってみたのです
が、ネットで調べたダブルソート(?)というのを使ってみたんですけどこの問題
では使ってもダメみたいなので行き詰まってしまいました。とりあえず下にソースを
貼ってみるので教えて頂きたいです。ちなみにC言語でヒントは部屋1〜6を割り当て
る順列を考えろ、とのことです。
0143デフォルトの名無しさん
NGNGint 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デフォルトの名無しさん
NGNGsum=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デフォルトの名無しさん
NGNG0146デフォルトの名無しさん
NGNG物流量の定義がないが。入力させるのか?
6!(720)通りをブルートフォースで潰せば終わる問題ではないのか?
0148デフォルトの名無しさん
NGNGすみません、物流量は入力させます。
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デフォルトの名無しさん
NGNG6!を走査しない方法を探すのがキモかしらん?
0151137
NGNG待ってるよん 神でござる!!
/ / ∧_∧ ∧_∧ \ \ ∧ ∧ ∬
/ / /( ´∀`) ▽  ̄ ̄∪ (・∀・ )\ \ \ ゚Д)旦
( ̄| ̄) ( つつ /┴ ┴\ ⊂⊂ ) ( ̄| ̄) つ \
( | )/⌒~) ))  ̄|| ̄ ̄ ̄|| ̄ (( (~⌒\( | ) )  ̄|
 ̄. |  ̄ ̄)(_ノノ || || しし ( ̄ ̄ |  ̄ ̄) |
0152デフォルトの名無しさん
NGNG6!/4で180まで落ちるような。
0153139
NGNG---確率的素数判定
#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");
}
0154139
NGNGint 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;
}
0155139
NGNGint 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;
}
----- ここまで
インデント消えちゃったので、適当にほかんよろ。
0156119
NGNG「type型の二つの値を交換する関数形式マクロ
swap(type, a, b) を定義せよ」
という問題なのですが、どうにも解けません。
typeで型を反映させる方法と、値を交換するとき仲介として用いる変数の
定義の仕方がわかりません。
はじめは簡単な問題だとたかをくくっていたのですが、どうにも解けません。
ご存知の方、よろしければご教授願います。
0157デフォルトの名無しさん
NGNGC++だったら...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を式の中で使うんだったらコンマ演算子とか使って工夫しなければならない
けど、一時変数の取り方が確かに難しいね。
0158139
NGNGしかし、aの(p-1)乗 mod p を計算するのが遅いことに気づく。
これだけで O(p) になってる。あほや。
平方乗法の計算組み込むので、しばしまたれよ。
0159137
NGNG待ってマース!!
0160デフォルトの名無しさん
NGNGvoid 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{
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宛てです。
0163139
NGNG10万くらいまでなら、平方乗法を使おうが、ヤコビ高速化しようが、
計算時間は、力技の方が速いか同等かといった程度。
100万以上で、ようやく効果がわかるといった程度。
0164139
NGNGint 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;
}
0165139
NGNGint 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ありがとうございます!まだ勉強始めたばかりなので関数とか
よくわからないのですが作っていただいたの見て勉強します☆
あと、この課題もう一つあってそれは4×5行列で同様に考える
というものなんですがこれはパターンが多すぎて順列で考えて
は解けないそうです。何かいい方法はないでしょうか?
0167デフォルトの名無しさん
NGNG0168デフォルトの名無しさん
NGNG作れませんナキ
だれか教えてください・・・お願いします
0169デフォルトの名無しさん
NGNG0170137
NGNG今家に帰ってきたのでレス遅れてすまん。いろいろサンクスコ!!
何かあったらまた頼むわ
0171デフォルトの名無しさん
NGNGstrstr()
0172デフォルトの名無しさん
NGNG0173デフォルトの名無しさん
NGNG0174デフォルトの名無しさん
NGNG改暦を考えなければ簡単。
0175デフォルトの名無しさん
NGNG一月分のカレンダーを表示する関数をつくる。
年と月から曜日と日数を計算すれば、
どんな月のカレンダーでも表示できる。
曜日を求める公式があったはずだけど忘れたので
ある時点の曜日から計算する。
日数は配列で持って、うるう年かどうか調べる。
0176デフォルトの名無しさん
NGNG0177デフォルトの名無しさん
NGNG○zeldaの公式
0178デフォルトの名無しさん
NGNG曜日を求める公式
y年m月d日とすると,
(y+y/4-y/100+y/400+2.6m+1.6+d)/7を計算する.
あまりが0なら日曜日,1なら月曜日,2なら火曜日(以下同様)である.
但し,1月と2月は,前の年の13月,14月として入力しなければならない.
0179デフォルトの名無しさん
NGNG0180デフォルトの名無しさん
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スミマセン;;
0182137
NGNGどうやら7万程度までしか判定できていないようなのだが、原因は
思い当たる?
0184デフォルトの名無しさん
NGNG問題1
ファイルを読み込み、先頭から128バイト削り、ファイル名に"-"を加えて
元のファイルと同じ場所に保存する。
0185デフォルトの名無しさん
NGNG#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アンダーバーじゃなくてハイフンだろ
0187デフォルトの名無しさん
NGNG累乗をするバージョンで作ってくんろ。
0188デフォルトの名無しさん
NGNG0189デフォルトの名無しさん
NGNG右シフトしてビットが立ったら掛ければいい。
シフトするごとに掛ける数を2倍していく。
0190デフォルトの名無しさん
NGNG2だけっていう想定じゃ・・・・うーん、でも2だけでもいいかな。
とにかくおねがいしやす。
0191デフォルトの名無しさん
NGNGInt Pow(Int x,Int r){
Int t=1;
do{
if(r%2) t*=x;
x*=x;
}while(r/=2);
return t;
}
0192191
NGNG0193デフォルトの名無しさん
NGNGえっ、こんなコードでいけんの?マジ?
0194デフォルトの名無しさん
NGNG0195デフォルトの名無しさん
NGNGあのー、2だけのビット演算バージョンを作ってなんて・・・・
てへ
0196デフォルトの名無しさん
NGNGInt t=1;
for (; r > 0; r >>= 1, x *= x)
if (r&1) t *= x;
return t;
}
0197デフォルトの名無しさん
NGNGまじありがとう、でも、そのA^nだったらAがいつも2って意味
だったんだよね。だから、Xの引数はいつも2って意味
ごめんね
0198デフォルトの名無しさん
NGNGInt t=1;Int x = 2;
for (; r > 0; r >>= 1, x *= x)
if (r&1) t *= x;
return t;
}
0199デフォルトの名無しさん
NGNGreturn 1 << (r-1);
}
0200デフォルトの名無しさん
NGNG0201デフォルトの名無しさん
NGNG何度もすまぬかった。ありがとぅ
0202デフォルトの名無しさん
NGNG0203デフォルトの名無しさん
NGNGが、その4つの要素を使って、剰余演算の関数を作りたいと考えています。
で、今のアイデアはA%BをするのにA/B=C→(INT)C→A−Cとやるしかない
かなと考えております。でもあまりにも非効率的な感じがするわけです。
こんな場合どうすればよいでしょうか?
0204デフォルトの名無しさん
NGNG0205デフォルトの名無しさん
NGNG0206デフォルトの名無しさん
NGNG0207デフォルトの名無しさん
NGNGそ、それが・・・・・、割り算をそうやってないんです。(理由になってない)
A/B をするために1/Bをニュートン法で求めて、A*(1/B)てな
感じなんです。やっぱりそちらの法がナチュラルですかね?
また、他の4つの関数をつかって、スマートにやるとしたら、やっぱり
自分の考えている方法しかないんでしょうか?
もう、そこまでいじる根気がなくなってきてしまって
0208デフォルトの名無しさん
NGNG0209デフォルトの名無しさん
NGNGいやそうじゃないです。でも、除算の結果はどうしても浮動小数点に
なっちゃいますよね。
0210デフォルトの名無しさん
NGNGa=an,...,a2,a1,a0
b=bm,...,b2,b1,b0
について普通にa/bの計算をするだけだろう
0211デフォルトの名無しさん
NGNGan/anって事ですか?繰り上がりとかくリ下がりがよく
分からないんですが、
0212tenpai
NGNGピクチャボックスにスクロールバーを付けたいのですがどうしたらいいのでしょうか。
0213デフォルトの名無しさん
NGNG0214139
NGNGこちらに犯せてもらた。多分これで大丈夫だと思うが・・・
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1027870433&res=138&fi=no
0215デフォルトの名無しさん
NGNGもういいかげん怒っちゃったのかと思ってた・・・・・・
本当にありがとうね。モニターの先でおがんでおくよ。
0216209
NGNGごり押しで作ってみました。そこで、次にお聞きしたいことは
加算、減算、乗算、除算、剰余算の5つの多倍長のルーチン
はできました。で、この5つの要素を使って乱数の関数を作る
にはどうすればよろしいのでしょうか?また、乱数のアルゴリズム
自体よく分からないのでどなたか簡単に書いていただけると
助かります。
0217デフォルトの名無しさん
NGNGM系列乱数, Mersenne Twister
0218209
NGNGぐぐった方がよろしいか?
0219デフォルトの名無しさん
NGNG0220デフォルトの名無しさん
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全角数字じゃないといけないの?
0222デフォルトの名無しさん
NGNG見にくいしちょっとミスってしまったので訂正です。
↓
int table{9}{9}、i、j;
0223デフォルトの名無しさん
NGNG半角です。
0224デフォルトの名無しさん
NGNGそれじゃコンパイルできない。
それにその方がみにくい
0225デフォルトの名無しさん
NGNGint table{9}{9},i,j;
0226デフォルトの名無しさん
NGNGfor(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なるほど、こう書けばよいのですね。
勉強になります。
ありがとうございました!!
■ このスレッドは過去ログ倉庫に格納されています