C/C++の宿題は拙者が斬る! 29代目

このエントリーをはてなブックマークに追加
拙者はC/C++侍。
わからない問題は次々と切捨御免。

【注意点】 -------------------------------------------------
・問題はしっかりと解いてもらう方にわかりやすいように
 問題文などの省きはやめ、全文を書きましょう。

・使用する言語(C/C++)や環境(CUI/ANSIとか
 GUI/Windows32bitAPI など)は必ず書きましょう。

・計算問題は必ず数式自体をあげ、どのような計算をするのか
 くわしく説明してください。

・エラーは、その行とエラーの詳細を書きましょう。
 エラーメッセージが出た場合はそのままコピーしてください。

・後になって問題につけたしをするのはやめましょう。
 解いてもらっている方に失礼になってしまいます。
------------------------------------------------------------

【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
http://do.sakura.ne.jp/%7Ejunkroom/cgi-bin/megabbs/lounge/index.html

【歴代スレは>>2-10
28代目: http://pc5.2ch.net/test/read.cgi/tech/1089974839/
27代目: http://pc5.2ch.net/test/read.cgi/tech/1089448445/
26代目: http://pc5.2ch.net/test/read.cgi/tech/1088860889/
25代目: http://pc5.2ch.net/test/read.cgi/tech/1087929711/
24代目: http://pc5.2ch.net/test/read.cgi/tech/1086612317/
23代目: http://pc5.2ch.net/test/read.cgi/tech/1085149383/
22代目: http://pc5.2ch.net/test/read.cgi/tech/1083050221/
21代目: http://pc5.2ch.net/test/read.cgi/tech/1078157730/
20代目: http://pc5.2ch.net/test/read.cgi/tech/1075217631/
19代目: http://pc5.2ch.net/test/read.cgi/tech/1073566342/
18代目: http://pc5.2ch.net/test/read.cgi/tech/1071407728/
17代目: http://pc5.2ch.net/tech/kako/1070/10704/1070469896.html
16代目: http://pc5.2ch.net/tech/kako/1069/10698/1069837000.html
15代目: http://pc5.2ch.net/tech/kako/1068/10689/1068950713.html
14代目: http://pc5.2ch.net/tech/kako/1067/10671/1067175933.html
13代目: http://pc5.2ch.net/tech/kako/1064/10645/1064541405.html
12代目: http://pc5.2ch.net/tech/kako/1060/10607/1060706382.html
11代目: http://pc5.2ch.net/tech/kako/1058/10582/1058283913.html
10代目: http://pc5.2ch.net/tech/kako/1057/10570/1057070174.html
9代目: http://pc5.2ch.net/tech/kako/1055/10559/1055944101.html
8代目: http://pc5.2ch.net/tech/kako/1055/10550/1055056940.html
7代目: http://pc5.2ch.net/tech/kako/1053/10539/1053963794.html
6代目: http://pc5.2ch.net/tech/kako/1053/10530/1053045530.html
5代目: http://pc5.2ch.net/tech/kako/1051/10515/1051594046.html
4代目: http://pc5.2ch.net/tech/kako/1045/10450/1045074808.html
3代目: http://pc5.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
「C/C++の宿題は拙者が断る! 」に読めたOTLorz
AAが無いのが残念だけど 乙>>1
>>1
AA 無しか。もしかしてテンプレ増加により「改行が多すぎ」?
前スレ951
1様乙です。
テンプレの評判をみてからたてようかと思ってたんですが、
いつの間にか前スレが970までのびてて
拙者まにあわず…
それではごめんなすって…
32行までだな。
変にAAあるとアレなのでなくしますた。
えー
拙者C言語侍がC/C++の宿題を斬って斬って斬りまくります!
     \∧_ヘ      / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
     / \〇ノゝ∩   /  C/C++道
    /三√ ゚Д゚) / <
     /三/| ゚C゚|\   |    壱 宿題を斬って斬って斬りまくれ!
      U (::::::::::)    |    弐〜拾 歴代スレである!
      //三/|三|\   \  参 誰もが侍になれるぞ!
      ∪  ∪      \________________
11お願いします:04/07/26 02:46
「円周率(π)を求める公式の和としてライプニッツの公式より精度のよい公式を見つけ出し、
そのC++のぷろぐらむを作成せよ。また、ライプニッツの公式との比較も行え。」
という宿題が出ました。どなたかこの問題が解け、プログラムを作れる、C++に
詳しい方教えてください。お願いします。
>>11
それ最近見た。
13お願いします:04/07/26 03:01
>>11   本当ですか!?この問題の答えありますか?
return "およそ3";
公式の和?
>>15
懐かしいな、俺が去年解いた奴じゃん。
18お願いします:04/07/26 03:32
>>15   どこらへんにありますか?わざわざ探してくれてありがとうございます。

>>16    和の公式でしたw
19お願いします:04/07/26 03:36
どなたか>>11解けませんかね?
前前スレでかかれていたのを組み合わせました。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1064150088&res=184
2120:04/07/26 03:53
書き忘れ
20は>>11の問題に関連する物です。
            ,,ゞト、ノノィ,、
          /       `ゝ
         /  ノノ'`'`'`'`ヽミ
         .|  Y   \ / }i
         |  /    / ヽ ミ
         .!(6リ     (__) ノ
          リノト、 '/エェェェヺ
          り| ヽ  lーrー、/    夏なんで宿題出ませんから!! 残念!!
           ノノ  ヽニニソ            Θ / \
       ,...-'"::::|:|    /'::::::::::::::ヽ、    Θ//\//Θ
    ,...-'":::::::::::::::|.| v /':::::::::::::::::::::::::::_____//\//Θ
.   /::::::::::::::::::::::::::|.! /'::::::::::::::::::::::::::::::",.-、, \ //Θ
   /:::::;┐::::::::::::::::::|,レ':::::::::::::::::::::::::::::: :(_.人 ヽ._ ヽ
.  /:::::::∪::::::::::::::::::::::::::::::::::::::::::::::::::::::::::ハゝ. \   /
                      ,(  \  ノハ

>>前スレ998
Mをメルセンヌ素数(2^n -1 の形の素数 3 7 31など)とするとき、
偶数の完全数は {M(M+1)}/2 で表されるという定理があるんだよ。
また、現在のところ奇数の完全数は見つかっていない。

これらの事実を使ってるから、1000 以下の完全数を求めるのに
主ループを 3,7,15,…,511 の 8 回しか回さずに済むので速い。

# 素数判定部はむしろ一般的に言えば遅いのを使ってる
>Mをメルセンヌ素数(2^n -1 の形の素数 3 7 31など)とするとき、
>偶数の完全数は {M(M+1)}/2 で表されるという定理があるんだよ。

これって小さいのから順にもれなく出てくるんですか?
25お願いします:04/07/26 09:21
>>20>>21  ありがとうございます!!
>>24
偶数の完全数ならば全部出てくることが分かってる。
ttp://ja.wikipedia.org/wiki/%E5%AE%8C%E5%85%A8%E6%95%B0
27デフォルトの名無しさん:04/07/26 11:11
char *c[] = {"Monday" , "Tuesday"};
char **p = c;
とする時、'e'にたどりつくポインタpを用いた表記を
考えられるだけ、列挙せよ。

例)
*(*(p+1)+2))
*(*(p+2-1)+2))
*(*(p+10/10)+2))
*(*(p+1)+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+2))

こんなの?
30これで全部かな?:04/07/26 11:35
>>27
*(*(p+1)+2)
*(p+1))[2]
2[*(p+1)]
*(p[1]+2)
*(1[p]+2)
p[1][2]
1[p][2]
2[p[1]]
2[1[p]]
3130修正:04/07/26 11:36
*(*(p+1)+2)
(*(p+1))[2]
2[*(p+1)]
*(p[1]+2)
*(1[p]+2)
p[1][2]
1[p][2]
2[p[1]]
2[1[p]]
*((*(p++)++)++)
*(++(++(*(++p))))
*(*(p+=1)+=2)
>>32
それ大丈夫なんかな
おはようござます。
あるクラスに在籍している5人の出席番号と電話番号をポインタ配列を用いて画面に表示
するプログラムを作成せよ。
数値等は自由。
と言う問題が出たんですがちょっと分らないので模範解答を教えて下さい。
よろしくお願いします。
pの値や*pの値が変化してもいいのかな
37デフォルトの名無しさん:04/07/26 11:45
「与えられた数の階乗を計算するプログラムを静的変数を用いて作成せよ。」
と言う問題が出ました。
全く分らないので教えて下さいm( )m
>>35
出席番号と電話番号はファイルから読み込むの?
それともキー入力?
それともソース埋め込み?
3927:04/07/26 11:45
みなさん、ありがとうございます m( )m
多ければ多いほど、良いんで(点数的に)。
2,3個かと思ってたんですが、結構ありますね・・
助かりました!
>>38
キー入力です。
よろしくお願いします。
>>37
こんなんでいいのか?

#include <stdio.h>

static int f = 1;

int main(int)
{
int n=5; // ここにNを与える
int i;
for(i=1; i<=n; i++){
f *= i;
}
printf("%d\n", f);
return 0;
}
便乗質問ですが、100!ってどうやって求めるんですか?
数がでかすぎて、格納できる型が無いんですが・・・
>>42
なければ作ればいい
フリーの多倍長整数ライブラリがある
4542:04/07/26 13:08
なるほど。一工夫が要る訳ですね。
調べてみます。
使用言語はCです。
かなりの初心者なので複雑なことは出来ません。
配列がかろうじて出来る程度です。その程度の技術でお答えくださればコレ幸いです。
オネガイします。
1、キーボードから入力した10個の実数データを配列xに格納し、その中の最大値と最小値を求め出力するプログラム
2、キーボードから入力した10個の実数データを配列xに格納し、そのデータを小さい順に出力するプログラム
3、文字型配列を、”OKINAWA”と初期値として宣言し、文字列を反転させて”AWANIKO”と表示するプログラム
4、要素の数が40の文字列配列str1、str2、str3を、初期値なしで宣言する。その後、str1に”Let's”を、str2に”Study”を、str3に”programming”を代入し、これらの文字をつなげて出力するプログラムをstrcat関数を使わない場合と使った場合の2種類のプログラム

いきなり大量の問題ですが(-m-)おねがいします
"OKINAWA"大人気だな、前スレに何度か出てる、まだdat落ちしてない。
1.
#include <stdio.h>

int main()
{
  int i, nNum, nMin, nMax;
  for(i = 1; i <= 10; i++){
    for(;;){
      printf("[%02d] ", i);
      if(scanf("%d", &nNum)) break;
      scanf("%*s");
    }
    if(i == 0 || nNum < nMin) nMin = nNum;
    if(i == 0 || nNum > nMax) nMax = nNum;
  }
  printf("Max: %d\n", nMax);
  printf("Min: %d\n", nMin);
  return 0;
}
あ。いっけね、見間違えた。
1(改).
#include <stdio.h>

int main()
{
    int i, x[10], nMin, nMax;
    for(i = 0; i < 10; i++){
        for(;;){
            printf("[%02d] ", i+1);
            if(scanf("%d", x+i)) break;
            scanf("%*s");
        }
    }
    for(i = 0; i < 10; i++){
        if(i == 0 || x[i] < nMin) nMin = x[i];
        if(i == 0 || x[i] > nMax) nMax = x[i];
    }
    printf("Max: %d\n", nMax);
    printf("Min: %d\n", nMin);
    return 0;
}

とりあえず、入力と最大・最小の判定は別口でやっておいた。
#include <stdio.h>
#include <stdlib.h>

int compare(const int *pSrc1, const int *pSrc2){
    return *pSrc1 == *pSrc2 ? 0 : (*pSrc1 < *pSrc2 ? -1 : 1);
}

int main()
{
    int i, x[10], nMin, nMax;
    for(i = 0; i < 10; i++){
        for(;;){
            printf("[%02d] ", i+1);
            if(scanf("%d", x+i)) break;
            scanf("%*s");
        }
    }

    qsort(x, 10, sizeof(int), compare);
    printf("\n[Sorted]\n");
    for(i = 0; i < 10; i++)
        printf("%d\n", x[i]);
    return 0;
}
どこのバカ学校の生徒が聞きに来てるのか知りたいものだ
>>51 書き忘れ → 2.

3.
#include <stdio.h>
#include <string.h>

int main()
{
    int i;
    char *szSrc = "OKINAWA", szRes[8];
    for(i = 0; i < 7; i++)
        szRes[6-i] = szSrc[i];
    szRes[7] = '\0';
    printf("%s\n", szRes);
    return 0;
}
あぁ・・・表示だけで良かったのか。
ミス多いな、俺。使うのやめたのに#include <string.h>残してるし。

char *szSrc = "OKINAWA", szRes[8];
   :
printf("%s\n", szRes);

   ↓
char *szSrc = "OKINAWA";
for(i = strlen(szSrc)-1; i >= 0; i--)
    putchar(szSrc[i]);
4.
#include <stdio.h>
#include <string.h>

int main()
{
    char str1[40], str2[40], str3[40], str4[120];
    strcpy(str1, "Let's");
    strcpy(str2, "Study");
    strcpy(str3, "programming");

    // 使った場合
    *str4 = '\0';
    strcat(str4, str1);
    strcat(str4, str2);
    strcat(str4, str3);
    printf("%s\n", str4);

    //使わない場合
    printf("%s%s%s\n", str1, str2, str3);
    return 0;
}
宿題まだー?ちんちん
ω
>>48
「 printf("[%02d] ", i);
if(scanf("%d", &nNum)) break;
scanf("%*s");        」
のあたりがどうしてもわかりません・・。
#include <stdio.h>
int main(void)
{
double x[10], max,min;
int i,j;
for (i=0;i<10;i++){
scanf("%lf", &x[i]);
}
/*最大値*/
max = x[0];
for(i=1;i<=10;i++)
if (x[i] > max)
max = x[i];
/*最小値*/
min = x[0];
for(j=1;j<=10;j++)
if (x[j] <= min)
min = x[j];
printf("最大値は%.0lf\n", max);
printf("最小値は%.0lf\n", min);
return 0;
↑↑↑↑↑↑
のような感じで自力でやってみました。
どうしても最小値が「0」になってしまいます。
どうしてでしょうか?
オネガイします。
>>35
#include <stdio.h>
int main()
{
struct{
unsigned int num;
char tel[16];
}man[5]={
{5,"012-345-6789"},
{8,"012-345-9876"},
{17,"012-347-1142"},
{23,"012-315-2000"},
{36,"012-345-5688"},
},*p;
int i;

p=man;
for(i=0;i<5;i++){
printf("%d : 出席番号%d TEL:%s\n",i,p->num,p->tel);
p++;
}

return 0;
}
正常に入力されるまでループ回してます。

scanfに%dを指定したときに、数値以外が入力されると、
取得されない上にバッファ上に残って取り出されない。

そして、scanfの返り値として取得された数が返ってくる。
だから、0以外の場合は正常に入力されたということでループを抜ける。
0のときは、% *(代入しないことを示す) s(文字列として扱う)で、バッファをクリアしてるわけ。

fgetsとatoi使った方が良いと思うけど、「使ったことのある関数がいい」って言われないように、
scanfを使ってみた。



用語に自信が無いなぁ・・・。
>>61
日記は他所で。

宿題なら
> ・問題はしっかりと解いてもらう方にわかりやすいように
>  問題文などの省きはやめ、全文を書きましょう。
>>62
>>58へのレスなんだが・・・・
64デフォルトの名無しさん:04/07/26 15:09
C++で、ある構造体に別の構造体を配列として動的に確保したいと思っています。
typedef struct tagSENDDESCRIPTOR{
UINTnRetry;
LPVOIDpPacket;
SOCKADDR_INaddrRemote;
}SENDDESCRIPTOR, *LPSENDDESCRIPTOR;
typedef struct tagSENDDATA{
DWORDdwSeq;
UINTnRetry;
DWORDdwTick;
LPSENDDESCRIPTOR pData;
}SENDDATA, *LPSENDDATA;
と言う構造体があり、メンバ変数に
SENDDATA m_SendData;
m_SendData.pData = (LPSENDDESCRIPTOR)malloc(sizeof(SENDDESCRIPTOR)*50);
ZeroMemory(&m_pSendData.pData[1], sizeof(SENDDESCRIPTOR));
ZeroMemory(&m_pSendData.pData[2], sizeof(SENDDESCRIPTOR));
ZeroMemory(&m_pSendData.pData[3], sizeof(SENDDESCRIPTOR));
ZeroMemory(&m_pSendData.pData[4], sizeof(SENDDESCRIPTOR));
                ・
                ・
                ・
というように利用してもいいのでしょうか?
ここまで動かしてみましたが、エラーは出ませんでした。
ZeroMemory(&m_pSendData.pData[1], sizeof(SENDDESCRIPTOR));
 :

ZeroMemory(m_pSendData.pData, sizeof(SENDDESCRIPTOR)*50);
じゃ不満なの?
C++で、ある構造体に別の構造体を配列として動的に確保したいと思っています。
typedef struct tagSENDDES−−−−−−−−−− ここまで読んだ −−−−−−−−−−−
6764:04/07/26 15:18
あ、そこのところはそれでいいのですが、
これを通信用に利用していますので、
配列として利用できれば便利だなと思ったわけです。
バカ過ぎ
できますよ
>>66
俺は全体見渡しただけだ
71デフォルトの名無しさん:04/07/26 15:24
もしかして、こういう風に使いたいの?

typedef struct tagSENDDESCRIPTOR{
UINT nRetry;
LPVOID pPacket;
SOCKADDR_IN addrRemote;
}SENDDESCRIPTOR, *LPSENDDESCRIPTOR;

typedef struct tagSENDDATA{
DWORD dwSeq;
UINT nRetry;
DWORD dwTick;
SENDDESCRIPTOR Data[0];
}SENDDATA, *LPSENDDATA;

LPSENDDATA pm_SendData;
pm_SendData = (LPSENDDESCRIPTOR)malloc(sizeof(SENDDATA) + sizeof(SENDDESCRIPTOR)*50);
7366:04/07/26 15:25
>>69
ありがと〜。
なんか書き込んだらスペースがなくなってしまって
醜くてごめんね。
74デフォルトの名無しさん:04/07/26 15:29
>>72
なんで九九なのに5なのかは分からんが、
int arry[5][5];

static int arry[5][5];
ってことを言いたいんじゃないのか?
7566:04/07/26 15:30
>>71
えっとちょっとちがって
SENDDATA の構造体で SENDDESCRIPTORを50個(ここは実行時に決めます。)
管理したいのです。

なので
SENDDATA ないのSENDDESCRIPTORポインタに
mallocで50個分とか割り当ててあ、
配列として利用できれば名と思っています。
それで、こういう書き方が正当なのかどうかお伺いした
かった訳であります。
>>72
#include<stdio.h>
int *func()
{
static int arry[5*5];
int i,j;
for(i = 0;i < 5;i++){
for(j = 0;j < 5;j++){
arry[i*5+j]= (i+1)*(j+1);
}
}
return arry;
}
int main(void)
{
int *pt;
int i;
pt = func();
for( i = 0;i < 25;i++){
if(i % 5 == 0)puts("");
printf("%3d",*(pt+i));
}
puts("");
return 0;
}

77デフォルトの名無しさん:04/07/26 15:33
>>75
正当というよりそれが普通だ安心しる
7866:04/07/26 15:36
>>77
ありがとうございました。
こういう場合なんか宣言時に配列であるみたいな宣言がいるのかなと
気にしていました。
すっきりしました。ありがとです〜。
>>67
配列は要素が隙間なく並んでるだけだから、
まとめてZeroMemoryしようと、要素ごとにZeroMemoryしようと変わらない。
関数呼び出しのコストがかかるというデメリットはあってもメリットはない。
8072:04/07/26 15:38
>46,47
ありがとうございます!
81sage:04/07/26 15:38
>>78
ほんとに配列として扱いたいなら71の方がいいな
8266:04/07/26 15:46
>>81
・・・・・・
SENDDESCRIPTOR Data[0];
}SENDDATA, *LPSENDDATA;

SENDDESCRIPTOR Data[0];
ここのところで、
非標準の拡張機能が使用されています : 構造体または共用体中にサイズが 0 の配列があります。
って Warningがでます〜。
管理用の構造体は別段ポインタでなく
メンバ変数に固定的にもっててもOKで、なかの配列のみを
起動毎に変更したいのでポインタにしてメモリ確保後
配列として使いたかったわけです。
83デフォルトの名無しさん:04/07/26 16:10
物理の点数データが入った一次元配列のアドレスと人数を受け取り、それらの最大点 最小点 平均点を求めて返す関数を作成せよ。
(点数データは初期値代入し関数呼び出した後は最大点 最小点 平均点の順に出すこと)という問題で以下のプログラムを実行し提出をしたら「今のプログラムでは、関数内で合計しか求めていない。関数内で、最大点、最小点、平均点を求め、これら3つの値を返す
(引数を用いて)関数にすること」というのが返ってきて再提出となり困ってます。できればこのプログラムを少し変えていただけるようなプログラムでしたら非常に助かります お願いします。

http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/index.html
の270に書き込みさせていただきました(長かったために・・・)
前スレで出てたネタが再提出になったのね
URL間違えてないか
85デフォルトの名無しさん:04/07/26 16:14
>>85
#include <stdio.h>

void cal(int *x, int n, int *max, int *min, double *ave){
int i, goukei = 0;
*max = *x; *min = *x; *ave = 0;
for(i = 0; i < n; i++){
goukei += *x;
if(*max < *x) *max = *x;
if(*min > *x) *min = *x;
x++;
}
if(n) *ave = (double)goukei / n;
}

int main(void){
int a[10]={0,10,20,30,40,50,60,70,80,90};
int max, min;
double ave;
cal(a, 10, &max, &min, &ave);
printf("最大点=%d 最小点=%d 平均=%f \n",max,min,ave);

return 0;
}
8785:04/07/26 16:32
ありがとうございます さっそく作成していただいたプログラムを
提出させていただきます。ホント助かったです
出題者がここで回答者をやってて
動かぬ証拠を日夜作り出してたりして(ボソ
>>88
なんで知ってるの?
ネタバレ
91デフォルトの名無しさん:04/07/26 17:02
#include <stdio.h>
int func(int);

int main(void){
printf("%d\n",func(4));
return 0;
}

int func(int n){
if(n == 1) return 1;
else return func(n-1)+n;
}

上記のプログラムを実行すると画面にどのように表示されるかを書け。
また、関数funcは何を計算する関数かを述べよ。

という問題が出ました。実際書いて実行したところ結果は10でしたが
なぜ、10になるのか。funcは何を計算する関数なのかがさっぱり
わかりません。わかる方ご解答お願いします。
>>91
func(4)
func(3)+4
(func(2)+3)+4
((func(1)+2)+3)+4
1+2+3+4 = 10
93真の66:04/07/26 17:06
なんか偽者>73>75>78>82がいるようで、
騙りはやめてほしかった
9485:04/07/26 17:17
>>88-89
そこまで暇人じゃないのであしからず
>>94
やけに偉そうだな(プ
96 ◆WBRXcNtpf. :04/07/26 17:25
>>93
トリップ使うと良いらしい
66#password
みたいな
>>94
85?86じゃないのか?
>>92
とても素早い解答ありがとうございます。理解できました
99 ◆1Cbz1JHu5k :04/07/26 17:44
>>97 ハイ 違います
#include<stdio.h>
void main(){
int a,b,*p;
a=10;
b=10;
p=&b;
a=20;
*p=30;
printf("%d\n",a);
printf("%d\n",b);
}
の結果が
20
30
になるわけを教えて下さい・・。
101100:04/07/26 18:32
あ、わかりました。すみません・・。
*pの値とbの値は同じってことですね。
最初の
a=10;
b=10;
の意味は良く分かりませんが・・。
>>101
a=10 b=10

a=20 b=30
にちゃんと変わっただろ?という事が言いたいんじゃないかな
少なくとも a=10 の意味は全然わかんないけどな。
気の利いた問題作ろうとして失敗したって感じ。
a=20と同じように*pにも代入できるよ、
って所じゃない?
10593=真の66:04/07/26 19:52
ネタだっつーの
65が66って間違えて名前かいてたんだYO!
しまった64だったorz
もうだれがだれやら
108ふぉる:04/07/26 20:45
フィボナッチ数Fnを求める非再帰的なプログラムを作成してくれませんか?
問題の制限では繰り返し文を用いることだそうです
109デフォルトの名無しさん:04/07/26 20:56
>>108
概出
>>736-738
110デフォルトの名無しさん:04/07/26 20:57
これ再帰じゃん
>>108
#include <stdio.h>
void main(){
int n=10,j=2,a,b,c;
a=b=c=1;
for(;j<n;j++){
a=b+c;
c=b;
b=a;
}
printf("%d",a);
}
113:04/07/26 22:15
最大15、偶数を入力し魔方陣を出力するプログラム
/* 魔方陣 */
#include<stdio.h>
int main(void)
{
int mg[16][16], i, j, k, n;
printf("15以下の奇数を入力してください!\n");
scanf("%d", &n);
j = (n + 1) / 2;
i = 1;
mg[i][j] = 1;
for (k = 2; k <= n * n; k++){
if (k % n == 1){
i++;
}else if (i == 1){
i = n;
j++;
}else if (j == n){
i--;
j = 1;
}else{
i--;
j++;
}
mg[i][j] =k;
}
>108
#include<cmath>
#include<iostream>

using namespace std;

namespace{
 const double SQRT5 = 2.23606797749979;
 const double RSQRT5 = 1/SQRT5;
 const double C1 = ( 1+SQRT5 )/2;
 const double C2 = ( 1-SQRT5 )/2;
}

int fib( int n ) {
 do {
  return 1.0/SQRT5 * ( pow(C1,n) - pow( C2, n));
 }
 while( false );
}

int main(){
 int i;
 for( i = 1; i < 10; ++i ) cout << fib( i ) << endl;
}
115:04/07/26 22:16
for (i = 1; i <= n; i++){
for (j = 1; j <= n; j++){
printf("%5d", mg[i][j]);
}
printf("\n");
}
return 0;
}
で、
△▽問題▽△
@偶数を入力すると正しい結果が得られません。偶数を入力された場合でも正確な結果が出るように変更してください。
A前門に追加して15を超える数、または1未満の数が入力されたときも再入力させるようにプログラムを変更してください
B下図はn=3の魔方陣である。図のように、横の合計も出力するように前門のプログラムを変更してください。
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
15以下の奇数を入力してください!

  8  1  6 | 15
  3  5  7 | 15
  4  9  2 | 15
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
116:04/07/26 22:17
長かったので分割しました。
おねがいします
>>114, >>115-116
概出
>>117どこだよ
ここまで既出が多いと、問題を出す講師のほうがこのスレを監視しているように思えてくるな。
大金先生とか、実際チクられたケースもあったし。
まぁ28*1000以上のやりとりがあるスレだからな。似たような宿題の繰り返しにもなろう。
122デフォルトの名無しさん:04/07/26 23:29
画像にフィルタをかけるプログラムを作成せよ、との問題をどなたか解いていただけないでしょうか。
使用言語はC、環境ツールはVisual C++ Toolkit 2003です。
「フィルタは5つ作れ、でも一つ作れば数値を変えるだけだからすぐ作れるだろう」と先生から言われましたが、
全然うまくいかないので、ここに書かせていただきました。
フィルタの計算が出来ないの?
画像の読み込みが出来ないの?
元画像の形式は?
なにがうまくいかないの?
>>122

/* graphic には画像データへのポインタ、sizeにはサイズを渡す */

void filter(char *graphic,int size) {
while(size-- > 0 ) {
*graphic ^= 0xf0;
graphics++;
}
}
dw/dt=(2-a)w da/dt=(2w-4)a をルンゲ・クッタ法で解くプログラムを
作成してください。お願いします。
127デフォルトの名無しさん:04/07/27 00:14
いやいや、実際に面白いもんですよ
学生には解けないだろうな〜ってレベルの問題をだすと、
ここのHPにいつも質問が来てますからね。
最近では簡単な問題でもここに質問して答えだけ得ているようですね。

ほんとにいつも自分でがんばって解く学生なんかは
自分のレベルがきちんと分かっていますね。
だから、学生のレベルでは負えない問題をわざと出すと
ここのところの考え方はこうこうこういう考えでいいんでしょうか?
とか
ここのところをこうこう考えたんですが○○の値がエラーになってしまって困っています。
と、きちんと自分のわからないところを説明できるようになってきています。
馬鹿学生は自分のレベルが分かってないわけですから、
いくら難しい問題を出しても平気で綺麗なプログラムを提出してきます。
私でも、ちょっと書けそうにないぞってなコードがあったので
検索してみたらここのHPを見つけたわけですね。
まあ、前期の単位を出す2週間前に馬鹿学生を呼び出して
いままでのレポートやり直しを命ずるつもりでいますから。

やはり課題を出す側としては完璧なものを求めているわけではありません。
そんなのは無理だということも分かっています。
学生が自分の頭でどう考えて、どう試行錯誤を繰り返すのか、
そこのところが一番大事です。

ここを見ていて思い当たる節のある学生は気をつけるように
学のない人間が学のある人間をよそおって書くと、上記のような不気味な文章になります。
>>127
このスレに出てくる質問の大半は中学〜高校レベルだと思うんだけど
ここのレスが綺麗なプログラムなんて思ってる辺りが粕取り講師の限界なのか。
131125:04/07/27 00:29
dw/dt=(2-a)w da/dt=(2w-4)a w(0)=2, a(0)=1を
ルンゲ・クッタ法で解くプログラムを作成してください。
お願いします。

http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1027870433&res=271
まずはルンゲ・クッタ法のアルゴリズムをどうぞ
>私でも、ちょっと書けそうにないぞってなコードがあったので

ようはそこか(w
134125:04/07/27 00:37
ルンゲクッタ法のアルゴリズムです
http://www.math.sci.hiroshima-u.ac.jp/~daishin/keisanB/1998/runge.html
よくわかんないから侍の人よろしく
136122:04/07/27 01:03
ものすごくレスが遅くなって申し訳ないです。

>>123
えーと、まず下のアドレスにある「入力画像の輝度値を2倍にして出力する」プログラムを試してみました。
ttp://www.edu.tuis.ac.jp/~susaki/image/c_process.html
このプログラムの通り、画像の読み込みは実行時に行い、元画像の形式はraw、出力画像もrawです。
また、宿題も同じようにraw画像を実行時に読みこんで、raw画像を出力ということでした。

うまくいかないのはその後、このプログラムを応用してフィルタの計算をしようとしたのですが、下手にソースをいじるとエラー吐いてよくわからない状態に・・・(汗
なので、ぼかしの効果を出すソースプログラムを教えていただけるとうれしいです。

>>124
すみません。これだけだと実行しても何が何だか・・・(泣

最後に、>>1に書いてあ注意書きに反してしまったみたいです。
すみませんでした。
>>136
非常に簡単な暈かし(というか平均化)の例。

画像読み込み();
for (unsigned y = 0; y < height; ++y) {
for (unsigned x = 0; x < width - 1; ++x) {
画素[x + y * width] = (画素[x + y * width] + 画素[x + 1 + y * width]) / 2;
}
}
画像書き出し();
へー.
何か面白い.
>>136
31行目〜35行目だけ直せばよい

1)輝度2倍(オリジナル)
  if(idat * 2 > 255){
    idat = 255;
  }else{
    idat = idat * 2;
  }

2)2値化(閾値128)
  if(idat & 0x0080){
    idat = 255;
  }else{
    idat = 0;
  }

3)輝度反転
  idat = ~idat;

4)輝度1/2
  idat >>= 1;

5)これら全部対象が1点のみであまり面白くないので、
エンボスやエッジとかもやってみよう。
ナンカスゲー
>>125,131,134
この問題に適切なルンゲ・クッタ法を紹介しろや。調べるのが面倒だったぞ
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1064150088&res=185
142125:04/07/27 08:44
>>141
侍様、ありがとうございます。
カスタムフィルタでいいじゃん
ヌルボ
宿題まだー?ちんちん
重複とかでるんだったら宿題の回答まとめサイトとかほしいね…
sakuraでは雑然としたメモ帳みたいでなんだかなぁ…
>>146
このスレで質問するようなのは、まとめてあっても見ないから同じ。
回答者は問題をとくのが楽しみだからな。
148デフォルトの名無しさん:04/07/27 13:44
ちょいっと長いのですが、Cの宿題を助けていただけませんか?
身長のデータを一行一人分で入力するものとする。
ただし、入力するデータは最大でも100人分と分かっているものとする。
身長データとして負の値を入れた時点でデータ入力の終了と判断するものとする。
データ入力が終了した時点で何人分のデータであったかという人数情報と、平均身長、
ならびに全データの中で最大値と最小値を出力するプログラムを作ってもらえませんか?

なお、データの入力中ゼロを入力すればコレまでの入力データを
入力番号(通し番号)と共に表示し、入力番号を入れれば当該データを削除し
それ以降のデータを上に繰り上げて、再びデータ全体を出力するものとする。
入力番号として0を入れた場合は、データの削除は行われず、データの入力処理を継続するものとする。

なお、プログラムの作成に関してはmain関数以外の関数をひとつ定義して使うという条件があります
>>148
丸投げ氏ね。
金くれるんなら考えてもいい( ´ー`)y-~~
150デフォルトの名無しさん:04/07/27 13:50
す、すみません
とりあえず平均と人数を求めるものは作ってみました。
ここから削除モードに移る機能を付けたいのですがどうすればよいでしょうか?
main()
{
int i;
float height[100],x;
i=height[0]=x=0;
while(x>=0){
scanf("%f",&x);
if(x!=0){
height[i+1]=height[i]+x;
i++;
} else {
i--;
}
}
height[i]=height[i]-x;
i--;
printf("平均身長は%f,\n",height[i]/i);
printf("入力した数は%d,\n",i);
}

>>147
あいや〜質問者のためではなく、
ここで勉強してる僕みたいな人のためですw
>>150
#include <stdio.h>
void hyouji(float height[]){
int i;
for(i = 0; i < 100; i++){
if(height[i] == 0) break;
printf("No.%d Height = %f\n", i+1, height[i]);
}
}
int main(void){
float x, sum = 0, height[100] = {0};
int i, n, index = 0;

while(index < 100){
scanf("%f", &x);
if(x > 0) height[index++] = x;
else if(x == 0){
while(1){
hyouji(height);
printf("delete : "); scanf("%d", &n);
if(n == 0) break;
if(n > index) {printf("no data\n") ;break;}
for(i = n - 1; i < 99; i++) height[i] = height[i+1];
height[99] = 0; index--;}
}
else break;
}
i = 0; while(height[i]){ sum += height[i++]; if(i >= 100) break;}
printf("平均身長は%f\n",sum / i); printf("入力した数は%d\n",i);
return 0;
}
153152:04/07/27 15:08
>>152-153
ありがとうございます
とりあえずこれ提出するだけではあんまり意味がないんで、自分の力にもならないし
これを自分なりに手を加えてやってみたいと思います

Cは5月から学校で習い始めたばっかりでまだ>>152-153のソースで分からないものも多いのですが(void)とか
できるだけがんばって見ます。 ありがとうございました
155デフォルトの名無しさん:04/07/27 16:37
なげーし仕様違反だしw
なんつーかもう身長とか成績とか計算するライブラリつくった方が早いんじゃないか。
どこの大学もこんな問題ばっか出してるわけ?
だから、大半は高校の宿題だって。
>>157
中学校じゃないのか?
オレが工業高校生の頃はもっと難しかったような気がするんだが。
C言語の30%は最大、最小、平均値で出来ています。
残りの70%はやさしさです
162デフォルトの名無しさん:04/07/27 18:18
2の10000乗を計算するエレガントなプログラムを作れという宿題が出ました。
言語はCでよろしくお願いします。m(_ _)m
main()
{
printf("%d", 2^10000);
}
>>162

int print_large_int(int*, int);

int print_large_int(int* plint, int count) {
/* plint先頭からcount個を配列として、その数を表示する */
return 0;
}

int main(void) {
int elegant[313];
elegant[0] = 0400;
print_large_int(elegant, 313);
}
- elegant[0] = 0400;
+ elegant[0] = 01000;
10000乗なら、こうだな
>>164

/* plint先頭からcount個を配列として、その数を表示する */

ここはどう書くんですか?
気合いで
168デフォルトの名無しさん:04/07/27 22:52
先生方、お願いいたします。

問題1. 複素数の指数関数 ez は, テーラー展開を用いて次の式で求める.

ez = 1 + z + z^2/2! + z^3/3! + … + z^n/n! + …

上式を用いて e^z を計算するプログラムを作成せよ. 上の展開式で, 各項の分母は階乗であるから, 急速に増大する. よって各項は急速に小さくなる. したがって, 適当なところで計算を打ち切ってよい. まず, 最初の6〜7項を計算し, 計算精度が足りなければ項数を増やせ.

プログラムができたら, e^(x+0i)を計算し,実数のexp関数の答えと照らし合わせて検算せよ.

また, 実数のθに対して e^iθ = cosθ + i sinθ の関係があることを調べよ.

問題のヒント: exp^zの各項はzn/n!の形をしている. z^nは以前に作ったpow関数を使って計算できる. また, 分母のn!はプログラミング演習Iで作ったkaijo関数を使って計算できる. kaijoは戻り値がintなので, complex(kaijo(n),0)として, complex型に変換して使えばよい.

続く
続き
うそぴょーん

終わり
170デフォルトの名無しさん:04/07/27 22:53
とりあえずこんなんつくったんですが、どうも違うみたいです。

#include "complex.cpp"

int main(void)
{
int a,i;
printf("底eのz乗を計算します\n");
printf("z >");
scanf("%f",&a);
complex c(1,0),z(a,0),sum(0,0);

sum=c+z;
for(i=2; i<10; i++){
complex b(kaijo(i),0);
sum=sum+pow(z,i)/b;
}
sum.print();
printf("\n");
getchar();

return 0;
}

付け加えおねがいします。
171168:04/07/27 22:54
>>169 これは偽物ですので。
complex.cppって何よ
173168:04/07/27 23:02
ええと、コンプレックスクラスをつくってあったり、オペレーターで四則演算が
複素数の計算をするようになってます。あと複素数のべき乗を返したり、階乗を返したり
します。すいません、説明がへたで・・・
いや、そうじゃなくて普通はcppをincludeしたりしない。
すいません 会社の研修の宿題なのですが

10101010 x 11001100 = 00100010
となるようなプログラムを記述せよ
* =の右側は演算結果である
演算は一行で記述するものとする

という問題があるのですがお願いします
課題名は ビット演算 です

おねがいします
176168:04/07/27 23:29
まま、まじっすか!?でも教授にはこうやれと言われ申しました。
ちなみに中身はこんな感じです(一部)。

#include <math.h>
#include <stdio.h>
class complex{
private:
double real,imaginary;
public:
complex(void);
complex(const double r,const double i);
void print(void) const;
#if 0
void draw(CDC* pDC);
#endif
friend int kaijo(int x);
friend complex pow(complex x,double y);
friend double abs(complex x);
friend double arg(complex x);
friend complex polar(double a,double b);
friend complex sqrt(complex x);
friend complex operator +(const complex x,const complex y);
friend complex operator -(const complex x,const complex y);
friend complex operator *(const complex x,const complex y);
friend complex operator /(const complex x,const complex y);
};

どうでしょうか・・・?
>>175
/* ビット演算 */
#include <stdio.h>
int main(void)
{
puts("10101010 x 11001100 = 00100010");
return 0;
}

会社辞めろ。今ならまだ間に合う。
10101010 x 11001100 = 00100010

10101010 | 11001100 = 11101110 ×
10101010 & 11001100 = 10001000 ×
10101010 ^ 11001100 = 01100110 ×

・・・
10101010 & (~11001100) = 00100010 やね
ああ、xに一つの演算子を入れろっていうんじゃないのか。
#include < stdio.h >
void main(){
unsigned char hidari = 0xAA;
unsigned char migi = 0xCC;
printf("%d",hidari & (~migi));
}

あってるかな?
182181:04/07/27 23:52
これじゃ10進数で表示しちまうか
どうしたらいいんだっけ?
>>182
逐一ビットが立ってるかを調べて01を表示。

for(i = 7; i >= 0; i--)
 if((hidari & (~migi)) & (1 << i)) putc('1');
 else putc('0');
putc('\n');
184168:04/07/27 23:59
>>168です。自力でやることにします。
>>170でやるとコンパイルはエラーなしでできるのですが実行すると

Run-Time Check Failure #2 - Stack around the variable 'a' was corrupted

といったエラーメッセージがでてきてしまいます。これは何が悪いのでしょうか?
>>184
aをintで宣言しているのにscanfする時に%dにしてない。
186185:04/07/28 00:04
間違えた。
aとiはdoubleで宣言しなきゃダメ。
187185:04/07/28 00:05
さらにミス。doubleにするのはaだけでよかった…orz
188168:04/07/28 00:07
>>186 あいたー!初歩的なことに気付きませんでした。
すいません、ありがとうございました。この恩は向こう数十年は忘れません。
189168:04/07/28 00:18
>>168です。エラーは消えたのですが答えがz=1のときは底eの2.7なんとかーって
でてくるはずなんですが2.00000000にしかなりません。
kaijo,pow関数はちゃんとした答えを返していました。なにが原因でしょうか・・?
190168:04/07/28 00:22
どうもpow(z,i)/bがおかしいようでした。毎回pow(z,i)/b=0になっていました。
うーん・・・
191185:04/07/28 00:24
>>188
忘れていーよ。寧ろ忘れて。

complex b(kaijo(i),0);

complex b((double)kaijo(i),0);
でどうよ?
192168:04/07/28 00:34
>>185様様
すいません、"/"のオペレーターの式が間違ってました(´д`)
おかげさまで底は無事表示できました。
あとexp関数を使って検算をするらしいんですけどヘルプにあるこれ↓意味がわかんねぇっす・・・

int main( void )
{
double x = 2.302585093, y;

y = exp( x );
printf( "exp( %f ) = %f\n", x, y );
}
193185:04/07/28 00:38
>>170を使って、aに2.302585093を代入して、同じ値が出ればいいんじゃない?
具体的な値は…10。
194168:04/07/28 00:46
なるほど。exp(x)はe^xを返す関数というわけですな。
ちなみに2.302585093を我がプログラムにいれたら見事に10.0000がでましたよ!!
ヒャホー(・∀・)イイ!!ありがとうございました!あとはθを使うやつか・・・

ちなみに余談ですが私は.net2003を使っているのですがツールバーの
デバッグのなかにあるプロセスってのをクリックするとなぜか.netがとまってしまうんですよね・・。
デバッグなしで開始のすぐ下にプロセスってのがあるんでさっき間違えて押してしまったときは
蒼白ものでした。
195デフォルトの名無しさん:04/07/28 01:53
16進数を入力して10進数を出力するプログラムが
宿題で出たんですけど、初心者なのでぜんぜんわかりません。
なぜかscanf()関数を使っちゃいけないらしいです。

例えば、20って入力したら、32って出るプログラムです。
よろしくお願いしますm(__)m
fscanf
>>195w
#include <iostream>

int main() {
 int value;
 while(std::cin >> std::hex >> value)
  std::cout << value << endl;
 return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
int main() {
char buf[20];
fgets(buf, 20, stdin);
printf("%ld\n", strtol(buf, NULL, 16));
return 0;
}
>>197
endl に std がねーぞ。
>>195
普通にこうでしょ

#include <stdio.h>
int main(){
int i;
scanf("%x",&i);
printf("%d\n",i);
return 0;
}
>>200
問題をよく読みましょう
202200:04/07/28 08:54
やってもた・・・orz
203デフォルトの名無しさん:04/07/28 09:30
>>195
#include <stdio.h>
#include <string.h>
int main()
{
 char Buf[256];
 fgets(Buf, sizeof Buf / sizeof (Buf[0]), stdin)
 ;printf("%ld", stdtol(Buf, NULL, 32);
 return 0;
}
宿題まだー?ちんちん
>>204
下品。荒らしうざいきえろ
206デフォルトの名無しさん:04/07/28 13:31
面倒な宿題・・・他の言語と比較してC++について論述しろって。
javaと比較しようと思うのだけど、何を書くのがいいのでしょう。
誰かヒントお願いします。
「ちんちん」は↓のAA略じゃないのか
下品と捉える貴方が

       ☆ チン        ハラヘッタ〜
                     ハラヘッタ〜
 ☆ チン  〃 ∧_∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ヽ ___\(\・∀・)< 宿題まだー?
      \_/⊂ ⊂_)_ \____________
    / ̄ ̄ ̄ ̄ ̄ ̄ ̄/|
   |  ̄  ̄ ̄ ̄ ̄ ̄ ̄:|  |
   | 淡路たまねぎ   .|/
    ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
>>206
参照
多重継承
演算子のオーバーロード
テンプレート
936 名前:デフォルトの名無しさん[sage] 投稿日:04/07/25(日) 21:57
>>934-935
下品すぎ

このアホだろ
「ちんちん」は箸で丼を叩く音なんだけどな。
 
 このAA
   ↓
       ☆ チン

 ☆ チン  〃 ∧_∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ヽ ___\(\・∀・)< ○○まだ〜?
      \_/⊂ ⊂_)_ \____________
    / ̄ ̄ ̄ ̄ ̄ ̄ ̄/|
   |  ̄  ̄ ̄ ̄ ̄ ̄ ̄:|  |
   | 淡路たまねぎ   .|/
    ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
162の2^10000が微妙だから解いてやったら?
>>206
バイトコード
GC
標準ライブラリ
>>208,211
さっそくありがとう。調べてまとめてみる。
>>195
>>203のを改良,エラーチェックぐらいしなさいな
#include <stdio.h>
#include <stdlib.h>
int main()
{
char Buf[256];
gets(Buf);
printf("%ld", strtol(Buf, NULL, 16));
return 0;
}
>>205
さては2ちゃん初心者ですね。
最初はROMっていってるでしょーが。
>>213
改悪するな
216マイク ◆yrBrqfF1Ew :04/07/28 14:09
サテハニチャンショシンシャデスネー!
wow!f**king!!i18n!
>>215
え!?どこが!?
そもそも>>203コンパイルエラーでつよ?
出力32進数になってるし
出力じゃねーや,32進数として変換されてるってことね
シンタックスエラーを直しても、fgetsをgetsに置き換えてたら釣りと見られても仕方が無い
>>219
先をこされた...
#include <stdio.h>
#include <string.h>
int main()
{
    char Buf[256];
    fgets(Buf, sizeof Buf / sizeof (Buf[0]), stdin);
    printf("%ld", strtol(Buf, NULL, 16));
    return 0;
}

変えるのはこれぐらいでいいだろう。
セミコロンは別に動かさなくても良かったけど、気分悪いから・・・。

わざわざ、バッファオーバーフローしないようにしてあるのを、
(ユーザー次第で)バッファオーバーフローするようにすることもあるまい。
>162
|・∀・|ノ ひさしぶりにようかんまんが解いてみたよ!
お礼はかわいい幼女画像がいいなー
#include <stdio.h>
#include <string.h>
#define EX10000
#define LIM1000
int main()
{
int tbl[100000];
int carry;
int i,j,w=1;
memset(tbl,0,sizeof(tbl)/sizeof(tbl[0]));
tbl[0]=1;
for(i=0;i<EX;i++){
carry=0;
for(j=0;j<w;j++){
tbl[j]+=carry;
tbl[j]*=2;
if(tbl[j]>=LIM){
carry=tbl[j]/LIM;
tbl[j]=tbl[j]%LIM;
}
}
if(carry>0)tbl[w++]=carry;// 繰り上がり
}
printf("2^%d = ",EX);
for(i=w;i>0;i--)printf("%03d",tbl[i-1]);
puts("");
return 0;
}
getsって使っちゃいけないの?
最近気付いたんだがファイル操作以外で
fgets派を多数見かけるんだがこれってどういう事?
どうも俺はファイル操作以外でfがつく関数を使われると違和感を感じるんだが・・・.
224マイク ◆yrBrqfF1Ew :04/07/28 14:19
どうせならリモートにしろよ
225デフォルトの名無しさん:04/07/28 14:20
>>223
getsを使うほうが違和感があるんだが。
226マイク ◆yrBrqfF1Ew :04/07/28 14:23
>>223
何言ってるんだ使っちゃいけないわけ無い。
使っちゃいけないもんがなんで標準にあんだよ。
no boundary checkingってのが好きな奴もいるんだよ
std::printf(argv[1]);いうのもな
>>223
まさか、プログラマで飯くってる人じゃないだろうな
>>223
getsじゃ最大文字数指定できないでしょ?
>>227
それって、SE/管理職ってこと?
バッファオーバーフローか,そうかそうか
なんかサイズチェックがゆるい関数表とか
Cで使っちゃいけない関数表とかないかな
>>230
おまえはC/C++を使っちゃいけない。
使うなとは言わない。

ただし、ユーザーが特定できていて、
なおかつ、そのユーザーが仕様以上の文字を入力する心配が無い場合のみにしてくれ。

#include <stdio.h>
int main()
{
    char szBuf[8];
    fgets(szBuf, sizeof szBuf / sizeof(szBuf[0]), stdin);
//    gets(szBuf);
    printf("%s", szBuf);
    return 0;
}

このままの場合と、fgetをコメントアウトしてgetsのコメントアウトを解除した場合で、
8文字以上入力して試してみてくれ。
ただし、バッファオーバーフローするので、自己責任で。
まぁ、Win32の環境なら他のプロセスにまでは影響はでないと思うが…。
>>232
9xなら逝っちゃうかも
>>195なら>>197-198で既に終わってる。
gets とか scanf とかの論争はここ↓でやれや。

C言語なら俺に聞け! Part 87
http://pc5.2ch.net/test/read.cgi/tech/1090654469/
>>234
阿呆。その二つはこっちだ。

C言語なら俺俺に聞け! Part 87
http://pc5.2ch.net/test/read.cgi/tech/1090652323/
>>235
名に言ってんだ。
その二つは「C言語なら俺に聞け!」のメインテーマだろうが!
>>232
だって宿題だぜ?
そりゃー不特定の人相手に作る場合はチェック厳しくするけどさ
>>236
scanfで荒らしたい阿呆は>>235逝きだよ
>>237
「使ってもいい」「使っちゃダメ」って一言で言ったら理由を知らない人が・・・。
俺も、宿題ならgets使おうとscanf使おうと構わないと思うけど。
宿題まだぁ〜ちんこちんこ
>>222
|・∀・|ありゃりゃTABだったからくっついちゃってる
#define EX 10000
#define LIM 1000
>>222
ん?これあってる?
2^20乗をためしたらおろろな結果になったんだが…
>>222
まったくエレガントではないのぉ
結果: 2^20 = 001010034072576
正:  2^20 = 1048576
象かよ。
ちゅうか
>>エレガントにお願い
とか言われると解くのに躊躇しちゃいます(^^;
ふだんからエレガントに書いていたらショボいソースは出てこないかと。
carryを0にするの忘れてた

if(tbl[j]>=LIM){
carry=tbl[j]/LIM;
tbl[j]=tbl[j]%LIM;
}else{
carry=0;
}

でもまだ微妙に違うなあ…
|・∀・;| わかった、逆でした
こっちが正解
tbl[j]*=2;
tbl[j]+=carry;

あと
#include <string.h>とmemset
いらないね
ようかんまーん
清書してsakuraにUPおねがいしまーす!
>>251
Guっじょぶ!よーかんまーん
253デフォルトの名無しさん:04/07/28 15:49
#include <stdio.h>

const int JOU = 1000;
const int KETA = 2000;
const int NINOBASYO = (2 / 2);

int main(void)
{
int i;
int hako[KETA];

for(i = 0; i < KETA; i++) hako[i] = 0;

hako[NINOBASYO] = 1;/* 2ができた */

hako[JOU] = hako[NINOBASYO];/* 1000乗できた */
hako[NINOBASYO] = 0;

for(i = 0; i < KETA; i++) printf("%d",hako[i]);

printf("\n 2進数でドゾー。 \n");

return 0;

}
ようかんまん先生こちらにおられましたか。
前のスレはどこにいきました?
virtualつけた関数ってどういう挙動なんですか

A←B←Cと継承してる場合
基底クラスからvirtualをずっとつけといた関数は
A *c=(A) new C; c->hoge(); とかやると
newしたときのクラスCのhoge()が呼ばれるけど
ずっとvirtualをつけてないときはAのhogeが呼ばれる。

で、よくわからないのが
継承の途中からvirtualをつけたり、途中からはずしたりしたとき。
実験しまくってるけど法則がよくわからないです。
>>255
途中からの変更は効かない
一度virtualをつけたらそれ以降は省略してもvirtual
>>254
ようかんまんも、拙者も、流石兄弟も
中の人達はみんな同じでお送りしております。
>>258
中 の 人 な ど い な い 。

OK?
>>259
いい加減現実を見ろよ!
#include "現実.h"

int main(void)
{
return いい加減現実を見ろよ!();
}
unko[x]の中にy個の数字の中からx個を選んで入れる。
仮にx=4、y=10なとき、

unko[ ]={1,2,3,4}
unko[ ]={1,2,3,5}
unko[ ]={1,2,3,6}
・・・
unko[ ]={7,8,9,10}

とunkoの配列の中身を順に変えて行きたいのですが、
for文を使わずにTimerを使って一回づつ処理を進めて行く場合は
どう書けば良いですか?
>>262
そんな問題を出した先生を埋めて来い
Timerって何?
>>264
コールバックさせたいんじゃない?
>>262
俺が昔書いた(ぱくった)コード
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1064150088&res=54&fi=no
next_permutation(配列の先頭へのポインタ, 配列の末尾へのポインタ + 1);
で動くはず。
>>266
お、有難うございます。
コードの再利用など愚の骨頂だと気づいたから、書き直した。
void swap(int *a, int *b)
{
    int t = *a;
    *a = *b;
    *b = t;
}
void reverse(int *data, int size)
{
    int i, j;
    for(i = 0, j = size - 1; i < j; i++, j--)
      swap(data + i, data + j);
}
int np(int *data, int size)
{
    int i;
    for(i = size - 2; i >= 0; i--)
    {
        if(data[i] < data[i + 1])
        {
            int j = size;
            while(data[i] >= data[--j])
                ;
            swap(data + i, data + j);
            reverse(data + i + 1, size - i - 1);
            return 1;
        }
    }
    reverse(data, size);
    return 0;
}
>>262
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1064150088&res=189
そんなに難しく考えなくてもコレで良いんじゃないかい?
270デフォルトの名無しさん:04/07/28 20:20
常微分方程式を解くプログラム作ってみたんですけど、
これで問題ないのでしょうか・・・?
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1027870433&res=272
>>270
func()が全く意味を成していない.
xを返してるだけじゃん
return (x); /* 右辺の関数 */

return (t,x); /* 右辺の関数 */
に変更
273デフォルトの名無しさん:04/07/28 23:38
>>272
ぬるぽ!!
>>273
ガッ!!
>>274
ぬるぽ!!
276168:04/07/29 00:13
すいません、昨日の者です・・・
複素数の指数関数 ez は, テーラー展開を用いて次の式で求める.
e^z = 1 + z + z^2/2! + z^3/3! + … + z^n/n! + …  ( zは(a+0i) )
らしいのでこんなん作ったんですが値が1とか2とか小さいのだと標準ライブラリの
expを使ったのとかなり近い値になるのですが5ぐらいになってくるとかなりずれてきます。
なにがおかしいのでしょうか??

//eの複素数べき乗を返す
complex exp_co(complex x)
{
  int i;
  complex c(1,0),sum;
sum=c+x;
  for(i=2; i<10; i++){
complex b(kaijo(i),0);
sum=sum+pow(x,i)/b;
  }
  return sum;
}

277168:04/07/29 00:14
ちなみにmainはこんな感じです。
int main(void)
{
double a;
printf("問題1:\n底eのz乗を計算します\n");
printf("z >");
scanf("%lf",&a);
complex ans1,seed(a,0);
ans1=exp_co(seed);
printf("自分のプログラムの値 > ");
ans1.print();
printf("\n\n");
・・・・

>>276
マクローリン展開じゃなくテーラー展開を使え
279168:04/07/29 00:36
>>278 Σ(゚д゚)エッ!?このプログラムテーラー展開してないの!?
>>276
級数の和を取る回数の10を増やせばいいだけじゃないの
281280:04/07/29 00:40
つーか増やせって>>168にも書いてあるじゃねーか。
282168:04/07/29 00:42
>>280

ループ条件:for(i=2; i<10; i++)
底eのz乗を計算します
z >7
自分のプログラムの値 > 910.749383+0.000000i
exp関数の値        > 1096.633158+0.000000i

ループ条件:for(i=2; i<20; i++)
底eのz乗を計算します
z >7
自分のプログラムの値 > 101366746.487487+0.000000i
exp関数の値       > 1096.633158+0.000000i

でした・・・
>>282
実装が悪い。階乗を計算してると限界がすぐに来る。
284168:04/07/29 00:46
ではlong double でいいんですか・・・?
…まあ、向いてないということで……
286168:04/07/29 00:48
ヽ(`Д´)ノウワァァン
287デフォルトの名無しさん:04/07/29 02:19
>>199
コンパイルしてから言え
>>287
しなくてもないもんはないだろ
どんな環境でも常に2バイトの大きさを持った変数を使いたいんですが…
どうやら学校のパソコンではint型が4バイトのようで、int使うと大きすぎて困るんです。
だからといって char a[2] みたいにすると直接 a=a+1 とかいう感じに、一つの数字として
扱うことが出来ないし。
なんか方法ないですかね?
>>289
お前には向いてない
学校辞めて別の道探した方がいい
>>289
ここは宿題スレ。こちらへどうぞ。
ttp://pc5.2ch.net/test/read.cgi/tech/1090324689/

ついでにこれも。
つ short int
>>291
いやなんか、どんな処理系でも共通な型ってcharだけって聞いたんですが、
short intも常に2バイトで決まってるんですか?
293デフォルトの名無しさん:04/07/29 03:06
>>292
共通な型という意味では全部そうだが、サイズが同じものは何もない。最低の
ビット数が決まっているだけだ。実装依存だからコンパイラのマニュアルを嫁。
しかし、その前にまず常に2バイトの整数を使いたい理由を言ってみろ。
294168:04/07/29 05:13
ヒロシで・・・じゃなく168です。
解決しました。
double kaijo(int x)

{

int i,sum;

sum=1;

for(i=1; i<=x; i++) sum=sum*i;

return sum;

}
kaijoがこんなんになってました・・・
sumはdoubleじゃん・・・('A`) もう寝ます。
自分にプログラミングは向いてないっすかね・・・あと実装っていう意味勘違いしてました。
調べてなんとなくですがわかりました。
>>283様 ありがとうございました
295デフォルトの名無しさん:04/07/29 06:10
>>292
じゃあキミの知ってる short の長さは?
10センチ以下だろ
>>292
stdint.hのint16_t ならどうだ?
ただ2バイトじゃなくて常に16ビットと決められているけど
(VCならたぶんstdint.hがない代わりに__int16って型があるはず)
>>297
で、どんな処理系にもあるの?それ。
WORD は?
>>292
おいおい、>291の前半はスルーか?
はい
>>298
なかったら自分で作れ。typedefと#defineが並んでるだけだ。
>>292
組み込み系ではcharが9bitのものもあるという話だが
>>303
それでも char は1バイト
C99 なら stdint.h
C++ なら boost/cstdint.hpp

C99以前のCとか、C++だけどboost使えないとかの場合はシラン
>>305
C++ の場合は知らないが、C99 の int16_t とかはあれば定義されてるってだけで、
どの処理系にもあるってわけじゃないんでは?
そもそも 1バイト と 8ビット は絶対的には = ではない。
バイトバイトばーいと♪
おい、無職。バイトしろ
Float Overflow のアプリケーションエラーの場合はどうすればいいのでしょうか?
みんな型の質問するときに自分の環境を書かないのはこのスレの伝統ですか?
・全ての環境が同じ仕様だと思っている
313310:04/07/29 10:22
Borland5.5 WindowsXP です。
>>310
スレ違い。ここは宿題スレだってばさ。
まだー?ちんちん
putcやgetcと、fputcやfgetcの具体的な違いが解せません。
宿題じゃないだろそれ。マニュアル嫁
スレ違いなあなたが解せません。
質問者は俺たちに定期的に宿題を出し続けなければならない
>>289
ビットフィールドじゃだめか?
1バイトが 7,8,9,11 ビットの処理系に対応するように union して
あげれば何とかなると思う.

でも,そんなアクロバティックなプログラムは
今の時代に合わないと思うよ.

>>319
ドラッグ中毒だなw
charが12bitのCPUもある
scanfの話題もそろそろ出てくる頃だな
> 32bitで表せる素数をすべて列挙するプログラムを作成せよ。
> ただし、単独のコンピュータで行い、24時間以内に終了することを条件とする。

どなたか出来ませんでしょうか?
>>324
マジで一生懸命考えちゃったじゃないか!w
ビルの高さh(m)、初速v(km/h)を入力し、
落下地点と最終速度を表示するプログラムを作成しなさい
但し、仰角は0度、空気抵抗は考慮しなくても良い。
■問題
地上26mの高さのベランダから水平に飛び出したところ建物から
9m離れた地表に落下した。ベランダから飛び出したときの初速
を求めよ。なお、重力加速度は g=9.8m/sec^2とし、空気抵抗は
無視する。

考え方:初速度V0で物体を水平方向に投げると、水平方向には等速
運動、鉛直方向には初速度0の自由落下運動となる。
 速度のx成分 Vx=V0 時間tについて積分→t秒後の水平位置 x=V0*t
 速度のy成分 Vy=g*t 時間tについて積分→t秒後の鉛直位置 y=(1/2)*g*t^2
地表に落下した時刻をt1とすると、題意より、
 V0m/sec*t1sec=9m …1)
 (1/2)*9.8m/sec^2*t^2sec=26m …2)
 1)より t1=9/V0 これを2)に代入して
 (9.8/2)*(9/V0)^2=26
 9/V0=√26/(9.8/2)
 V0=9/√(26/(9.8/2))
 V0=3.907m/sec
(答) 3.907m/sec (14.07km/h)
--------------------------------------------------------------------------
■落下時間は 1)にV0を代入して t1=9/3.907≒2.30sec
  最終速度は Vy=g*t=9.8*2.304≒22.58m/sec (81.3km/sec)
   ♀
 彡 />....
───┐   ’ミζ゚
□□□│     ・ 
□□□│      ’.
□□□│↑      ミ
□□□│        ζ゚
□□□│26m       .
□□□│          .
□□□│↓         .
□□□│          .
 ._.  │          ..
 | | |  │       "orz ||     
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 
     |←   9m   →|     
いたい、いたい
関数atof(),atoi(),strtod()と同様の機能の関数を作ってください。
>>324 後はCPU能力次第やな。
int main(void)
{
/* unsigned long = 32Bit */
unsigned long *prime, count, number, index, *memory;
char loop;
prime = (unsigned long *)malloc(1 * sizeof(unsigned long));
if (prime == NULL) return 1;
prime[0] = 2;
count = 1;
printf("%u\n", prime[0]);
number = 3;
while (number != 1) {
for (loop = -1, index = 0; loop && index < count; index++) {
if (number % prime[index] == 0) loop = 0;
if (prime[index] >= number / 2) break;
}
if (loop) {
memory = (unsigned long *)realloc(prime, (count + 1) * sizeof(unsigned long));
if (memory == NULL) {
free(prime);
return 1;
}
prime = memory;
printf("%u\n", number);
prime[count++] = number;
}
number += 2;
}
return 0;
}
>>331
時間計算量も空間計算量も爆発します!
// Need -> #include <stdlib.h>

double _atof(const char *nptr){ return strtod(nptr, (char **)NULL); }
int atoi(const char *nptr){ return strtol(nptr, (char **)NULL, 10);
最後に中括弧つけといて(||゚Д゚)
335331:04/07/29 13:29
ちょい修正
if (prime[index] >= number / 2) break;

if (prime[index] >= number / 3) break;
>>332
CPU2GHz、RAM1GBもありゃぁ十分可能ジャマイカ?
今時実現不可能なスペックでもあるまい?
素数を計算せよじゃなく、単に列挙するだからラクショー
#include <stdio.h>
#include <stdlib.h>
inline bool BitGet(unsigned int *x, unsigned int y)
{
    return x[y/32] >> (y % 32) & 1;
}
inline void BitSet(unsigned int *x, unsigned int y)
{
    x[y/32] |= 1 << (y % 32);
    return;
}
int main(int argc, char **argv, char **envp)
{
    unsigned int *map, i, j;
    const unsigned int max = 0xFFFF;

    map = (unsigned int *)calloc(max/32+(max%32 != 0), sizeof(int));
    if(map == NULL) return 0;
    for(i = 2; i <= max; i++){
        for(j = 2; j <= max / i; j++){
            BitSet(map, i*j);
        }
    }
    for(i = 2; i <= max; i++)
        if(!BitGet(map, i))
            printf("%d\n", i);

    free(map);
    return 0;
}
エラトステネスのふるいを使ってみた。
とりあえず、"動くように"作ったから速度は(r

メモリは128MBくらい要ります。
maxを0xFFFFFFFFにしといて('A`)
テストで減らしたの忘れてた。
素数は列挙スレに行けばいい。
まあ結局はエラトステネスしかないんだが。

>>339
> maxを0xFFFFFFFFにしといて('A`)
int が 32ビットの保証はないし、32ビットなら止まらん。
limits.h - UINT_MAX
>>341
32ビット演算の場合。
(unsigned)0xFFFFFFFF <= (unsigned)0xFFFFFFFF は真だよね?
0xFFFFFFFF + 0x00000001 = 0x00000000 だよね?
(unsigned)0x00000000 <= (unsigned)0xFFFFFFFF は真だよね?
ほら、Forループが終わらないでしょう?
>>326
地球上と限定していいの? その場合、緯度と標高は?
あーそれに、初速の方向も必要だな。
0xFFFFFFFE
みんなの使うCには do ... while 文というものが無いのか?無いなら謝る。
ui = 0;
do {
ui++;
} while (ui != 0xFFFFFFFF);
とすれば良いジャマイカ。
346326:04/07/29 14:33
>>343
地球限定で構いません。重力加速度=9.8m/s^2でお願いします。
初速の方向は、地表と水平で、ビルの壁面に対し垂直でお願いします。
347346:04/07/29 14:34
地球の丸みは無視して下さい。
入力数、平均、最大値、最小値を求めるプログラムを作成せよという問題なのですが
条件としてメイン関数以外の関数を少なくともひと定義して作らなければいけません

http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1027870433&res=273
このプログラムをどこかに関数が入るように改変していただけませんか?
>>348
>>46-
>>148-
>>348
表示を関数にするのやめたんだね
解答に見覚えがある・・・(^^;

http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1064150088&res=190


ハハハ
352348:04/07/29 15:30
す、すいません
似たような課題があったので上から引っ張ってきたんですが
関数で書かれてるのもあったんですね、もっとよく探すべきでした、すいません
>>326
多分こんな式?

#include <stdio.h>
#include <math.h>

int main()
{
const double g=9.8;
double h,v;
double t;

printf("高さh(m) 初速v(km/h) > ");
scanf("%lf %lf",&h,&v);

t=sqrt(2*h/g);
printf("落下地点 : %f\n",v*1000*t);
printf("最終速度 : %f\n",g*t);
return 0;
}
>>353
最終速度は鉛直方向と水平方向で3平方取らないといけないYO!
空気抵抗ないってことは初速度そのままでいいの?
それなら
printf("最終速度 : %f\n",sqrt((g*t)*(g*t)+v*v));
スペースが消えるだろうから調整してくれ
#include <stdio.h>
#include <math.h>

int main(void)
{
double h, v, vv, t;
double g = 9.80665;// 標準重力加速度
printf("h[m]? >");
scanf("%lf", &h);
printf("v[km/h]? >");
scanf("%lf", &v);
vv = v / 3.6;// v[m/sec]に変換
t = sqrt(2.0 * h / g);
v = sqrt(g * g * t * t + vv * vv);
printf("落下地点 = %f[m]\n", vv * t);
printf("最終速度 = %f[m/sec]\n", v);
printf(" = %f[km/h]\n", v * 3.6);
return 0;
}
>>356
&nbsp; とか全角とかに置き換えれば消えない
全角空白文字を使うと、質問者がそのままコピペして
「コンパイルできません!」とか言われたりする罠
質問・宿題スレではお勧めできない
「  」「&nbsp; 」に置換すると良いね。
でもかちゅ〜しゃでレスポップアップしたときに醜くなる罠
360326:04/07/29 16:17
>>353
>>356
サンクス!!助かりました!
地球の丸みを無視してもコリオリの力は無視できない罠。
#東京程度の緯度で初速0でも東京タワー程度の高さで3cm位は東に流れるぞ。
自転も無視してください!
そんなの中学校じゃ習わないよ!!
ttp://up.nm78.com/data/up052248.zip

アルゴリズムの問題なのですがよろしくです。
長いのでzipでうpします。
365364:04/07/29 20:12
使用する言語はCです。
>>1のアップローダー使ってくれ。読む気がせん。
367364:04/07/29 20:28
>>366
分かりました。かなり長いかもしれませんがよろしくです
>>364
1.
ひとつは,辺の重みの値が 0 になるグラフがだめだよね.
もうひとつは何だろう?

2.
自分でコンパイルしてやって.

3.
プログラム上は配列に残ってるけど,アルゴリズム上は
なくなったノードだからでしょ.
>>364
素人なんで間違ってたらスマソ
1.
辺に重み0をつけられない。
ある点と自分自身との接続や、同じ二つの点の間の複数の接続を表現できない。

2.
自分で試せ。

3.
グラフに孤立点しかなかった場合にvisit_all_nodesは常にYESを返し、
これは期待した動作ではないから。
2. の意見は一致したな.
371368:04/07/29 20:40
>>369
それか,
1.
辺の重み0ができない.

2つのノード間の複数の辺を表現できない.

これだな.(自己接続はできるよ.)
372364:04/07/29 20:41
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1027870433

このスレの>>274-278に問題&ソースコードうpしました
373364:04/07/29 20:42
>>368-369
ありがとうございました!
>>372
関数内のコメント凄いね。逆に見辛くない?
>>374
仕様書を兼ねたコーディング規則を取る場合はあれぐらいやるよ
センセが書いたんだろ。
>なぜでしょう?
なんて煽る文句が入ってる。
>>372をGoogleのクロール対象に加えておいた:P
378デフォルトの名無しさん:04/07/29 21:37
平衡木B-Treeを用いたプログラムを作成せよ。
以下の仕様を満たすものであれば,その他の詳細は問わない。
1.英文テキストファイルから単語を抽出し,それをB-Treeに格納する。
2.B-Treeから,単語を辞書順に出力する。

C言語/C++言語,どちらでも良いそうです。
よろしくお願いします。
リトルエンディアンを入力し、ビッグエンディアンに変換して、出力せよ
その際、先頭の0を省略することを禁じ、演算は、1行で行うものとする
>>379
こうでいいよな?
int main()
{
unsigned short n;
scanf("%u", n);
printf(%0u, (n << 8) | (n >> 8));
return 0;
}

int main()
{
unsigned long n;
scanf("%lu", n);
printf(%0lu, (n << 24) | (n >> 8 << 16) | (n >> 16 << 8) | (n >> 24));
return 0;
}
>>331 >>338 の素数計算プログラムを評価してみた。
CPU: Pen4 2.4BGHz Mem:512MB gcc(g++)オプション: -O3

331:
 桁が二倍になるごとに計算時間は約3.6倍になるように見える。400万以下の素数で 221.167s
 かかることから予想終了時間は1020日位。よって24時間以内に終わらない。 

338:
 桁が二倍になるごとに計算時間は約2.2倍になる。ただし計算数が大きくなるほど倍率は
 下がっていくように見える。(1000万→2000万:2.34倍/2000万→4000万:2.25倍)

 1.6億以下の素数で 173.771s かかることから予想終了時間は 130分以下。
 まさに爆速!このプログラムなら24時間以内なんて楽勝っぽい。
爆速ってのは prime_sieve.c みたいなのを言うんだ
>>381
JavaScriptで書いたほうがはるかに速い
>380
それじゃだめじゃね?
#include <stdio.h>
int main()
{
unsigned int n;
scanf("%x", n);
printf("%0x", (n << 24) | (n >> 8 << 16) | (n >> 16 << 8) | (n >> 24));
return(0);
}
#include <stdio.h>
int main()
{
unsigned int n;
scanf("%x", &n);
printf("%0x", (n << 24) | ((n << 8)& 0x00FF0000) | ((n >> 8) & 0x0000FF00) | (n >> 24));
return(0);
}

douda?
>>356
>v = sqrt(g * g * t * t + vv * vv);
>printf("落下地点 = %f[m]\n", vv * t);
>printf("最終速度 = %f[m/sec]\n", v);

v壊しててもだれもつっこまないんだな
>>379
こういうときこそ,C++。

#include <iostream>
#include <iomanip>

template <class Type> Type traverse(Type in){
int i; char *p,buf[100]; Type out=in;
for(i=0,p=(char*)&out;i<sizeof(Type)/2;++i) p[sizeof(Type)-i-1]^=p[i]^=p[sizeof(Type)-1-i]^=p[i];
std::cout<<"0x"<<std::setw(2*sizeof(Type))<<std::setbase(16)<<std::setfill('0')<<in;
std::cout<<" -> ";
std::cout<<"0x"<<std::setw(2*sizeof(Type))<<std::setbase(16)<<std::setfill('0')<<out;
std::cout<<std::endl;
return out;
}
int main(){
int i=0x01234567;
short s=0x0123;
long l=0x01234567;
long long ll=0x0123456789abcdefll;
traverse(i);
traverse(s);
traverse(l);
traverse(ll);
return 0;
}
388356:04/07/29 23:42
>>386
元々意図してますが、何か?
これ以降、元の形の v 使いませんが、何か?
何かナニカうるせぇハゲ
>>388
落下地点は?
ハゲハゲうるせぇぼけ
非常に柔軟性の求められる課題で、全く手がつかない状態です。。。

(課題)
今手元に、「ある学校の生徒の名前と連絡先の入ったファイルA」と
「その生徒たちのテストの結果および平均点と評価、全体での平均点が入っているファイルB」があるとする。

@ファイルBで評価がD以下だった生徒の名前を新たなファイルCに書き出す。
Aその生徒たちの連絡先をファイルAから探し出しファイルCに追加する。
Bその生徒たちの名前と連絡先を名前順に並び替える。

結果として、ファイルCに「評価がD以下だった生徒」の「名前と連絡先」が「名前順」にソートされている。


このようなプログラムを作れとのことです。
制限とかはなかったんで、ぜひぜひ自由にプログラム組んでいただけると助かります。
C言語です。どうかよろしくお願いします。
393387:04/07/29 23:52
>>379
C言語版。
#include <stdio.h>
#include <string.h>
void traverse(void *in, int size){
char *p=malloc(size);
memcpy(p,in,size);
for(i=0;i<size/2;++i) p[size-i-1]^=p[i]^=p[size-i-1]^=p[i]; //演算の一行
printf("0x");
for(i=0;i<size;++i) printf("%02x",((char*)in)[i]);
printf("-> 0x");
for(i=0;i<size;++i) printf("%02x",p[i]);
printf("\n");
free(p);
}
int main(){
int i=0x01234567;
short s=0x0123;
long l=0x01234567;
long long ll=0x0123456789abcdefll;
traverse(&i,sizeof(i));
traverse(&s,sizeof(s));
traverse(&l,sizeof(l));
traverse(&ll,sizeof(ll));
return 0;
}
>>392
1や2でファイルCに書き出すと,すげぇ面倒くさいんだけど?
最後,3で一度だけ書き出すんじゃ駄目なの?
>>393
> for(i=0;i<size/2;++i) p[size-i-1]^=p[i]^=p[size-i-1]^=p[i]; //演算の一行
未定義
>>394
生徒が100万人くらいいてメモリだけでやるには手に負えないんじゃないか?
どんな学校ですか
>>396
それなら,ファイルDを用意しないと,上書きしちゃう。
399392:04/07/30 00:16
>>394
あっ、書き方が悪かったかもしれません。
最後に一度だけ書き出していただいて、全然問題ないです!

助かります、どうぞよろしくお願いいたします。
>>399
ファイルの形式は決まってないのか?
それも含めて制限なしで自由ってことなのかもしれないけど、面倒くさいんだよ、そういうの。
>>395
どの辺りが?
>>401
p[size-i-1]^=p[i]^=p[size-i-1]^=p[i] の辺り
>>399 に宿題。
ファイルAとファイルBを作って,>>1にうp。
あpろだ使うまでもなくサンプルを2、3行ここに貼ればいいだけじゃないか
↑ Not Found.
宿題まだー?ちんちん
> 毎秒1億桁のπを求め、表示するプログラムを作成せよ。
> (※使用するパソコンの性能は現在、一般に普及している最新型相当のものとする)
何ですが………
どう考えてもできません。どうすればいいでしょうか……。
毎秒一億桁はムリだろー

普通のπなら FFT でガウスルジャンドルでもやっとけ
407 名前:デフォルトの名無しさん[sage 今度こそ不可能なネタ投下!]
>>407
あからさまに不可能な宿題は見ていて面白くないよ。
ギリギリ現実可能か?と思わせる宿題出される様にしてよ。
つか、しつこい上にツマラナイ
またちんちんしちゃうよー
CPU: 1GHz
Mem: 1GB
のパソコンにおいて
一時間かけて合成数n(=p*q)を素因数分解するとき
nが何ビットまで素因数分解できるか
(p,qのビット数は等しいものとする)
情報足りなくないか
何ビットまでって…
足りない頭をひねっても愚問しか出てこないよ。いい加減諦めろ。
ちょー簡単なアルゴリズムの問題でも出そうか。

N個の数、1,2,3,...,nの順列を表示するプログラムを、N=10として作れ。
なお表示する順は問わない。
next_permutation
と元も子もないことを言ってみるテスツ
nが1024ビットの数だったら一時間で素因数分解できないけど
nが40ビットだったら楽勝でできるわけで、
どこが限界か知りたいの
>>417
そういう探せば一瞬で見つかるようなのじゃなくて、もうちょっとひねった問題にしてくれ。
>>417
ここはあくまで宿題スレだから問題出す時は下手に出ろ
while, do〜while文を用いた反復文プログラム

次のような単純な暗号を作成しなさい。
@暗号化したい数字を入力(正の整数)[データ1]
A暗号用の鍵(正の整数3桁)を入力[暗号鍵]
B暗号鍵の数字(の約数)から素数を全て求める
C1番目に大きい素数と2番目に大きい素数を選択[鍵1,鍵2]
(1番目と2番目が無い場合,暗号鍵の数字に1を足しBへ)
Dデータ1に鍵1の数字を掛ける[データ2]
E最後に,データ2を鍵2で割り,その余りの2乗を暗号とする

Aまでは出来たのですが、B以降が分かりません。
どなたか解いてくださいませんでしょうか、お願いします
すいません↑はC言語でお願いします
ひとついいですかそれは可逆ですか
暗号を作るだけで、暗号から元に戻したりはしません
ウイルス
Nothing like that. Those games were console applications written with
C++ on my own burden. Just try to right-click, save, then play it!
fuck off sunnovabitch
I seriously made it for fun and only pleasure is just to have somebody
play my hand-made game. That's the sense, well, I would never erge to
play those it's all up to u folks..
えいごわかりません
hand-made game? huh, bullshit.i mean, fuck it.
英語読めね('A`)
Why u so cursing around? Isn't it on far plot so far for you?
I'm really not sneaking.... well, i'm away...
どうでもいいけどスレ違い
go! go! away! hope never to see ya again
えーと、これは自演?コピペ?
C言語で、線形リストを用いて,過去に素数と分かった数を保存し,指定された数(N) 以下の素数を求めるプログラムを
作成してください.素数かどうかを判定する際には線形リストに保存されている素数のみ利用してください。.

こんな問題が出されたんですけどよくわかりません。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1027870433&res=279
こんな感じじゃいけないんでしょうか?
>>437
テケトーに煽ってみたが自演じゃあない
>>438
去年同じ問題をあったな。
C/C++の宿題やらせてください。7代目。
http://pc5.2ch.net/test/read.cgi/tech/1053963794/453+509
441440:04/07/30 15:06
あ、ふるいじゃないのか。なら違った。
>>440

ありがとうございました〜。
素数判定はどんなことやってもいいので、
その回答例が正しいようです。

お手数をおかけしてすみませんでした。
>>438
>>331に手を加えれば良いんじゃね?
>>443

わざわざ示していただきありがとうございました。

でも、自己参照的データ構造への書き直し方がよくわからないので、
440さんに示していただいたプログラムに手を加えて見ようと思います。

過去レスもよく読まずに質問してしまい申し訳ありませんでした。
このスレは >>1 の暇を潰してあげるスレなの?
じゃ
ttp://www.logos.ic.i.u-tokyo.ac.jp/acm-icpc/problems.html
C か Java だそうです.
4461:04/07/30 16:11
>>445
既に紫(visited)。問題と入出力例は全部
http://www.ehime-u.ac.jp/ICPC/problems/domestic/d2004/
にある。プログラム例は無いがな。
すいませんが場違いなのはわかりますが助けてください。
JPEG処理に使われる1次元8点DVTを実現するプログラムを
SH3-DSPのアセンブリ言語を用いてさくせいせよ。
変換行列の係数は計算済みとしてよい
ソースデータはメインメモリにおかれているとする
結果はメインメモリに格納する
448445:04/07/30 16:18
>>446
おっと,そうでしたか.失礼しました.
>>447
ここはC,C++の宿題スレです。アセンブラはCとかC++じゃないです。
流れてしまった>>422を誰かお願いします。・゚・(ノД`)・゚・。
とりあえずその(2)までのPrg.を>>1にうpっとけ。
>>402
それって未定義なの?
右から順次代入していくんじゃないの?
=じゃなく^=なのだが
>>452さん有難うございましたー
456456な人:04/07/30 18:28
C言語の課題でこんな問題が出されました。

宝くじで1億円当たったあなたは,それを増やすために,
T銀行に2年間預けることにしました.利率は,0.005%(毎月複利)です
2年間(24ヶ月)の残高の推移を,1ヶ月毎にfor文とprintf文を用いて出力しなさい。

さっぱり分からないので誰か代わりに答えを出してください(´Д⊂
>>454
= も ^= も 代入演算子です
>>456
#include <stdio.h>
main()
{
double money = 100000000;
int i;
printf("元金 %d円\n", (unsigned long)money);
for(i=0 ; i < 24; i++){
money *= 1.005;
printf("%d ヵ月後 %d円\n",i+1 ,(unsigned long)money);
}
}
>>457
^= は = と違って左辺値も一度評価される
460458:04/07/30 18:38
>>456
表示修正

#include <stdio.h>
main()
{
double money = 100000000;
int i;
printf("元金 %.f円\n", money);
for(i=0 ; i < 24; i++){
money *= 1.005;
printf("%d ヵ月後 %.f円\n",i+1 ,money);
}
}
課題でくらい 10% くらいにしてくれよ
463456な人:04/07/30 18:57
ありがとー^^
>>458
表示だけじゃなくて、計算過程としても小数以下は切り捨てるんじゃない?
double money

unsigned long money
あと、0.005%複利は * 1.00005 。
I君は自宅から学校まで電車で通っている。
その片道運賃は190円である。
syyyy年smm月sdd日からeyyyy年emm月edd日まで
学校へ休まず通う(自宅→学校→自宅)とした場合、
運賃はいくらになるか。但し、
通う総日数部分(閏年は考えない)および、運賃計算部分は関数化すること。

という宿題が出ました。よろしくですm(_ _)m
っと、言語はCでよろしくです
>>465
土曜日は学校休み、休まない?
>>465
春・夏・冬休みも学校に行くの?
…現実なら定期を買って行くんだろうけどなぁ。
まだ学校休みじゃないんですよー
課題もネット経由で提出しなくちゃいけないのです;;
ひぃ、ごめんなさい現実と勘違いしてました(照
土日は休みで春・夏・冬休みは無いです・・・

ほんとすいません><
閏年は考えないのに土日を考えるっていったいどうするつもりなんだろう?
下がり杉なので age ときますね.
ageないで良い
474392:04/07/30 22:32
こんなものでいいかわかりませんが、ファイルAとB一応作ってみたんでうpしました。

http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1091194059

本当に遅れてすみませんでした・・・
475デフォルトの名無しさん:04/07/31 00:02
age
1年365日の内、土日何日あるのかわからねミ,,゚Д゚彡
365/7*2=104日くらい
478デフォルトの名無しさん:04/07/31 04:52
Cでコンパイルした時に
77行目:out of memory
というエラーが出るんだけどどういう意味ですか
out of memoryです
ヘッダの二重インクルードだろ?
>>465
多分これでいいかな。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1027870433&res=280&fi=no

閏年を無視すると、曜日計算が出来ませんので、開始日の曜日も入力するようにしました。
あと、入力はscanfなんで、指示通りのフォーマットで入れないと暴走します。
483482:04/07/31 06:15
妙な誤字があたよ。

× >* sw は、開始日の曜日を表す数値。0-6で、小さい順に、月日水目金土日
○ >* sw は、開始日の曜日を表す数値。0-6で、小さい順に、月火水木金土日


あと、年月日の整合性チェックしていないので、変な値入れると動作保障できません。
特に「月」は、配列のインデクスに使ってるので、1〜12の範囲外では不正メモリアクセスが発生する。
484482:04/07/31 06:30
そういえば、国民の休日っつーもんがあるな。
>465 の提示情報だけだと、祝日も考慮しなきゃならなそうだ。
> 祝日も考慮
ハッピーマンデー キタ━(゚∀゚)━( ゚∀)━(  ゚)━(  )━(゚  )━(∀゚ )━(゚∀゚)━!!!!
> 閏年を無視すると、曜日計算が出来ませんので、開始日の曜日も入力するようにしました。
こんなん感じでええんちゃう?
テストしてないから間違えてるかもしれないけど・・・・

int montable[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int y, m, d, ms, dow;

/*
y = 2004;
m = 2;
d = 7
*/
ms = 0;
for(i = 0; i < m-1; i++) ms += montable[i];
dow = ((y - 1) * 365 + ms + (d - 1)) % 7;
教授によると休みは土日のみらしいです・・・
死ぬぞヽ(`Д´)ノ

>>482さんのソースでできました。
有難うございましたー
C言語実習の課題で
5 -1 7 -7 9 25 -9 5 14 9の配列を
シェルソートで並べ替えた結果と交換回数、比較回数を表示せよ。

なんですけど、交換回数、比較回数の表示ができません。
どうやればいいのか教えてもらえないでしょうか。
コード晒せや
>>491=488

手っ取り早い方法。関数外でstatic unsigned KoukanKaisuu, HikakuKaisuu;と定義しておき、
比較のif文の前で++HikakuKaisu;、交換の直前で++KoukanKaisuu;とカウントする。
ソート後、それらを表示すればよい。
私ゃ頭が痛いよ。
こんな奴がシェルソート書いてることが不自然
ネタ決定
クイックソートって萌えるよね
すいません、天然でした・・・
グローバル関数にしたら作動しました
どうもお騒がせしました
そして有難うございました
498c言語入門ふつかめ:04/07/31 15:35
正の整数を0が入力されるまで配列に順番に格納し、次にある整数を与えると何番目に
入力された整数であるのかを表示する(0を与えると終了)プログラムを作りたいんですがうまくいきません。
ご指摘おねがいします。あと、MAXのマクロ関数定義を変更して任意の正の整数を代入したいです。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1027870433&res=284
>>498
1. 細切れにしなくてもまとめて1つにできる。
printf("数字(%d)を代入してください", n);

2.
scanf("%d",&input);
if(input==0) break;
data[i]=input;
これはinputを使わずにこれじゃダメなのか?
scanf("%d",&data[n]);
if(input==0) break;

3. 何番目にあるのか探すのだから、data[0]〜data["0が入っているとこまで"]をforで探し回らないと探したことにならない。
for (;;) {
    printf("見つけたい数字を入力してください ");
    scanf("%d",&j);
    if (j == 0) {
        printf("それではプログラムを終了します");
        break;
    }
    for (n = 0;; i++) {
        if (data[n] == j) {
          printf("%dは%d番目にみつかりました", j, n);
          break;
        }
        else if (data[n] == 0) {
          printf("%dは見つかりませんでした", j);
          break;
        }
    }
}
501c言語入門ふつかめ:04/07/31 16:23
>>499
なるほど、1番目のはどうにかしたらできると思ってたんですが3番目のは全く
思いつかなかった_| ̄|○
ありがとうございます!
502500:04/07/31 16:35
あ、ファイル出力忘れてた。最後にコレ追加しといて。

// Record set. - C.txt
strcpy(caFile, ".\\C.txt");
if ((pfA = fopen(caFile, "w")) == NULL) {
printf("File not find - %s\n", caFile);
return 1;
}
lIndex[ID_SORT] = 0;
while (lIndex[ID_SORT] < dbQuery.lCount) {
fprintf(pfA, "%s %s\n", praSort[lIndex[ID_SORT]]->caName, praSort[lIndex[ID_SORT]]->caTel);
lIndex[ID_SORT]++;
}
fclose(pfA);
>>499
えっと・・・、ツッコミ待ち?
504c言語入門ふつかめ:04/07/31 16:42
1番目と2番目のはできましたが、
肝心の見つけたい数字を入力するとこが全く正常に動きませんでした・・_| ̄|○
>>504
for (n = 0;; i++) {

for (n = 0;; n++) {
にしてみ
506c言語入門ふつかめ:04/07/31 17:20
iをnにしてみましたがかわらず・・
実行したときに、0以外の整数を入力すると常に見つかりませんが表示され、
なぜか0を代入すると0は〜番目に見つかりましたと表示され、プログラムも
終了されません。
c 34: syntax error near 'end of file'このエラーを無視してるからでしょうか_| ̄|○
507c言語入門ふつかめ:04/07/31 17:38
あ、エラーがあるからコンパイルできてないから実行しても結果がかわらないのかな
>>499は間違いが多いから、この考え方を参考にして自分で書いてみるべし。
509c言語入門ふつかめ:04/07/31 17:59
>>508
3番目の考え方を取り入れて自分なりに書いてみました。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1027870433&res=285

c 22: syntax error near 'else'
c 32: syntax error near 'end of file'
あとはこのエラーを直すことができればちゃんと動くような気がするんですがどこが間違ってるんでしょうか
>>509
構文エラーの意味を考えれ。

>if(j==0) break; {
>printf("それではプログラムを終了します");
>}

変だろ?
>>509
わかったわかった

#include<stdio.h>
#define MAX 10000
#define else

↑これを書けばコンパイルできるよ
初心者にやさしくない人がいますね。
514c言語入門ふつかめ:04/07/31 18:35
>>510,511
ありがとうございます。参考にさせてもらいました。
まだ若干の問題点はありますがもうちょっと改良すればできそうです。
>>392 >>500
ポインタ使って読みやすく改造。
簡単かどうかは???
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1091194059&res=5&fi=no
見やすくはなった
517482:04/07/31 21:25
余り日数の土日チェックが不完全だったので、一応完全版書いておきます。
初日が土日の場合に、計算が合わないことがあります。
もっとも、初日が休日というのはありえない設定かもしれませんが。
int get_weekdays(int sy, int sm, int sd, int sw, int ey, int em, int ed){
  int i, s, e, all_days, holidays, mod;
  s = YEAR_OF_DAY[sm - 1] + sd;
  e = YEAR_OF_DAY[em - 1] + ed;
  all_days = ((ey - sy) * 365 + e) -  s + 1;
  holidays = (all_days / 7) * 2;
  mod = all_days % 7;
  if(mod > 0){       
    switch(sw){
    case 5:
      if(mod == 1) holidays += 1;
      else holidays += 2;
      break;
    case 6:
      if(mod < 6) holidays += 1;
      else holidays += 2;
      break;
    default:
      if(sw < 0 || sw > 6) break;
      if(sw + mod == 6) holidays += 1;
      else if(sw + mod >= 7) holidays += 2;
    }
  }
  return all_days - holidays;
}
518482:04/07/31 21:30
>初日が土日の場合に、計算が合わないことがあります。

誤解を招く言い回しかいちゃったので訂正。正しくは

>初日が土日の場合に、計算が合わないことが(最初のプロ具レムでは)ありました。

です。>517 に差し替えれば初日が土日でもちゃんと計算されます。

あと、
MONTH_OF_DAY, YEAR_OF_DAY

DAY_OF_MONTH , DAY_OF_YEAR
が英語的にただしいっぽ。
配列を戻り値にできますか?
>>519
関数は配列を戻り値にはできないよ。ポインタなら戻り値にできるけど。
char fanc01(void)[64]; // これはダメ
char *fanc02(void);; // これはOK
char (*fanc03(void))[64];; // これもOKだけど、戻り値は配列のポインタなので間違えない事。

http://pc5.2ch.net/test/read.cgi/tech/1086373839/973 辺りが参考になるかと。
522521:04/07/31 23:27
セミコロン多かったorz
523デフォルトの名無しさん:04/07/31 23:41
C++で式を入れたら答えが出力されるという計算機のプログラム
6+2×3と入力したら12とでるやつを作りたいのですが・・・

自分にはできないのでできるかたお願いしますm(__)m


524デフォルトの名無しさん:04/07/31 23:44
522です
C++じゃなくてCです。すいません><
m(__)m><
入力は2バイト文字?それとも1バイト文字でも良いの?
>>523
if (strcmp(szInput,"6+2×3") == 0){
  printf("12");
}
>>527
素晴らしすぎて射精した
529392:04/08/01 00:33
>>500>>515

コンパイルして実行してみたら、できました!
全く手がつけられない状態でしたので、すごく助かりました。
本当に、どうもありがとうございました。
>>523
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1091194059&res=6
間違って変なところに張っちまった。
1バイト文字限定、文法判定なし、カッコ未対応、小数点判定付き
531デフォルトの名無しさん:04/08/01 01:13
532530:04/08/01 01:17
533c言語入門ふつかめ:04/08/01 01:42
昼間書き込んでた>>498ですが、いろいろ改良して自分のプログラムを見る限り間違いがみあたらないんですが
どうしてもうまくいきません_| ̄|○
1番目に入力した数字は1番目に見つけました、ときちんと動いてくれるのに
2番目以降に入力した数字は見つかりません、になってしまいます
ご指摘おねがいします
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1027870433&res=287
ブレイク!ブレイク!

     ( ゚∀゚)    ・∴.
     (ヽ□=□━━━
      > >     .∵’
scanf使っているから
なんで初心者ってscanf使っちゃうんだろうね?
537c言語入門ふつかめ:04/08/01 02:22
scanfしか知らないからです_| ̄|○
538デフォルトの名無しさん:04/08/01 02:26
>>537
scanfの問題では無い。問題も無い。
検索のforループ、見つかろうが見つからまいが、1回目でbreakしてるのが原因。
1つ目に入れた数なら何回目でも必ず見つかる。
>>537
あと、問題は他にもある。
int data[MAX]の中身は不定だ。main()の外に置けば0で初期化される。
540c言語入門ふつかめ:04/08/01 02:31
??27行目あたりのbreakでしょうか?
消して実行してみたら余計おかしくなってしまいました
541デフォルトの名無しさん:04/08/01 02:35
>>540
少しは頭を使え。
つりっぽ
もし (data[i]==0) なら「見つからなかった」
544c言語入門ふつかめ:04/08/01 03:18
だめだ。。
これ以上この問題だけに時間かけれないので、
具体的にどこをどうすればいいか教えてください
>>544
C言語の習得を諦める
546c言語入門ふつかめ:04/08/01 03:32
>>545
提出しないとダメなので。c言語あと1問、レポート、テスト勉強(;´Д`)
>>544
>if(j==data[i]){
>printf("%dは%d番目に見つかりました\n",j,i+1);
>break;
>}
>else{
>printf("%dは見つかりませんでした\n",j);
>break;
>}
これを、
if(data[i]==0){
printf("%dは見つかりませんでした\n",j);
break;
}
if(j==data[i]){
printf("%dは%d番目に見つかりました\n",j,i+1);
break;
}
にすれば大丈夫、とみんなは言っている。
548c言語入門ふつかめ:04/08/01 03:54
>>547
やっとできました・・・
マジでありがとう。
夏休みにc言語の学習に励みます
549デフォルトの名無しさん:04/08/01 05:15
>527
個性的でですね

>530さん
ありがとうございます(^▽^) 助かりました(つД`)
>>548
お前にゃムリ
まぁそう言うなって。
なんちゃってプログラマが増えるのは良い事だ。
カレンダー表示させたいのですが、表示部分のプログラムがうまくいきません。
とりあえず、月の開始曜日は0が日曜日・・・6が土曜日になるようにしてます。
土曜日になったら改行するようにしたいんですが、表示がおかしくなります。
アドバイスお願いします。
ソース張れや糞ボケが
タイピングソフトもどきを作っているのですが、
一定時間内に指定された文字を入力させるにはどうすればいいでしょうか。
標準C++では出来ません
>>554
「時間内に指定された文字を入力しろ」って出力したら素直な奴なら従うよ
>>552
#include <stdio.h>

// week : 曜日、 last:月の最終日
void print_calendar(int week, int last){
  int i;
  puts(" 日 月 火 水 木 金 土");
  for(i = 0; i < week; i++) printf("   ");
  for(i = 0; i < last; i++){
    printf(" %2d", i + 1);
    if((i + week) % 7 == 6) putchar('\n');
  }
  putchar('\n');
}

int main(){
  print_calendar(1, 31);
  print_calendar(5, 28);
  print_calendar(0, 30);
  print_calendar(6, 29);
  return 0;
}
>>557
ありがとうございました。
あるC言語で書かれたプログラムXがあり、これはprintf文で画面に"20"と表示する。
このプログラムXのソースに'/'(スラッシュ)を1文字だけ加えることで
画面に"1"と表示するようになるプログラムXのソースを書きなさい。
>>559
#include <stdio.h>
int main(void)
{
return printf("%d", 1 * 20 /**/);
}
>>559
#include <stdio.h>
int main(void) {
int i = 20;
i = 20;
printf("%d\n",i);
return 0;
}
562561:04/08/01 16:06
#include <stdio.h>
int main() {
printf("%d", 2020 - 1 ? 20 : 1);
return 0;
}
C99対応コンパイラ必須

#include <stdio.h>

int main()
{
printf("%d", -20 / 20
+ 21);
return 0;
}

入れ方
-20 / 20
-20 // 20
#include <stdio.h>
int main(void)
{
/*
printf("20");
/*/
printf("1");
//*/
return 0;
}
1 + 19
1 + 1/9
566564:04/08/01 16:24
あ、逆じゃん。orz
21 - 1
2/1 - 1
スレタイを拙者にしてくれとか言ってたやつ、まったく書き込まないな
書き込もうにも、知識がありませんから!!残念!!
C言語でテキストファイルから読み込み、読み込んだ内容を全て一行で
出力するプログラムを作りたいのですが、fgetc で読み込んだ後、
出力用に配列に入れようと思ったらうまく行きません。
初歩的で住みませんが、助言して頂けないでしょうか。
別に配列にいれなくても改行文字だけ飛ばしてコピーすれば良いんじゃない?
「もし、enterが押されたら」という分岐はどうすればいいんでしょうか。
573570:04/08/01 17:35
ちなみに今は以下の感じで、読んだ内容を配列に入れて p に渡して書き込もうと思ってます。

#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char str[];
FILE *fp0;
FILE *fp1;
char *p;
int i;
(fopen省略 引数にfp1 fp2 を指定)
for(;;) {
i = fgetc(fp1);
if(i == EOF) break;
}
while(*p){
if(fputc(*p, fp0)==EOF){
printf("ファイル書き込みエラー\n");
exit(1);
}
p++;
}
fclose(fp0);
fclose(fp1);
return 0;
}
改行文字すら知らないアホが居るスレがここですか?
>>572
状況を詳しく。
>>573
お前は辞めた方がいい
突っ込みどころが多すぎる
>>571さん即レスありがとうございます。
そんな手があるんですね(^^;
ありがとうございます、方法について調べて来ます!

ただ、それとは別に配列を使用したいんですけど、難しくなるんでしょうか?
良かったらこちらについてもアドバイス頂けないでしょうか。
>>573
#include <stdio.h>
int main(void)
{
FILE *in = fopen("in", "r");
FILE *out = fopen("out", "w");
int i;
while((i = fgetc(in) != EOF) if(i != '\n') fputc(out, i);
return 0;
}
>>576
独習なら始めはそんなもんだ。
>>575
ss[i]=getch();としてenterを押すまで一文字ずつ取り込んでいきたいんですが
enterの判別にif(ss[i]=='\n)としてもどうもうまくいかないので・・・'
>>580
'\r'と比較してみてはどうだろう。
'\n'じゃなくて'\r'でやれ。
>>581
リロードしてなかった・・・スマソ
すみません、独習Cっていう本みてやってて、例文をいじってるだけです・・・。
このスレッドの主体性をうまく理解してないで書き込んで失礼しました。

>>578さんありがとうございます。
簡潔ですばらしいコードですね、ありがたく参考にさせて頂きます。
それでは出直してきます。。。
>>584
「主体性」を辞書で引く事をお勧めする。
586デフォルトの名無しさん:04/08/01 17:57
#include<stdio.h>
#define N 3
#define M 4
int n=3;
double a[N][M]={{33.0,16.0,72.0,-359.0},{-24.0,-10.0,-57.0,281.0},
{-8.0,-4.0,-17.0,85.0}};
void print_matrix(double x[][M],int n,int m)
{
int i,j;
for(i=0;i<n;i++){
for(j=0;j<m;j++)
printf("%15.8lf",x[i][j]);
printf("\n");
}
printf("\n");
}
void gauss(double x[][M],int n)
{
int i,j,k,l;
double p;
for(k=0;k<n;k++){
p=a[k][k];
for(j=k;j<=n;j++)
a[k][j] /= p;
a[k][k]=1.0;
for(i=k+1;i<n;i++)
for(j=k;j<=n;j++)
a[i][j] -= a[k][j]*a[i][k];
}
??
}
>>581-582
ありがとうごさいます。無事できました。
>>585さん
以下 goo辞書より
=================================================================
しゅたい-せい 0 【主体性】

自分の意志・判断によって、みずから責任をもって行動する態度のあること。
「―をもって行動する」
=================================================================

逝っていますわ・・・∧||∧
>>559
なんかマッチ棒パズルみたいだな。
590デフォルトの名無しさん:04/08/01 17:59

void main()
{
print_matrix(a,3,4);
gauss(a,3);
print_matrix(a,3,4);
}
の、??に処理を追加して、第n+1列に解が求めるがうすのしょうきょ法
のプログラムを完成させよ。 をお願いします。
591586:04/08/01 18:00
586=590です
592586:04/08/01 18:36
拡大係数行列の第n+1列です。
593 :04/08/01 18:55
c++でソースの上半分と下半分をmain.cpp,main2.cpp
のように分割してコンパイルするときに結合する
方法はありますか?
main.cppの一番下で
#include "main2.cpp"
#if 0
>>593-594
#endif
int i[10]の中にそれぞれランダムな数字が入ってるとして、
できるだけ短いコードで数字の小さい順に並べ替える方法を教えて下さい。
597378:04/08/01 20:06
すいません。
どなたか>>378をやっていただけないでしょうか?
よろしくお願いします。
>>596
for(int m=0;m<10;m++)for(int j=0;j<10;j++)if(i[m]<i[j]){i[m]^=i[j];i[j]^=i[m];i[m]^=i[j]}
90字
>596
std::sort(i,i+10);
18字
600599:04/08/01 20:12
おっと、
#include<algorithm>
の分を入れ忘れた。
>598
外側のforをfor(int j,m=0;m<10;m++)にすれば内側でint が要らないのでちょっと小さく出来る。
それと、;が}のまえ抜けてる。
>>597
B-Tree 書くのマンドクセ。
そんなのネット上で探せば幾らでも転がっているだろうに・・・
603596:04/08/01 20:22
>>598
;が抜けてますができました。有難うございます。
>>599
すいません。sortは何をincludeすれば使えますか?
604596:04/08/01 20:22
>>600
あ、なるほど、どうもです。
cでprintf("%8d",hoge);
ってやると値の入らない場所には空白がはいりますよね?
その空白部分に0を表示させたいんですがなにか書き方ってあるんですか?
%08d
宿題まだないでごじゃるか…
拙者刀を磨いてまっているでごじゃる…
569殿はどうやら深くを知りすぎのようじゃ…
というか拙者自分の宿題で四苦八苦してますからっ切腹ぅ!


Cの宿題なんですが、
文字列nPtrの先頭部分をdouble型に変換する関数double atof(const char *nPtr),
文字列nPtrの先頭部分をint型に変換する関数int atoi(const char *nPtr),
文字列nPtrの先頭部分をdouble型に変換する関数double strtod(const char *nPtr, char **endPtr)

と同様の機能の関数を作ってください。できればなるべくシンプルなのでお願いします。
strtod(atof) は宿題の範囲を超えてると思うんだが
>>610
sscanfあり?
613デフォルトの名無しさん:04/08/02 02:56
@n元n変数連立1次方程式の拡大係数行列に対し、掃き出し法を適用する関数
 sweep_out()を定義せよ。
Agaussf()の後半に処理を追加することにより、拡大行列の第n+1列に連立1次方程式の解
 が求めるガウスの消去法のプログラムを完成させよ。

C言語でお願いします。
拡大係数行列の保持の仕方とか指定されてないの?
>>613
の丸1
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1064150088&res=195

丸2は不可能だな。エスパーでも探してくれ。
616378:04/08/02 03:43
>>378をお願いします…
そのB-treeの実装ってのはHDDに格納するとか条件が
付いてるわけ?それともメモリ?(←意味ねぇよなぁ)
618378:04/08/02 04:08
メモリ上の作業で良いと思いますが
なぜそれだと意味がないのでしょう?
>>378のとおり,そんな指定はありませんでした。
>>378
思いっきりここにソースが公開されているようだが。
ttp://cis.stvincent.edu/carlsond/swdesign/btree/btree.html
>>618
B-tree(正確にはその派生したもの)はよくFileSystemに使うからだよ。
621デフォルトの名無しさん:04/08/02 04:18
昨日から悩んでもうすぐ朝です(>_<)。
助けてください。

まずクラスAがあって、
class A
{
public:
   A(int n);
};

クラスAをメンバとするクラスBがあります。
class B
{
private:
   A array;

public:
   B(int n);
};

BのコンストラクターでAを初期化します。
B::B(int n):array(n){}

これはOKなのですが、、、
622デフォルトの名無しさん:04/08/02 04:19
クラスBがクラスAの配列をメンバに持つとき、
class B
{
private:
   A array[2];

public:
   B(int n);
};

BのコンストラクターでAを初期化できません<m(__)m>
以下はコンパイラーエラーが出ます。
B::B(int n):array[0](n),array[1](n){}
B::B(int n):array(A(n),A(n)){}

助けてください(~o~)
配列を初期化リストで初期化することは出来ません。
つまり、constオブジェクトの配列はキャストでもしない限りメンバに持つべきではありません。
624デフォルトの名無しさん:04/08/02 04:31
↑(~o~)(~o~)(~o~)
できないのですか、、、、、
やはりそろそろC#に移行します。

レスありがとうございます<m(__)m>
初期化リストじゃなくて、コンストラクタ本体で初期化すりゃいいだろ。
> つまり、constオブジェクトの配列はキャストでもしない限りメンバに持つべきではありません。
constならstaticにすりゃいいだろ。
M$厨の自作自演ネタじゃないのか?
他のスレにも同じ事書いてるみたいだし
それにしても無知無能だな
もう少し勉強しろよって感じ
628デフォルトの名無しさん:04/08/02 07:18
超初心者です 僕は今こんなプログラムでつまずいてます
#include<stdio.h>
main()
{
int a,x,y;
x=y=0;
while((a=getchar()) !=EOF){
if(a=='\n')
x++;
y++;
}
printf("%d 行 , %d 字数.\n",x,y);
}
というプログラミングでつまずいてます 何故このプログラムで字数が表示されるのか意味不明です
if(a=='\n')x++;y++;という部分が改行コード認識する度に行がカウントされるのは分かるんですけど
どこで字数が確認出きるんですか 教えて下さいお願いします
>>628
そのプログラムは
#include<stdio.h>
main()
{
int a,x,y;
x=y=0;
while((a=getchar()) !=EOF){
if(a=='\n')x++;
y++;
}
printf("%d 行 , %d 字数.\n",x,y);
}
こう書くべきだね。

while((a=getchar()) !=EOF){
は一文字読み込んでそれを a に格納する。と、
その文字が終了文字でなければループを続ける

if(a=='\n')x++;
a が改行コードだったら x の値を 1 増やす
ここで行数のカウントがなされているのは正しいよ。

y++;
この文は前の if 文のスコープの範囲外ですから。
この文は無条件で 1 増やす。
で、この文は while((a=getchar())!=EOF) の中にあるので、
文字数分呼び出されるので、文字数が確認できます。

これで大丈夫かな?
630デフォルトの名無しさん:04/08/02 08:02
>629さん 理解する事が出来ました。ありがとうございました(゜ー゜)(。_。)ぺこり
>>629
解説ありがとうございます。
ところで、
終了文字の文字コードは何ですか?
終了文字そのものを読み込みたいときはどうすればよいですか?
終了文字なんてものない。
ファイルの終端に達したら、getchar()はEOFという文字コードではない値を返すが。
>>632
あら先を越されちゃいましたね。

>>631
ちょっと難しいかもしれないけど
終了文字の文字コードは存在しません。
文字コードは char 型 1 byte で 0 - 255 までの値だけど
EOF は -1 で char 型が表せる値の範囲外にあります。

そもそも
int getchar(void)
とあるように、getchar 等の char 型を読み込む関数は
EOF も返せるように int 型の返値を持ちます。

だから、
char a;
a=getchar();
だと終了文字を読み込めませんが、
int a;
a=getchar();
だと終了文字を読み込めます。そしてその値は EOF (-1) という形で格納されます。

これで大丈夫?
>>629
while((a=getchar()) !=EOF){
は一文字読み込んでそれを a に格納する。と、
その文字が終了文字でなければループを続ける
終了文字なんてものない。
>>633
痛すぎ
>>635
DOS系では^z(0x1a、SUB)、UNIX系では^d(0x04、EOT)が終了文字として扱われる。
昔のファイルには^Zが入ってたりした
>>637
おいおい、入力の終端とテキストファイルの終端とを混乱していないか?

>>638
大丈夫、今でもバイナリファイルには山ほど入っている(かも知れない)。
>>637
。。。痛さ倍増だよアンタ。それ以上傷口広げないうちに帰ったほうがいいよ。
端末の制御コード

ということば,何で誰も言わないの?
どこが痛いのかも分からずに帰るわけには行かない
>>641
しらないからだろプッ
知識がない奴でも教える側に回れる
これが 2ch
>>641
そんな話はしていないから。
>>644
知識がない奴に嘘を教えられてしまったやつはいい迷惑だよな。
それで将来左右されるかも知れないのに。
将来を心配するなら2chなんぞに頼るなよ
将来左右されるような情報をタダで得ようとする方がどうかしてる。
この程度で左右される人生なんて最初からダメなんだよ。
650610:04/08/02 13:27
>>612
アリです。お願いします。
651なもなきー高校生:04/08/02 14:21
Cについての質問です。
画面出力された文字列を全てクリアーする定義文を御教唆ください。
・・・超初心者で申し訳ないです。
if(int iが、int j[10]のいずれの数字とも一致しない場合)
というのをできるだけ簡潔なコードで書く方法を教えて下さい。
>>651
そんなものはありません。少なくともANSI Cの範囲では。
>>652
int k
for(k = 0;k < 10;k++) if(i == j[i]) break;
if (k == 11) { ... }
>>651
環境書け

>>652

int check(int i, int j[], int n){
while (n-- > 0) if (j[n] == i) return 0;
return 1;
}

if (check(i, j, sizeof(j) / sizeof(j[0]))) puts("hoge");
>652
#include<algorithm>

if(std::find(j,j+10,i)==j+10) hogehoge....
#define CLS() printf("\x1b[2J")
or
#define CLS() system("cls")
残念ながらWinXpのコマンドプロンプトはエスケープシーケンスが正しく動作しない。
>>610

質問の回答用ソースを貼るスレのレス番196

http://do.sakura.ne.jp/%7Ejunkroom/cgi-bin/megabbs/lounge/index.html
どなたか助言をいただきたいのですがお願いします
y,Y,n,Nが入力されるまで「Yesならyを、noならnを入力してください。」という分を表示するプログラムを作ったのですが、

わからない点
・YとNを入力したときにもちゃんと回答として判定する方法がわからない(今のままだと小文字のみ判定)
・aやb等を入力した際に表示される「Yesならyを、noならnを入力してください。」という分が二重に表示される

これはどのように直すのでしょうか
ttp://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1027870433&res=293

初心者用も問題ですいません
分→文くらいちゃんと書け。
・while( c != 'y' && c != 'n' );
おれなら、
C == 'Y'





・if( ans == 'y' && 'Y') { /* これは常に真 、と前に書いた覚えがある。*/
方針
・大文字を小文字に変換して処理
or
・大文字と小文字は別の文字なので両方処理に組み込む

でソースの
> if( ans == 'y' && 'Y'){
は間違いなので
if(ans=='y'||ans=='Y'){
だと思うよ。
663661:04/08/02 16:58
ミスって送信してしまった。

・分→文くらいちゃんと書け。
・while( c != 'y' && c != 'n' );
俺なら、!(c == 'Y' || c == 'y' || c == 'N' || c == 'n') こう書く。
・改行文字を読んでるから。
・if( ans == 'y' && 'Y') { /* これは常に真 、と前に書いた覚えがある。*/
>>660
すれ違いだが…


> while( c != 'y' && c != 'n' );
ループの中でcの値を更新しないと無限に回る事になる。
    while(c != 'y' && c != 'n' && c != 'N' && c != 'Y') c = getchar();
とすれば良い。
>・YとNを入力したときにもちゃんと回答として判定する方法がわからない(今のままだと小文字のみ判定)
> if( ans == 'y' && 'Y'){
この文の表す条件は、「ansが'y'であり、'Y'が真」で、「'Y'が真」は常に成り立つから(文字は全て真)、意図したように動かない。
    if(ans == 'y' || ans == 'Y'){
とすれば良い。
665664:04/08/02 17:02
失礼。前半は無し。
666664:04/08/02 17:04
ごめん。全部無し。
厨くさい回答だな
あえて本人が気づいたことをつっこむ最悪人間が来ましたよ

> while(c != 'y' && c != 'n' && c != 'N' && c != 'Y') c = getchar();
do { } while( 〜 );

> > if( ans == 'y' && 'Y'){
> この文の表す条件は、「ansが'y'であり、'Y'が真」で、「'Y'が真」は常に成り立つから(文字は全て真)、意図したように動かない。
> if(ans == 'y' || ans == 'Y'){
'Y''は意味が無いだけで悪影響は及ぼさない。
669 :04/08/02 21:08
>>594
エラーになってうまくいかないようです。

適当にソース分断の例
main(void)
{int a,b;
a = 0;
-----------ここでソース分割---------------
b = 1;
}
関数呼び出しはソースを別にしても問題ないですが、
適当にソース分断してコンパイル時に結合することは
できないのかなあ?
単純に結合するわけじゃないから・・・・
671デフォルトの名無しさん:04/08/02 22:34
次の様なファイルから、単位ごとに分けて数値を変数に格納しなければになりました。
--data.txt--
32cm 1.5mm 80m

これをC標準関数と、C++のSTL、両方で作っていかなければでして、
C標準関数の方はfopenやstrrchr、atoiなどを使って、馬鹿な俺にも力技で出来ました。

ところがSTLの方はさっぱり分かりません。fstreamを使ったところで固まってます。
どうか斬り捨てて頂けないでしょうか。
>>669
main.c

int main(void)
{
#include "another.c"
return 0;
}

another.c

int a,b;
a = 0;
b = 1;
>>669
#include
使ってみろ

foot.c
--------------------------
b = 1;
}
--------------------------


head.c
--------------------------
main(void)
{int a,b;
a = 0;
#include "foot.c"
--------------------------
675671:04/08/03 00:41
回答が無いと言うことは、結構難しいのかな(´・ω・`)
時間になってしまったので質問を撤回します。スレ汚し失礼。
>>671
>単位ごとに分けて数値を変数に格納しなければ
が説明不足なので誰も手をつけないのではないかと。
ん?cmならこの変数に、みたいな話でしょ
誰も手を付けないのは、パーサーをSTLだけで書くと面倒だからじゃない?
こんな宿題出すなと言ってやれw
まぁ、そんなに難しくないけど
678デフォルトの名無しさん:04/08/03 07:50
こんな場面でSTL使うことに意味があるとは思えない。
>>678
たった一つの変数の為にポインタ使う宿題だってあるじゃん
#include <stdio.h>
#include <string.h>
int btoi(char[],int);
char *itob(int);

void main(int argc, char *argv[]) {
int s,temp;
s = btoi(argv[1], strlen(argv[1])) + btoi(argv[2], strlen(argv[2]));
printf("%s",itob);
}

つづく・・・
「この場面でSTLを使うことに意味がある」んじゃなくて
単純に「STLを使うことに意味がある」んだよ。
>>681
詳しく
STL使わせたいだけだから問題はどうでも良いんだよ。
コンテナやアルゴリズムは使ってるけど、ストリーム系はキモくて使わないから…
と言い訳
Cについての質問です。
「キーボードから1つの自然数を入力し、1からその数までの3で割ると
1余る数の和を求めよ。」
という問題です。
どなたかよろしくおねがいします。
>>685
#include <stdio.h>

void main( void )
{
    int i, n, sum = 0;

    scanf( "%d", &n );
    for( i = 1; i <= n; i += 3 ) sum += i;

    printf( "%d", sum );
}
int main()
{
  int n = 0, i, c;
  for(;;){
    printf("Input number > ");
    scanf("%d", &n); /* fgets + atoi(strtol)を使ってもok */
    if(n <= 0){
      puts("自然数を入力して下さい。");
      continue;
    }
    c = 0;
    for(i = 1; i <= n; i++)
      if(i % 3 == 1) c++;
    printf("Count > %d\n", c);
  }
  return 0;
}

注意点
※行頭の全角スペースを半角スペースかタブに変えておくこと(重要)
※文字を入力しないこと
個数じゃなく和だと思うの…
>>687
数字は文字じゃないのかな?
最近痛い香具師が出没しているが、ひょっとして同一人物?
仕様にないものを勝手に付け足してバグ増やしてりゃ世話ないわな
692680のつづき:04/08/03 11:36

int btoi(char x[],int a) {
int i = 0;
int s = 0;
while (x[i] != '\0') {
if (x[i] == '1') {
s = s + ( 1 << (a - 1));
}
i ++;
a --;
}
return(s);
}

char *itob(int sum) {
int cnt=0,i=0;
char z[99];

while (sum >> cnt > 0) {
z[i] = '0' + sum >> cnt & 0x1;
i ++;
cnt --;
}
return(z);
}
693680のつづき:04/08/03 11:38
コマンドラインから2進数を2つ入力して
加算結果を文字列に変換したのち、出力するプログラムです
文字列に変換するところと文字列のリターン方法がわかりません
教えてください
atoi itoaなどの関数は使用不可です
おながいします
もろくそ環境依存なんですが
char *itob(int sum) {
// ...
char z[99];
// ...
return(z);
}

zのポインタ返しちゃダメじゃん。。。
>>694
環境依存?
697685:04/08/03 11:47
>>686
ありがとうございました。
>>687
688さんが指摘されたとおりなので。問題文がわかりにくくてすいませんでした。
int btoi(char* str) {
unsigned int value;
value = 0;
while (*str)
value = value * 2 + (*str++ == '1' ? 1 : 0);
return value;
}
char* itob(int i, char* str) {
char* ptr;
unsigned int value;
ptr = str;
value = i;
while (value) {
++ptr;
value /= 2;
}
*ptr = '\0';
value = i;
while (value) {
*--ptr = value % 2 ? '1' : '0';
value /= 2;
}
return str;
}
int main(int argc, char *argv[]) {
char buff[sizeof(int) * 8 + 1];
int sum;
if (argc < 3) return -1;
sum = btoi(argv[1]) + btoi(argv[2]);
printf("%s\n", itob(sum, buff));
return 0;
}
unsigned int btoi(char *p){
  unsigned int n = 0;
  for(;*p == '0' || *p == '1'; p++) n = (n << 1) + (*p - '0');
  return n;
}

void itob(unsigned int s, char *p){
  unsigned int m;
  if(s == 0){*p = '0', *(p + 1) = '\0'; return;}
  for(m = 1; m < s; m <<= 1);
  if(!(m & s)) m >>= 1;
  for(; m; m >>= 1, p++){*p = s & m ? '1' : '0';}
  *p = '\0';
}
>>659
ありがとうございます!!!
// Need #include <limits.h>

const int int_bits = CHAR_BIT * sizeof(unsigned int);
char *itob(unsigned int n, char *s)
{
    int i;
    char *ts = s;

    for(i = int_bits-1; i > 0 && (n >> i & 1) == 0; i--);
    for(; i >= 0; i--, s++)
        *s = '0' + (n >> i & 1);
    *s = '\0';
    return ts;
}

・・・・・厨くせえソースだな。吊ってくる。
>>702
踏み台外しを手伝ってやる
ああ、CHAR_BITだ
なんか定数あった筈と思いながら、思い出せなかった
705680:04/08/03 15:59
ありがとうございます
文字列をリターンするときは
ex)
char str[5] = {"abcd"};
return(str);
はだめですか?

char *str
strに文字列代入処理;;
return(str);
はOK?
ポインタとstaticを理解してください
この例ではchar str[]は関数内のローカル変数。
関数を抜けた時点でスコープから外れ、その内容は保証されない。
まずはアセンブラを学ぶことをお勧めする
低水準厨うぜぇ
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1027870433

ここの296に問題をうpしました。諸事情にyりコンパイルできないので力を貸して下さい。
プログラムを読めばコンパイル等しなくても分かると言われたのですが.....

問題 下記のコメント内で例として用いられているグラフに対して、このプログラムを実行すると、どのような結果が表示されるか?
711710:04/08/03 16:39
コンパイルしろ
お前は今超能力でここに書いてるのか?
>>710
>>364にあるファイルを全部リンクしてもダメ?
714710:04/08/03 16:47
>>713
全部リンクしないと駄目なんでしょうか?
これだけで実行できると教授は言っているんですが一度やったら実行できなかったのです....
>>714
void mainの時点でその教授は信用しないでいいぞ。
mymacro.hは何処やー
mainがコメントアウトされてるのは何でやー
717710:04/08/03 16:51
>>715
信用しては駄目ですか....
>>716
そこで止まります....そしたらプログラム読みなさいと言われたので・゚・(つД`)・゚・
無能すぎ
710も、教授も
> /* でも本当は、グローバル変数を多用する事は、あまり */
> /* おすすめできません。(なぜでしょう?)         . */
ま た こ の 講 師 か !
そろそろ学校名晒しがあってもいいほど頻出な悪寒
グローバル変数だらけのプログラムの保守だけはしたくない罠
COBOLの保守なら喜んでやる
723710:04/08/03 17:02
(´・ω・`)
>>723
ねーねー、君がソースを貼ったスレの275を見てごらんよ
725710:04/08/03 17:08
>>724
それも漏れです....
726724:04/08/03 17:09
ひでぶっ!
それじゃただの荒らしじゃん
728710:04/08/03 17:18
申し訳ない
>>710
********** Showing input graph!! (Adjacency-List) **********
# of nodes = 6    # of edges = 7    (Edge density = 46 percent)
Node 1 --------------------
    degree = 2    (2,1)(4,1)
Node 2 --------------------
    degree = 3    (1,1)(3,1)(4,1)
Node 3 --------------------
    degree = 2    (2,1)(6,1)
Node 4 --------------------
    degree = 3    (1,1)(2,1)(6,1)
Node 5 --------------------
    degree = 1    (6,1)
Node 6 --------------------
    degree = 3    (3,1)(4,1)(5,1)

Tabの代わりに半角スペース4こを使った。
>>710
そのソースを見て判る事は「コメントは簡潔かつ分かりやすく」という事だ。
731710:04/08/03 17:24
>>729
ありがとうございました。皆様、ご迷惑おおかけいたしました。
732710:04/08/03 17:24
>>729
ありがとうございます!
Cの宿題なのですが@の部分で"clients.dat"の部分を任意のファイル名にできるようにプログラムを作り変えてください。

#include<stdio.h>

main()
{
int account;
char name[30];
float balance;
FILE *cfPtr;

if ((cfPtr = fopen("clients.dat","w")) == NULL) <===@
printf("ファイルをオープンできません\n");
else {
printf("口座番号、名前、取引残高を入力してください\n");
printf("(EOFを入力すると終了)\n");
printf("? ");
scanf("%d%s%f",&account, name, &balance);

while (!feof(stdin)) {
fprintf(cfPtr, "%d %s %.2f\n",
account, name, balance);
printf("? ");
scanf("%d%s%f2", &account, name, &balance);
}
fclose(cfPtr);
}

return 0;
}
構造体の配列(メンバは口座番号、名前、取引残高とすること)にファイルのデータを全て読み込むように作り変えてください。
読み込んだデータを、取引残高の多い順に並び替えて表示するようにしてください。
#include<stdio.h>

int main()
{
int account;
char name[30];
double balance;
FILE *cfPtr;

if ((cfPtr = fopen("clients.dat", "r")) == NULL)
printf("ファイルをオープンできません\n");
else {
printf("%-12s%-14s%s\n", "口座番号","名前","取引残高");
fscanf(cfPtr, "%d%s%f", &account, name, &balance);

while (!feof(cfPtr)) {
printf("%-12d%-14s%8.2f\n", account, name, balance);
fscanf(cfPtr,"%d%s%f", &account, name, &balance);
}

fclose(cfPtr);
}

return 0;
}
735デフォルトの名無しさん:04/08/04 07:48
一行目に追加→ extern char *filename;

@→if ((cfPtr = fopen(filename,"w")) == NULL)
char szFilename[260];

fgets(szFilename, sizeof(szFileName), stdin); /* scanf("%s", szFileName); じゃないとバレる? */
if((cfPtr = fopen ...
うわ、ハンガリアンや!
MS の DirectX のコード見ても全員ハンガリアンだし
最近になって,ハンガリアンが一人混じったよな
いち、にぃ、ハンガリアン♪
ハンガリアン てなんですか?

ちょっと待て!ハンガリアン
http://pc5.2ch.net/test/read.cgi/tech/1011026963/l50
次のプログラムを実行しても「-1文字以内で入力してください」ってなったり、姓と名が同じになってしまいます。どうすればいいでしょう?

http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1027870433&res=297
入門書読み返せ!
>>743
strlen は 0 返すだろ?
意味分かって使ってんのか?

string はローカル変数だろ?
その値変えたって何にもならねーよ。
変わるのは main の name の方
ポインタ勉強してこい
746744:04/08/04 10:20
>>743
あ,ごめ〜ん,スレ間違えた。
逝ってくる…
>-1文字以内で入力してください
長さ0の文字列をstrlenしてから-1してるんだから、そりゃそうだろう
>姓と名が同じになってしまいます
b_ptrが指す内容は変わっているが、b_ptrの値は変わっていないから
#include<stdio.h>
char* sprit(char *);
void input(char *, size_t);
int main() {
char name[40]={'\0'};
char *a_ptr,*b_ptr;
input(name, sizeof(name));
a_ptr=name;
b_ptr=sprit(name);
printf("姓は:%sです\n",a_ptr);
printf("名は:%sです\n",b_ptr);
return 0;
}
char* sprit(char *string) {
while(*string!='/'&& *string!='\0')
string++;
if(*string=='/'){
*string ='\0';
string++;
}
return string;
}
void input(char *name, size_t len) {
printf("ローマ字で氏名を%d文字以内で入力してください", len);
printf("ただし、姓と名の間に/を入力してください:");
fgets(name, len, stdin); /* scanf("%s",name); */
}
あ、ごめん
×printf("ローマ字で氏名を%d文字以内で入力してください", len);
○printf("ローマ字で氏名を%d文字以内で入力してください", len - 1);
うう、なんか他にも色々ミスってる悪寒…
strchr使えよ
おいお前!おれの名をいってみろ!!
>>750 ( ´,_ゝ`)
関数名のあとスペース空けろよ
753(つД`)タスケテクダサイ:04/08/04 11:07
ここのスレの人に作ってもらった計算機のプログラムなんですけどこのプログラムの説明とアルゴリズムを教えてください。
出力結果としては3+4*2と入力すると=11とでるようになってます。
どなたか得意な方お願いします。m(__)m

http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1091585218
スレ違い
つか、「プログラムの説明」なんて曖昧に過ぎて答えられない
>>753
プログラムの説明↓
>出力結果としては3+4*2と入力すると=11とでるようになってます。
757(つД`)タスケテクダサイ:04/08/04 12:42
説明は多分一つ一つの命令の説明だと思います。自分では作ってないんで
大体でいいのでだれか暇な方お願いしますm(__)m
アルゴリズムってゆーのもよくわからないです(つД`)
作ったやつに「コメントつけろバカ」って言ってやれ
つまり回答丸コピがバレたんで説明してみろと言われて
それすらも丸投げしていると(w
760ほらよクズ:04/08/04 13:00
main:
 数字、. 、演算子が入力されたら、
  配列 caExpression にそれらの文字を蓄積していく。
  蓄積された文字列の長さは ucLength が表す。
 0x0d は enter。これか = が来たら計算を始める。
  ucLength を 0 にして、もう蓄積されていないことにする。
 0x1b は esc。これが入力されたら計算せずにループを抜けて、
  "Hit any key.\n" を表示して一文字入力を待って終了。

myMath : 数式を解析して数値に変換して返す関数。
 //+,-
 文字列を、最初に見つかった + または - の右側と左側に分解し、
 それぞれを再帰的に解析し、その結果を + もしくは - で計算して返す。
 ただし、*, / の直後のものは数値の符号として扱われる。
 //*, /
 同様に、左右に分解して解析し、2者の結果を * もしくは / する。

 なぜ +, - が先かと言えば、
 これら演算子が一番最後に計算されるから
 (再帰だから、ずんずん分解していった一番奥が先に計算される)

 二つの while を通じて return されなかったということは、
 残りは数字と . のみである。
 とりあえず数字はどんどん積み重ねる。たとえば 3, 2, 4, ., 2, 5 ときたら、
 3 → 32 → 324 → 3242 → 32425 と数を作っていく。これは dAns に格納される。
 この過程で . が見つかっているが、見つかって以後何桁きたかを cDecimal に記憶する。
 最後に小数点以下の桁数の数だけ、dAns を 10 で割り、値を返す。

きちんとした理解は、もう紙に書いて実践してみるっきゃないな。
>>735
エラーが出ましたよ。
>>736
ファイル名が%sになりますよ
>>736
763736:04/08/04 13:52
あれ、ミスった。
>>761
764(つД`)タスケテクダサイ:04/08/04 17:52
>760
ありがとう(つД`)タスカリマスタ

でもクズっていうことないじゃん(´・ω・`)ショボーン
クズって言うか無能なだけ
>>764
え、クズ以外の何者?
チリもつもれば山となる
クズもあつまれば再利用できるかもしれん
だが764は無駄飯を食らうだけだ
そうだな、みんな最初はクズだったんだ、とか
プログラムソースは、
制作者にはソースそのものがコメント文のように働き、
他人にはソースがマシン語のごとく見える。
non

プログラムソースは、
制作者にはソースそのものがコメント文のように働き、
他人にはコメントがマシン語のごとく見える。
「コメントを書くぐらいなら関数名と変数名に気を遣え。」
>>771
関数・変数名には日本語使えないし
そういう時はローマ字で命名するといいですよ(* ^ー゚)ノ
>>772
とりあえずC言語使うの向いてないよ。
http://hima.chu.jp/
コレでも使っててください。
>>774
わざわざすまないな
貴様のレス見て荒らしに変貌したくなってきた
>>775
自分がまだ荒らしじゃないと思ってるあたりが笑える
>>776
そりゃそうだ
漏れがここに書き込んだの772で3回目だし
>変貌したくなってきた
なんていってる時点でもう素質十分でっせ
おみゃーはじゃヴぁをつかっとれ
>>771
俺、関数名と変数名つけるの苦手だわ。。。
781772:04/08/04 20:03
あ、なんだ俺が「名前に日本語が使えない」って書いたから、ひm(ry が出てきたのか
あれは「英語で名前付けるのが苦手」って意味にとってくれ
マジで一瞬馬鹿にされたんかと思った(っていったら作者に失礼か)

自分でも混乱していたらしいマジすまなかった
んじゃROMに戻るよ
願わくば、二度と現れんことを。
現れんこと?
>>783
日本語の勉強をしろ。
>>782だ。意味逆だろ
「"現わ" 連呼!」と?
現わレインコート?
びっくりするほど現わ連呼!
びっくりするほど現わ連呼!
神のご加護のあらんことを
あの使い方だったら「願わくば、二度と現れざらんことを」とすべきだな。
ここは日本語を勉強するスレではありません。

特撮ヲタだったら「あれが最後の772とは思えない。第二、第三の〜」とすべきだな。
似たようなものだ。
質問の仕方を教えるスレだしな。
Cで日本語を弁巨うしろという宿題がでまちた。おねがいそます。
('A`)>>772は滅びん!何度でも甦るさ!
>>761
それは,リンクに失敗したということですか?
それはそういう仕様だから大丈夫。
何も心配することはありません。

課題の条件は満たしているので,自信を持って提出してください。
namingセンスがそいつのレベルの80%を語る。
名前は命。
798デフォルトの名無しさん:04/08/04 22:26
namingに迷ったときはこちらへどうぞ
http://pc5.2ch.net/test/read.cgi/tech/1087209526/
799デフォルトの名無しさん:04/08/04 22:30
C++のクラスで、

class _2ch
{
   int val;
   int* pval;

public:
   _2ch(int i){val=i;pval=&val;};
}

このクラスで、時々pvalと*valが違う値を示すのですがヽ(`Д´)ノ
800デフォルトの名無しさん:04/08/04 22:33
>>799
そら、コンストラクト時には違う値だろう。
つか、pvalと*valは常に違うな。釣り?
クマキボン
typo?

>このクラスで、時々pvalと*valが違う値を示すのですがヽ(`Д´)ノ

このクラスで、時々pvalと&valが違う値を示すのですがヽ(`Д´)ノ

803デフォルトの名無しさん:04/08/04 22:38
ミスです!釣ってません!!
pvalと&valが違う値になります
804デフォルトの名無しさん:04/08/04 22:49
>>803
だからそれも常にだって。たまになわけがない。釣り?
クマキボン
805デフォルトの名無しさん:04/08/04 22:51
ちょっと待て、釣ってない!!絶対違う!!!
確認してくる!!
身体測定のデータ処理を行いたい。番号(2桁の整数)と身長、体重、性別のデータを持つ構造体を作り20人分のデータを扱えるようにしてください。
・入力されたデータから身長と体重の最大、最小値と平均値を性別ごとに求めるプログラムを作ってください。
・番号を入力することで、その人の身長、体重、性別の各データを表示できるようにしてください。
 この時、次の式を使って、標準体重からの差も表示しなさい。
       標準体重 = (身長-100)x0.9

身長は150cmから180ab
体重は45`cから90`c
の範囲で生成せきるようにしてください。
性別は男性:0,女性:1としてください。

データは以下の構造体を用いてください。
struct person{
int number;
int height;
int weight;
int sex;
}

int main()
{
struct person data[20];

return 0;
}
807デフォルトの名無しさん:04/08/04 22:55
>>805
そんな確認のしようがないもの春な。
きちんと現象が出る状態のソースを腫れ、このバカ。
808デフォルトの名無しさん:04/08/04 22:59
キタ━(゚∀゚)━キタ━
やっぱり値が違う!!!!!
800〜804は逝ってよし

以下にソースを↓
死んでくれ
810デフォルトの名無しさん:04/08/04 23:01
//前半
#include <iostream>
using namespace std;

class _2ch
{
  int val;
   int* pval;

public:
   _2ch(int i){val=i;pval=&val;};
   int* GetAddressOfVal(){return &val;};
   int* GetPval(){return pval;};


   _2ch copy(){
      _2ch c(val);
      return c;
   };

   _2ch& operator=(_2ch& c){
      cout<<c.GetAddressOfVal()<<endl;
      cout<<c.GetPval()<<endl;
      val=c.val;
      pval=&val;
      return *this;
   };
};
811デフォルトの名無しさん:04/08/04 23:02
//後半
int main()
{
   _2ch c0(0);
   _2ch c1(0);

   c0=c1.copy();

   return 0;
}
812デフォルトの名無しさん:04/08/04 23:04
これを実行すると違うアドレスが表示されます!!!!!
キタ━(゚∀゚)━キタ━
>>810
>int* GetAddressOfVal(){return &val;};
何これ?
お前って池沼?
はー、最近では小学生でもC++書けるのかぁ。
何この糞設計?
816デフォルトの名無しさん:04/08/04 23:13
(`Д´)ウワーン
正直自身あったのに、、、、
正直、どういう動作を想定していて、
どう違うと言っているのかすら分からん。
順を追ってネタを説明してみろ。
818デフォルトの名無しさん:04/08/04 23:22
(`Д´)ウワーン

c0=c1.copy()は、
1)c1.copy()
2)c0=
の順に実行されます。

問題は2)で
2ch& operator=(_2ch& c)の引数cのpvalと&valが違う値になります(`Д´)ウワーン
おまいはC++以外の言語に移行した方がいいんじゃね?
820デフォルトの名無しさん:04/08/05 01:18
http://tool-ya.ddo.jp/2ch/trash-box/file/20040805010447167.gif
これの回答解る方おられますか?
正解の回答だけでいいので教えて下さい。
数学板は人が少ないようなのでこっちに来てしまいました。
センター試予想問題です。
スレ違いでごめんなさい。
すれちがーいさよーならー
>>820
 
 
Cの人間はBASICと数学解らんから他スレ行っとけ
>>820
BASICスレで聞けばいいのに
824デフォルトの名無しさん:04/08/05 01:57
>>820
403 アクセスを拒否されました
825デフォルトの名無しさん:04/08/05 02:05
Nが2未満のときのエラー処理がないので
こんなプログラム書いたヤシは落第です。
そのとき、この点は膣番目に表示される。
827820:04/08/05 02:20
どのスレで聞こうか悩んだんですが、やはりスレ違いでしたか。

>>825
先生が書いたんですが・・・
828デフォルトの名無しさん:04/08/05 02:51
>>818
コピーコンストラクタが無いからだよ。
_2ch(const _2ch &c)を追加しる。
829デフォルトの名無しさん:04/08/05 02:56
>>827
じゃあ先生に注意してください
Nに文字入れたときもエラーでるよ
>>829
だから数字も文字なんだってば。

>>820
Basicでプログラム書いて実行してみればいいだろ。
或いはこのスレ的にはだれかCに移植するかもしれないけど。
#単純すぎるから私はやらない。
##って書くと、できないからだとか言われそうだが。
>>820
(1)
3
(2)
1) 1 1
2) 1 2
3) 2 1
(3)
10) 4 1
20) 5 2
27) 6 2
(4)
7
19

センター試験受ける気ならこの程度の問題自分で解け。まぁ、その気はないんだろうけど・・・。
あと、こんなの板違いで聞かないように。(特に数学板。)はずかしい。
>>830
#include <stdio.h>
#define $A$  /* (1) */

int main()
{
    int n, s = 0, k, x, y;

    printf("n="), scanf("%d", &n); /* INPUT "n=";N */
    s = 0; /* S = 0 */
    for(k = 2; k <= n; k++){ /* FOR K=2 TO N */
        for(x = 1; x <= $A$; x++){ /* FOR X=1 TO [ア] */
            y = k - x, s++; /* Y = K - X : S = S + 1; */
            printf("%d) %d %d\n", s, x, y); /* PRINT S;") ";X;Y */
        } /* NEXT X */
    } /* NEXT K */
    return 0; /* END */
}

BASIC知らないからミスがあるかもしれない
1)1つの文字列と1つの文字を入力し、文字列中にその文字が何回含まれているのかを調べるプログラムを作成してください。
2)また、このプログラムを改良して文字列中の何文字目に指定された文字が含まれているのかを答えるプログラムを作成してください。
3)入力された文字列中の文字を逆順に複写し、出力するプログラムを作成してください。
>>833
#include <iostream>
#include <string>
#include <algorithm>

using namespace std;

int
main()
{
    char c;
    string s;

    cout << "文字列 : ";
    getline( cin, s );
    cout << "文字 : ";
    cin >> c;

    // (1)
    cout << count( s.begin(), s.end(), c ) << "個" << endl;

    // (2)
    string::iterator i;
    for( i = s.begin(); i != s.end(); ++ i )
        if( c == *i ) cout << distance( s.begin(), i ) + 1 << "番目" << endl;

    // (3)
    reverse( s.begin(), s.end() );
    cout << s << endl;

    return 0;
}
>810-812
gcc 3.4.0 で試してみた。
なるほど、このコードだと copy() から _2ch を返す時に
「見えないインスタンス」を別に作っているようだね。
コピーコンストラクタを書いていないから、デフォルトのコピーコンストラクタにより
pval がその値のままコピーされている。
だから operator = () の中の c の pval と &val は違う値になるんだ。
# この時,*(c.pval) をいじるのは危険だろうね。おそらく前のインスタンスは
# 破棄されているはずだ。つっても、ここで pval は const int * 型のはずだけど。

>828 の言う通りコピーコンストラクタを明示的に書いておくと、
今度は「見えないインスタンス」を生成せず、copy() の中で作った c を
そのまま返してくるのな (;´Д`)
コピーコンストラクタを書いたはずなのに呼び出されないから、焦った。
コピーコンストラクタの呼び出しを省略するのは C++ の仕様の範疇だ (ったと思う)。

次に、コピーコンストラクタを書かず、代わりにデストラクタを書いてみた。
すると、copy() の中の c をそのまま返してきた (;´Д`)
前段落のように、コピーコンストラクタを明示的に書いておいた時のようにね。
これも C++ の仕様だったっけ?
コピーコンストラクタなければ、ただのビットコピーだろ
Cの問題です。
整数nを入力し、n個の乱数を発生して、大きさの昇順のリンク付きリストにせよ
またそのリストの内容を降順に出力せよ。
>>836
>copy() から _2ch を返す時に
>「見えないインスタンス」を別に作っているようだね。

そんな当然のことを,何わざわざ語ってるんだ?
返り値が値渡しなんだから当然だろ。

>copy() の中で作った c を そのまま返してくるのな
これ,考え方が逆。
最適化のスイッチが入って,返り値用に確保してある領域(=_2chのインスタンス)を
そのまま内部変数cとして使うようになっただけ。
バカの相手はほどほどに
841デフォルトの名無しさん:04/08/05 14:45
実数xと正の整数nを受け取りx^n(xのn乗)を計算して返す関数を作成せよ
ただし、main関数では適当なデータをキー入力し、関数を呼び出した後は、x^nの値を出力せよ
このプログラミングをC言語で作成していただけたら助かります。
さらに以下のような感じに仕上げてもらえたら、さらに助かります
#include<stdio.h>
float func(float *a, float *b, float *x){
*x = -(*b)/(*a);
return 0;
}
float main(void)
{
float a=-10,b=1,kai;
func(&a, &b, &kai);
printf("a = %f\n", a);
printf("b = %f\n", b);
printf("kai = %f\n", kai);
return 0;
}
>>841
const とポインタを理解し直せ
floatが32バイトでPODへのポインタが4バイトでconstが無い処理系だったらどうしてくれる
#include<stdio.h>
float func(const float a, const int b){
float x = 1.0;
int i;
for (i = 0; i < b; i++) x *= a;
return x;
}
float main(void)
{
float a = -10.0, kai;
int b = 2
kai = func(a, b);
printf("a = %f\n", a);
printf("b = %d\n", b);
printf("kai = %f\n", kai);
return 0;
}
constが無い処理系はこのスレ野対象外。
const float a, const int b
ワロタ
そもそもfloatってdouble使えない環境以外では使わないだろ
848デフォルトの名無しさん:04/08/05 15:46
そもそもfloatってdouble使えない環境以外では使わないだろ
そもそもfloatってdouble使えない環境以外では使わないだろ
そもそもfloatってdouble使えない環境以外では使わないだろ
そもそもfloatってdouble使えない環境以外では使わないだろ
そもそもfloatってdouble使えない環境以外では使わないだろ
そもそもfloatってdouble使えない環境以外では使わないだろ
そもそもfloatってdouble使えない環境以外では使わないだろ
そもそもfloatってdouble使えない環境以外では使わないだろ
3Dの分野では使いまくっとるが・・・・。float。
851838:04/08/05 16:07
>>848
助かりました
852デフォルトの名無しさん:04/08/05 16:20
       ☆ チン

 ☆ チン  〃 ∧_∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ヽ ___\(\・∀・)< 宿題マダー?
      \_/⊂ ⊂_)_ \____________
    / ̄ ̄ ̄ ̄ ̄ ̄ ̄/|
   |  ̄  ̄ ̄ ̄ ̄ ̄ ̄:|  |
   | 淡路たまねぎ   .|/
    ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
FPU内部ではすべてdoubleで計算してて
floatはdoubleからの変換の手間がかかるから遅いって聞いた
あれ?64bitじゃなくて80bitだっけ?
>>853
一回インテルのマニュアルでも読んできたら?
>>854
ちょっと量が多いな3行にできないか
>FPU内部ではすべてdoubleで計算してて
凄まじいアフォだな
他力本願で悪いが誰か俺に正しい知識を与えてくれ!
正しい知識って、そんなハード寄りな話は
環境を特定しないと答えようがないだろ
じゃあIntel系で
 scanfとprintfっていうコマンドを使って、プログラム作れって
いわれたんだけど、意味わかんない。誰か助けて。UNIXでやってます。
>>860
#include <stdio.h>
int compare(int (*p)(const char *, ...), int (*q)(const char *, ...))
{
return p == q;
}

int main(void)
{
return compare(printf, scanf);
}
scanfとprintfっていうラインエディタがあるとですか?
#include <stdio.h>

int main()
{
    char szStr[256];

    printf("文字列を入れろや、ボケ教授が!!\n");
    scanf("%s", szStr);
    printf("お前が入力したのは、「%s」だ。馬鹿野郎。\n", szStr);
    return 0;
}
>>860
$ scanf
zsh: command not found: scanf
a:\>scanf
I am scanf.

メモリアロケートエラー
command.comが停止しました
>>865
w
>>860
#include <stdio.h>

void main( void ){ scanf( "" ); printf( "" ); }
void main キター
voiid 厨キター
voiid 厨厨キター
そろそろやめないか?
voiid
voin
875デフォルトの名無しさん:04/08/05 19:24
799ですヽ(`Д´)ノ

>>828,836,839
分かりました!!!!!
ありがとうございますm(__)m
ってか,俺もc++には自信があったんだが(-_-;)(-_-;)



>俺もc++には自信があったんだが
悪いのは頭だけではないようですね
877デフォルトの名無しさん:04/08/05 19:34
>>876
いや,ネタではなく俺は間違いなくできるほうだ!!
周りはクラスすら理解していない厨房ばかり
他の人がどうであれ、ヌヒが低レベルという事に変わりはないわけだが。
>>877
まるで自分がクラスを理解出来ているかのような言い方ですね
お前も理解出来てないだろ。
出来てると勘違いしてる輩は、問題点を別の個所に求めるから余計にタチが悪い。
OS・コンパイラ・ライブラリのバグだ!とかな。
おやまあ、小山田だ
二分サーチの短所ってなんですか?
>>882
まず探索に O(logN)かかること
例えばハッシュならば O(1) で検索が実行できる。

次に表を昇順にソートしておく必要があるため、
要素を頻繁に挿入・削除される場合、再ソートのオーバーヘッドが大きくなること。
ちなみに、後者についてはデータ構造によってある程度回避することは可能。
>>883
つまり時間がかかるということですか?
>>885
色々なサーチやソートの方法があるのはそれぞれ一長一短があるから。
式 x+y に代入するデータを(x,y)=(2,0),(10,9),(12,4) とする。
この計算結果を表示するプログラムを作成せよ。
ただし、filename.exe -tekitou の様に、それぞれの(x,y)の値における
計算結果を返すようにコマンドラインで引数を任意に指定せよ。
>>887
いまいち入力フォーマットがわからんがコレで良い?
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char* argv[])
{
if (argc < 3) return 1;
printf("%d + %d = %d\n", atol(argv[1]), atol(argv[2]), atol(argv[1]) + atol(argv[2]));
return 0;
}
889デフォルトの名無しさん:04/08/06 09:32
       ☆ チン

 ☆ チン  〃 ∧_∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ヽ ___\(\・∀・)< 宿題マダー?
      \_/⊂ ⊂_)_ \____________
    / ̄ ̄ ̄ ̄ ̄ ̄ ̄/|
   |  ̄  ̄ ̄ ̄ ̄ ̄ ̄:|  |
   | 淡路たまねぎ   .|/
    ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
890デフォルトの名無しさん:04/08/06 09:57
>>888
それは違うと思う
>>887
// filename [0..2]
#include <stdio.h>

int main(int argc,char* argv[])
{
&sp;struct{
&sp;&sp;int x,y;
&sp;}tbl[3]={{2,0},{10,9},{12,4}};
&sp;unsigned int c=argv[1][0]-'0';
&sp;if(c<3)printf("%d",tbl[c].x+tbl[c].y);
&sp;return 0;
}
s/&sp;/&nbsp;/
文字列を文字型ポインタで初期化するって具体的にはどんなカンジになるんでしょうか?
膣内ぬるぽするようなカンジです
[m]<- char* chinpo
[a]
[n]
[k]
[o]
[\0]
>>893
PCTSTR pszHoge = TEXT("HOGE");
まだちん
chinpoという名前だが、実態はmankoというオチか?
ちんぽがまんこをさすんでね?
900デフォルトの名無しさん:04/08/06 19:56

(読み込むファイル形式:input.txt)

576 名前: 名無しさん 投稿日: 04/08/06 19:40 ID:aospsRua
ごにょごにょ
577 名前: 名無しさん 投稿日: 04/08/06 19:41 ID:1Y+s4rjs
ごにょごにょごにょにょ

↑のような形式のファイル input.txt があります。
これを読み込み【ID:】以下の文字列(8文字)を読み込み、
同じIDがあればその重複回数をカウントして重複数の多い順に
output.txt に出力するプログラムを作成してくだせ。

出力する際は、そのIDが全体のレス数のうちどのくらい占めているかをあらわす%も付け加えて出力。
入力に関しては読み込むファイル名をコマンドラインで指定するだけというのがうれしいです。
outputの形式は以下参照

(出力ファイル形式:output.txt)
ID NUM %
aospsRua 10 15.3%
1Y+s4rjs 2 3.2%



901900:04/08/06 19:59
ああーちと出力ファイル形式のテンプレがずれたので書き直し

(出力ファイル形式:output.txt)
ID(tab)NUM(tab)%
aospsRua(tab)10(tab)15.3%
1Y+s4rjs(tab)2(tab)3.2%

うえのように(tab)をTAB(4文字スペース?)であけてください。
みにくくてスマンです。
それはPerlの仕事。他行ってね
>>900
実験用のファイル用意するの面倒くさかったから予め変数に格納してるけど、
strtokとか取りさって、fgetsでファイルから行を取得するように変更しといて。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1064150088&res=201

俺、STL自体あんまり使わなくて使い方下手くそなので、
そこは叩かないように
あきらかに宿題ではないよね
>>903
どもありがとうございました。
>882 要素がソートされていないと探索できない。以上。
907デフォルトの名無しさん:04/08/07 16:59
スレ違い感漂いまくりですが

『プロセス間通信及びマルチスレッドプログラミングにはどのような物があるか調査し、
簡単なプログラムを作成する』

って課題出たんですけど、何作ればいいと思いますか?
やり方は2つともわかるけど、具体例が思いつかなくてOTL
いわゆる複数クライアントからの接続要求に対してマルチスレッドで相手するWebサーバーみたいなものでよかろ?
OS
910907:04/08/07 17:27
>>908>>909
ちなみに科目はOS、概念だけしかやってないから、あまり高度な事は期待していないと思う
ローカル上で真似事をするようなのは構わないかも知れないけど、
実際に接続できるような物作ろうとすると、こっちも時間足りないし
>>910
ローカルでやる、実際に接続、どちらも同じ。
喪前、理解度低すぎで不合格。
912907:04/08/07 17:54
>>911
ローカルでやるっつったのは、ソケットその他一切使わない真似事って事
単にスレッドとかが動けばいいの
アプリ作れっていうんじゃないなら、一通りのデモでも作ればよかろ。
やり方がわかるなら、そのやり方をプログラムにするだけだ。
経過の表示をグラフィカルに表現すれば、そこそこのヴァリュームで見栄えもよいだろな。
愚痴スレですか?
>>907
>具体例が思いつかなくて
具体例を調査してレポート作成するのも宿題じゃないのか?
telnetdでも作れば?
917907:04/08/07 22:16
>>915
いや、スレッドとかプロセス間通信なんて、技巧の1つでしかないから、具体例いっぱいありすぎて
逆にスレッドがメインであるようなのは…………正直サーバ・クライアント系だけど、
それ前の課題で似たようなの出てたのよ
その辺りもうちょっと突き詰めれば、そっちは可能かもしれないけど……云々

多分俺の理想が高すぎるだけ
楽しようとしなければ、全然平気(?)
918907:04/08/07 22:17
ついでに言うと、ネットワーク系まだやってない_| ̄|○
win 系なら幾らでもつなげられるけど、unix 系だから、やった事なくて
>>912
それでプロセス間通信てのはどーやってやんだ?
それで理想が高すぎるって…噴飯ものw
もの凄い勢いで戦う将棋でも作ったらどうよ
とにかく歩を一つ確保して二歩する将棋なら作れるが
>>918
pipeでもつかえばー?
つか、やればできるみたいな事言いながら出来ない愚痴を聞かされてもな。
924デフォルトの名無しさん:04/08/08 01:01
#include <stdio.h>
int main (void){
int x[10]={1,2,3,4,5,6,7,8,9,10};
int *y,i;
y=x+2;
for(i=0;i<10;i++){
printf("x[%d]=%d\n",i,*y);
y++;
}
return (0);
}
このプログラムでx[0]のアドレスを(y=x)の時は問題ないのですがx[2]のアドレス(y=2)を出力
しようとするとx[0]=3から出力されるのですが、x[8],x[9]あたりで変な値が出て困ってます。
int x[10]の最後の値 10で止まるようなプログラムの場合はどうしたらよいのでしょうか?
どなた様かお力を貸してください。
スレ違い
ポインタが理解出来ていないのが原因。セグフォ。
お前、y=x+2;でx[]のそれぞれの値に2を足した配列のポインタが
yに代入されると思ってないか?(そんなMathematicaじゃあるまいし)
y=x+2でyはx[2]を指す。y++;でx[3],x[4]…と指す先が変わって
いくからyがx+10になった時点でおかしくなるのは当たり前だ。
何をしたいのか分からん。
927デフォルトの名無しさん:04/08/08 01:30
924はネタだろ
928デフォルトの名無しさん:04/08/08 01:38
ネタではないのですが・・・ors
質問の仕方が悪かったと思います。スイマセン
このプログラムを実行すると
x[0]=3
x[1]=4
x[2]=5
x[3]=6
x[4]=7
x[5]=8
x[6]=9
x[7]=10
x[8]=1245120
x[9]=4199081
となります。これをx[7]=10で止めるようなプログラムを作成して
いただきたいのですが
#include <stdio.h>
int main (void){
int x[10]={1,2,3,4,5,6,7,8,9,10};
int *y,i;
y=x+2;
while(y <= &x[9]){
for(i=0;i<10;i++){
printf("x[%d]=%d\n",i,*y);
y++;
}
return (0);
}
930しくったorz:04/08/08 01:42
#include <stdio.h>
int main (void){
int x[10]={1,2,3,4,5,6,7,8,9,10};
int *y,i;
y=x+2;
while(y <= &x[9]){
printf("x[%d]=%d\n",i,*y);
y++;
}
return (0);
}
>>930
愛はどうした?
>>931
そんなものいらない
>>932
寂しい奴だな
放っといてくれ!
935デフォルトの名無しさん:04/08/08 01:56
>>930
解答のほどありがとうございます。
ですが930さんのプログラムを実行させていただきますと
iがないのでxの中身が変になりました。
x[-858993460]=3
x[-858993460]=4
x[-858993460]=5
x[-858993460]=6
x[-858993460]=7
x[-858993460]=8
x[-858993460]=9
x[-858993460]=10
iがないxなんて・・・
930さんはもう嫌になってますよ
あなたとはもうやっていけないわ
939926:04/08/08 02:25
いや、そもそも>>924は誤解していると思うのだが。表示は
x[0]=3
x[1]=4

となっていてもx[0]==1、x[1]==2…のままだぞ。それは分かってるのか?
それでいいなら
#include <stdio.h>
int main (void){
    int x[10]={1,2,3,4,5,6,7,8,9,10};
    int *y,i;
    y=x+2;
    for(i=0;i<10-2;i++){
        printf("x[%d]=%d\n",i,*y);
    y++;
    }
    return 0;
}
でいいんじゃないのか?
940926:04/08/08 02:26
あ、ちとインデント間違えた。
941デフォルトの名無しさん:04/08/08 02:39
>>939 (926)
表示はそのままでよかったです。
ホントありがとうございました。
助かったです。
これ教えてください(つд`)

身体測定のデータ処理を行いたい。番号(2桁の整数)と身長、体重、性別のデータを持つ構造体を作り20人分のデータを扱えるようにしてください。
・入力されたデータから身長と体重の最大、最小値と平均値を性別ごとに求めるプログラムを作ってください。
・番号を入力することで、その人の身長、体重、性別の各データを表示できるようにしてください。
 この時、次の式を使って、標準体重からの差も表示しなさい。
       標準体重 = (身長-100)x0.9

身長は150cmから180ab
体重は45`cから90`c
の範囲で生成せきるようにしてください。
性別は男性:0,女性:1としてください。

データは以下の構造体を用いてください。
struct person{
int number;
int height;
int weight;
int sex;
}

int main()
{
struct person data[20];

return 0;
}
>>942
それ最近みたぞ
>>942
ここだ
>>806
806 == 942 なのか?
次スレの立て方についてどうぞ
どなたかお助けください
テキストファイルに、1〜nまでの素数を書き込む関数fileSosu()を作成せよ。

void fileSosu( char *fileName, int n )

・fileName : 素数を書き込むファイル名
・n : 素数を求める最大数

上記の関数を以下のプログラムで実行し1〜100までの素数がファイルに出力されたか動作を確認せよ。

#include <stdio.h>

//ここにfileSosu()関数を書く。

void main()
{
//ファイル名を格納する文字列
char wFileName[20];

printf("素数を出力するファイル名=");
//ファイル名をキーボードから入力する
scanf("%s", wFileName );
fileSosu( wFileName, 100 );
}
前すれで聞いた時は流れてしまって、でっちあげて提出したら「お前がやるのは再提出問題で、これは元になった問題の回答だ」と言われました
元になった問題も張りますので、どうにかお助けを_| ̄|○
ttp://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1027870433&res=302
void fileSosu( char *fileName, int n )
{
    FILE *fp;
    int *prime, i, j;

    fp = fopen(fileName, "w");
    if(fp == NULL) return;
    prime = calloc(sizeof(int), n+1);
    if(prime == NULL) return;

    for(i = 2; i <= n; i++){
        for(j = i * 2; j <= n; j += i)
            prime[j] = 1;
        if(prime[i] == 0){
            if(i > 2) fputc('\n', fp);
            fprintf(fp, "%d", i);
        }
    }
    fclose(fp);
    free(prime);
    return;
}

こんな感じか?
>>948
void fileSosu(char *const filename, const int n)
{
  int i;
  FILE *out = fopen(filename, "w");
  for(i = 2; i <= n; i++)
  {
    int j;
    for(j = 2; j < i; j++)
      if(i % j == 0)
        goto not_prime;
    fprintf(out, "%d\n", i);
not_prime:;
  }
  fclose(out);
}
951950:04/08/08 16:48
かぶったうえに明らかに拙い…
欝だ死のう
>>949
合成数でもふるいを更新するならフルイのアルゴリズムの利点が無くないか?
>>952




orz
    for(i = 2; i <= n; i++){
    ...
    }

    ↓

    for(i = 2; i <= n; i++){
        if(prime[i] == 0){
            for(j = i * 2; j <= n; j += i)
                prime[j] = 1;
            if(i > 2) fputc('\n', fp);
            fprintf(fp, "%d", i);
        }
    }

これで大丈夫かなぁ・・・
次スレが立ったようです
C/C++の宿題を片づけ作戦指令 30代目
http://pc5.2ch.net/test/read.cgi/tech/1091954342/
ヒマだから,>>907で何か書くか。
957956:04/08/09 01:38
埋め立てちう
#include <vector>
#include <set>
#include <map>
#include <algorithm>
#include <time.h>
#include <stdio.h>
#include <unistd.h>
#include <pthread.h>
#include <signal.h>

class FDS : public std::set<int> {
private:
fd_set fds;
iterator it;
public:
int fd_max() const { return *max_element(begin(),end()); }
fd_set *fdset(){
it=begin();
FD_ZERO(&fds);
iterator itt;
for(itt=begin();itt!=end();++itt){
FD_SET(*it,&fds);
}
return &fds;
}
int active_fd(){
for(;it!=end();++it)
if( FD_ISSET(*it,&fds) ) return *it++;
return -1;
}
};
958956:04/08/09 01:42
struct {
pthread_mutex_t mutex;
pthread_cond_t cond, finish;
int count, nmenber;
void join(){
pthread_mutex_lock(&mutex);
if( ++count!=nmenber ) pthread_cond_wait(&cond,&mutex);
else pthread_cond_broadcast(&cond);
pthread_mutex_unlock(&mutex);
}
void oneless(){
pthread_mutex_lock(&mutex);
if( count==--nmenber ) pthread_cond_broadcast(&cond);
pthread_mutex_unlock(&mutex);
}
void onedead(){
pthread_mutex_lock(&mutex);
if( !--count ) pthread_cond_broadcast(&finish);
pthread_mutex_unlock(&mutex);
}
bool end(){ return count<2; }
void wait(){
pthread_mutex_lock(&mutex);
pthread_cond_wait(&finish,&mutex);
pthread_mutex_unlock(&mutex); }
} thread_starter = { PTHREAD_MUTEX_INITIALIZER, PTHREAD_COND_INITIALIZER, PTHREAD_COND_INITIALIZER,
0 };

959956:04/08/09 01:43
struct thread_data {
pthread_t th;
int pipe[2];
};

std::vector<thread_data*> vec_thread;
time_t base_sec = 0;

const char*const msg[] = {
"%dは%dに斬りかかった",
"%dは%dに銃口を向けた",
"%dは%dに呪文を唱えた",
"%dは%dにぬるぽ",
"%dは%dにガッ!",
};
960956:04/08/09 01:47
void *student_thread(void *input){
pthread_mutex_t mystart_mutex = PTHREAD_MUTEX_INITIALIZER;
thread_data *arg = (thread_data*)input;
thread_data *data;
int nwrite;
sigset_t sigset;
sigemptyset(&sigset);
sigaddset(&sigset,SIGTERM);
sigprocmask(SIG_BLOCK, &sigset, NULL);
thread_starter.join();
do{
sleep(rand()%5+1);
sigpending(&sigset);
time_t sec;
int len;
char buf[100];
sec=time(0)-base_sec;
write(arg->pipe[1],&sec,sizeof(time_t));
961956:04/08/09 01:47
if( thread_starter.end() ){
snprintf(buf,sizeof(buf),"%dが生き残った",arg->th);
}else if( sigismember(&sigset,SIGTERM) ){
snprintf(buf,sizeof(buf),"%dは死んだ",arg->th);
}else{
data = vec_thread[rand()%vec_thread.size()];
if( arg != data )
snprintf(buf,sizeof(buf),msg[rand()%(sizeof(msg)/sizeof(msg[0]))],arg->th,data->th);
else
snprintf(buf,sizeof(buf),"%dは身を投げた!!!",arg->th);
if( pthread_kill(data->th, SIGTERM) )
strcat(buf," ミス");
};
len=strlen(buf)+1;
write(arg->pipe[1],&len,sizeof(int));
write(arg->pipe[1],buf,len);
}while( !thread_starter.end() && !sigismember(&sigset,SIGTERM) );
close(arg->pipe[1]);
thread_starter.onedead();
return NULL;
}
962956:04/08/09 01:48
void log_process(FDS &fds){
std::multimap<time_t,char*> map_log;
while( fds.size() ){
int nsel;
if( 0<(nsel=select(fds.fd_max()+1,fds.fdset(),NULL,NULL,NULL)) ){
int fd;
while( (fd=fds.active_fd())>=0 ){
time_t sec;
int msglen;
char *msg;
int nread;
read(fd,&sec,sizeof(time_t));
read(fd,&msglen,sizeof(int));
msg = new char[msglen];
nread=read(fd,msg,msglen);
if( nread > 0 ){
map_log.insert(std::make_pair(sec,msg));
}else{
fds.erase(fd);
close(fd);
}
}
}
}
std::multimap<time_t,char*>::iterator it;
for(it=map_log.begin();it!=map_log.end();++it){
printf("%03dターン: %s\n",it->first,it->second);
}
return;
}
分速500文字級で>>956がコードを打ってると想像して萌えてみる
964956:04/08/09 01:50
int main(int argc, char **argv){
srand(time(0));
int count;
FDS fds;
std::vector<thread_data*>::iterator it;
if( argc<2 ){
fprintf(stderr,"Usage:%s [thread_count]\n",argv[0]);
return 1;
}
for(count=atoi(argv[1]);count;--count){
thread_data *data;
data=new thread_data;
pipe(data->pipe);
vec_thread.push_back(data);
fds.insert(data->pipe[0]);
}
thread_starter.nmenber=fds.size();
pid_t pid=fork();
if( pid<0 ){
abort();
}else if(pid>0){
pid=fork();
if(pid<0) abort();
else if(pid>0) return 0;
for(it=vec_thread.begin();it!=vec_thread.end();++it){
close((*it)->pipe[1]);
delete *it;
}
vec_thread.clear();
log_process(fds);
return 0;
}
965956:04/08/09 01:50
close(0); close(1); close(2);
setpgid(0,0);
for(it=vec_thread.begin();it!=vec_thread.end();++it){
thread_data *data=*it;
close(data->pipe[0]);
if( pthread_create(&(data->th), NULL, student_thread, data) ){
close(data->pipe[1]);
delete data;
vec_thread.erase(it);
thread_starter.oneless();
continue;
}
}
time(&base_sec);
thread_starter.wait();
return 0;
}
966956:04/08/09 01:54
>>963
ふふふ
コピペとSTLの力は偉大なのだよ
>>956
(:.;゚;Д;゚;.:)ハァハァ
968907:04/08/09 02:17
>>957
dクス
でも、HttpDownLoader(偽) と簡易シェルを作って終わりにしちった
許してくれ

ちなみに、使用可能なのは C であって、C++ ではないらしい
とても愉快なうちのPCルーム
しかしコンパイルできない
しかし,埋まらない。
ところで,何がコンパイルできないとお悩みじゃ,お若いの?
>>970
/home/hoge/tmp/ccsX09Q1.o(.text+0x210): In function `student_thread(void*)':
: undefined reference to `pthread_kill'
collect2: ld はステータス 1 で終了しました

gcc3.3.2
コンパイルオプションを教えて.
そりゃ,コンパイルエラーじゃねぇ,リンクエラー。

キミの任務はpthread用のライブラリをリンクすることだ。
リンカオプション -lpthread を活用したまへ。