気ままにC言語
■ このスレッドは過去ログ倉庫に格納されています
0001ツマル
NGNGこれからこのスレに今までツマルがC言語で作った
プログラムのソースを載せるですの。
完璧なものじゃないけど、ツッコミは勘弁して欲しいですの。
適当に修正してくれるのは構いませんですの。
コンパイラは「Borland C++ Compiler 5.5」を使っていますですの。
http://www.borland.co.jp/cppbuilder/freecompiler/index.html
0390388
NGNGでもjの2乗が、じゃなくてもi!=jでいいような気がするけど。
0391デフォルトの名無しさん
NGNGよくない
0392デフォルトの名無しさん
NGNGもっと素直に書かないからわけわかんなくなるんだよ。
関数使えばすっきりするじゃん。
#include <stdio.h>
int isprime(int n){
int d;
if ( n%2==0 ) return 0;
for (d=3; d*d<=n; d+=2)
if ( n%d==0 ) return 0;
return 1;
}
int main(){
int i;
for (i=1;i<=10000;i++)
if ( isprime(i) )
printf("%d\t",i);
}
0393384
NGNGって入れるの忘れた。鬱だ
0394388
NGNGもう少しちゃんと考えてから書き込むようにしよう。
0395デフォルトの名無しさん
NGNGint main(void){
int i,j;
for(i=2; i<=10000; i++){
for(j=2; (i % j)!=0; j++);
if( i == j) printf("%d\n",i);
}
return 0;
}
0396デフォルトの名無しさん
NGNGだめ(笑)
ネタだろ
0397デフォルトの名無しさん
NGNG>自分自信でしか割り切れないって確かめないといけないのですか?
確かめなくてもいい
>1でしか割り切れなかったら、1と、自分自信って決まってるから
>いいのかなあ、と思った。
1で割り切れることも確かめなくていい
>>384がj*j>iになったら素数と判定してるのも
それ以上は確かめなくていいから
j==iで判定したら最大で10000回のループ
j*J>iで判定したら最大で100回のループ
>>385がi+=2にしたらといっているのも
偶数は確かめなくていいから
0398デフォルトの名無しさん
NGNGi%j!=0とi==jは両立しないので素数は表示されないよ
やるならi==j+1で判定しなくちゃ
それでも、2が素数にならないし>>397がいってるとおり
コストがかかりすぎるのでやっぱだめ
0400デフォルトの名無しさん
NGNGうだうだ吠えるなボケ。この関数使えば終わりなんだよカスが
int isprime(int n){
if ( n==2 ) return 1;
if ( n%2==0 ) return 0;
for (int i=3; i*i<=n; i+=2)
if ( n%i==0 ) return 0;
return 1;
}
0401デフォルトの名無しさん
NGNGif(n<2)return 0;
を追加しなさい。
0402デフォルトの名無しさん
NGNG>うだうだ吠えるなボケ。この
1を素数と判定してしまう
>関数使えば
プログラマーとして
>終わりなんだよカスが
0403デフォルトの名無しさん
NGNGワラター(´ー`)==3
0404デフォルトの名無しさん
NGNG何かに使えないでしょうか?
もちろん例外はありますが。35とか。
0405デフォルトの名無しさん
NGNG35 が例外??
36 の 1 つ前にあるでしょ
0406
NGNG0407デフォルトの名無しさん
NGNGエラトステネスの篩を勉強することを勧める
つうか、>>364の書いたエラトステネスの篩版の
ソースを見てみたい
0408デフォルトの名無しさん
NGNG#define INTSIZE sizeof(long int)
/* nが素数ならば、ビット目が1である */
long int bits[10000];
/* d の倍数目のビットを全て 0 にする */
for (int d=2; d < 10000*INTSIZE ; d++ ){
{
if ( ( bits[ d/INTSIZE ] & (1<<(d%INTSIZE)) ) == 0 ) continue; /* d が素数で無いならば、飛ばす */
for (int i=d; i*d < 10000*INTSIZE ; i+=d ){
bits[ i*d/INTSIZE ] |= 1 << (i*d%INTSIZE);
}
}
0409デフォルトの名無しさん
NGNGやってみた。
値は正しく求められるようだ。(100万以下の素数で確認)
チェックする対象を絞り込める分、絞り込まないやり方に比べて、
相当速くなる。
が、エラトステネスの篩を使ったやり方には及ばなかった……。
(当社比 ワラ)
#include <stdio.h>
#include <math.h>
#define MAXNUM 10000
int main(void)
{
unsigned long n, lim, i;
char prime[MAXNUM + 1] = { 0, 0, 1, 1 };
for (i = 6; i < MAXNUM; i += 6) { /* 6の倍数の前後を素数と仮定 */
prime[i - 1] = 1;
prime[i + 1] = 1;
}
for (n = 5; n <= MAXNUM; n++)
if (prime[n]) /* 本当に素数かどうかの検証 */
for (prime[n] = 0, i = 2, lim = (int)sqrt(n); n % i; i++)
if (i > lim) {
prime[n] = 1;
break;
}
for (n = 2; n <= MAXNUM; n++)
if (prime[n])
printf("%d ", n);
return 0;
}
0410デフォルトの名無しさん
NGNG判定可能!
#define INT_SIZE sizeof(long int)
#define COUNT 10000
...
/* nが素数ならば、ビット目が0であるようにする */
long int bits[COUNT];
int p, q, i, base;
/* 全てのビットを0に */
for ( i = 1 ; i < COUNT ; i++ ){
bits[i] = 0;
}
for ( base=2; base < COUNT*INT_SIZE ; base++ ){
{
p = base / INT_SIZE;
q = base % INT_SIZE;
/* 既に非素数のチェックがついているならば飛ばす */
if ( bits[ p ] & (1<<q) ) continue;
/* base より大きい、全てのbaseの倍数目のビットを全て 1(非素数) にする */
for ( i=base*2 ; i*base < COUNT*INTSIZE ; i+=base ){
p = i / INT_SIZE;
q = i % INT_SIZE;
bits[p] |= 1 << q;
}
}
/* 表示 */
for ( i=2; i < COUNT*INT_SIZE ; i++ ){
{
p = base / INT_SIZE;
q = base % INT_SIZE;
if ( bits[ p ] & (1<<q) == 0)
printf("%d is prime\n", i );
}
0411デフォルトの名無しさん
NGNGやりたい事は分かるけど、これじゃ整数型を超える範囲
あつかえないじゃん。ビット計算をもっと工夫しないと。
0412デフォルトの名無しさん
NGNGめちゃくちゃメモリの無駄遣い。
charが8ビットのマシンでそのソースを実行したら
bits[]を8分の1しか使ってないことになる。
0413デフォルトの名無しさん
NGNG>bits[]を8分の1しか使ってないことになる。
なして?
0414デフォルトの名無しさん
NGNG410のコードは、sozeof(long)が4のとき、bits[]の要素ひとつに付き、
4ビットしか使ってないから。
4ビット/32ビット→ 1/8
0415デフォルトの名無しさん
NGNG0416デフォルトの名無しさん
NGNG(゚Д゚)ハァ?
long int == long だろ?
0417デフォルトの名無しさん
NGNGほほう
0418デフォルトの名無しさん
NGNG考え方はそのままにして正しくコーディングするとどうなるわけ?
0419デフォルトの名無しさん
NGNGこんな感じ。(動作確認はしてないんで、バグってたらスマソ)
#define SET_FLAG(bits,n) bits[n/CHAR_BIT] |= 1 << (n%CHAR_BIT)
#define CHECK_FLAG(bits,n) (bits[n/CHAR_BIT] & (1 << (n%CHAR_BIT)))
int i, j;
char bits[10000];
memset(bits, 0, sizeof bits);
for( i = 2; i < sizeof bits * CHAR_BIT; i++ ) {
if( CHECK_FLAG(bits,i) ) continue;
for( j = i*2; j < sizeof bits * CHAR_BIT; j+=i ) {
SET_FLAG(bits,j);
}
}
SET_FLAG(bits,2);
/* 表示 */
for( i = 2; i < sizeof bits * CHAR_BIT; i++ ) {
if( CHECK_FLAG(bits,i) ) {
printf("%d\n", i );
}
}
0420デフォルトの名無しさん
NGNGこれ非素数の場合にフラグ立ててるから、
表示部の if は条件逆なのでは。
0421デフォルトの名無しさん
NGNGファイルの n ビット目を参照するようにすれば、
2GB のファイルで 8*1024*1024*1024*2 = 2^(3+10+10+10+2) = 2^35
までの整数について調べ、同時に素数を保存する事が出来ますか。
0422_
NGNG一人前なんでしょうか基準を教えて下さい。
0423デフォルトの名無しさん
NGNG0424デフォルトの名無しさん
NGNGクラッカーなら我慢強いだけでOK。技術はイラン
ハッカーにしても、ここの厨房に驚かれる程度でいいんじゃねーか?
0425デフォルトの名無しさん
NGNGその程度はハッカーとは夜番。
0426
NGNGあと、プログラミングって楽しい?
0427デフォルトの名無しさん
NGNG>>426
0428デフォルトの名無しさん
NGNGそういう疑問が浮かぶ人間には一生なれない何かです。>>ハッカー
この書き込みははっきりいって煽りですがわりと事実です。
0429
NGNGフリーウェアとかいっぱいあるし、自分ですることもないでしょ?
0430デフォルトの名無しさん
NGNG音楽やってる人に同じこと聞いてみな。
ほとんどの場合「好きだから」だよ。(仕事以外では(;´Д`))
それとも、君は自殺志願者かい?
0431
NGNGpcの学校なんか入らなきゃ良かった。
0432デフォルトの名無しさん
NGNGなんだ・・・
ネタじゃないのか・・・
PCのゲームやったことある?
または、すごいと思うソフトとかある?
そういうものを自分で作りたいと思えば、楽しくなるよ。
(決して仕事にしたいなんて思うなよ・・・)
ないなら、その学校入らなきゃよかったね。
0433
NGNGでも、そんな凄いゲームすぐ作れない。
小さな問題とかをちょっとずつしていかなくちゃいけない。
それが数学とか頭使うのばかりで全然わからない。
ゲーム作るのがとても先で、ついていくだけでもう駄目。
鬱だ・・・・・・・・・
ネットしてないで、勉強しようっと。
END
0434デフォルトの名無しさん
NGNGはは.....
すぐ作るって.....
君は飛行機作るときに、小さいものから作らないタイプだね.....
対戦型(AIなし、人対人)オセロでも作ってみ
感動するから。(作ったときは)
0435デフォルトの名無しさん
NGNG0436カウンセリングルーム for 駆けだしプログラマー
NGNGキャラクタベースの小さなソフトと派手なゲームとの
ギャップが実際以上に大きく見えてしまい、前途のあまりの
長さに愕然とする
テナ感ジカ?
0437デフォルトの名無しさん
01/08/26 19:27ID:pP2VgnkEImage画像(現在、UNIXのXウィンドウで表示している)をBMP画像(ウィンドウズの環境で表示)に変換するプログラムを作っているのですがうまくいきません。
Image画像はピクセル値2バイトのモノクロデータ(カラーテーブル有り)ですが、BMP画像に変換するとカラー色がついてしまいます。
原因は、カラーテーブルが使われていないようです。
(16bit以上はカラーテーブルが使われないようですが、使うことはできないのですか?)
やっぱり、BITMAPINFOHEADER構造体の指定が間違っているのでしょうか?
0438デフォルトの名無しさん
01/08/27 18:56ID:64LMS1no0439デフォルトの名無しさん
01/08/28 17:40ID:uEuk16aY#include <stdio.h>
main()
{
int score, i, j, n=0, data[100], work;
do{
printf("%d件目のデータを入力してください。(終了時は-99999)",n+1);
scanf("%d", &score);
if(score!=-99999){
data[n++]=score;
}
}while(score!=-99999);
for(i=0; i<n-1 ;i++){
for(j=i+1; j<n; j++){
if(data[i]<data[j]){
work=data[i];
data[i]=data[j];
data[j]=work;
}
}
}
}
0440デフォルトの名無しさん
01/08/28 17:45ID:SKp6r0.c宿題はここで訊いた方が回答早いと思うよ。
お兄ちゃんの宿題、私が答えるよ
http://piza2.2ch.net/test/read.cgi?bbs=tech&key=982853418
■ このスレッドは過去ログ倉庫に格納されています