トップページ⇒tech
984コメント337KB

C/C++の宿題やらせてください。6代目。

レス数が950を超えています。1000を超えると書き込みができなくなります。
0001デフォルトの名無しさんNGNG
私はC++房。
今まで1年*ヶ月、ほとんど毎日休まず一生懸命C++を勉強してきた。
わからない宿題若しくは処理があったら私にやらせてくださいm(_ _)m
5代目(前スレ): http://pc2.2ch.net/test/read.cgi/tech/1051594046/l50
4代目: http://pc2.2ch.net/test/read.cgi/tech/1045074808/l50
3代目: http://pc2.2ch.net/tech/kako/1041/10419/1041992392.html
2代目: http://pc3.2ch.net/tech/kako/1039/10397/1039772622.html
宿題手伝いますYO!!: http://pc3.2ch.net/tech/kako/1038/10380/1038024989.html

ラウンジ:質問が長い時はココを使うと便利
http://do.sakura.ne.jp/%7Ejunkroom/cgi-bin/megabbs/lounge/index.html
0002デフォルトの名無しさんNGNG
>>1
乙(嘲笑激藁
0003デフォルトの名無しさんNGNG
ラウンジ(・∀・)イイ!!んじゃない?
0004デフォルトの名無しさんNGNG
関連スレ:C/C++系のスレッド

C++相談室 part19
http://pc2.2ch.net/test/read.cgi/tech/1052625846/l50

C言語なら俺に聞け! Part 〈56〉
http://pc2.2ch.net/test/read.cgi/tech/1052542761/l50

★初心者にVisual C++を教えるスレ★ Part6
http://pc2.2ch.net/test/read.cgi/tech/1052931903/l50

C++Builder相談室 Part5
http://pc2.2ch.net/test/read.cgi/tech/1045542179/l50

Win32API 質問箱 Build11
http://pc2.2ch.net/test/read.cgi/tech/1052651750/l50
0005デフォルトの名無しさんNGNG
>>4
ここは隔離スレなんだから、リンクはるな馬鹿
0006デフォルトの名無しさんNGNG
>>5 そうだったんですか。すいません。
0007デフォルトの名無しさんNGNG
>>5
馬鹿
馬鹿
馬鹿
馬鹿
馬鹿
0008デフォルトの名無しさんNGNG
俺の宿題やれよ、このカスども
0009デフォルトの名無しさんNGNG
乱数を用いて円周率を計算するプログラムを作成せよ
0010デフォルトの名無しさんNGNG
なんで円周率なんか計算させる?
3.14159657843frいいじゃねーか!
0011デフォルトの名無しさんNGNG
>>10
小数第5位までしか正しくない罠
0012デフォルトの名無しさんNGNG
>>10はアルゴリズムを思いつかないようです
0013デフォルトの名無しさんNGNG
>>10
http://www.vector.co.jp/soft/win95/hardware/se211824.html
0014_NGNG
  ∧_∧   
 ( ・∀・)/< こんなのみつけたっち♪ 
ttp://www.yamazaki.90.kg/hankaku/hankaku04.html
ttp://yamazaki.90.kg/hankaku/hankaku10.html
ttp://www.yamazaki.90.kg/hankaku/hankaku09.html
ttp://yamazaki.90.kg/hankaku/hankaku08.html
ttp://www.yamazaki.90.kg/hankaku/hankaku06.html
ttp://yamazaki.90.kg/hankaku/hankaku05.html
ttp://www.yamazaki.90.kg/hankaku/hankaku01.html
ttp://yamazaki.90.kg/hankaku/hankaku02.html
ttp://www.yamazaki.90.kg/hankaku/hankaku07.html
ttp://yamazaki.90.kg/hankaku/hankaku04.html
0015デフォルトの名無しさんNGNG
お前ら、跪いて俺様に宿題を請え。
0016デフォルトの名無しさんNGNG
お前ら、頷いて俺様に宿題を請え。
0017デフォルトの名無しさんNGNG
お前ら、躓いて俺様に宿題を請え。
0018デフォルトの名無しさんNGNG
円周率なんてpi=4*atan(1);でいいじゃねーか(藁
001919NGNG
教えてください!!
自分の名前をアスキーコード(整数値)で入力し、「My name is ・・・」
とローマ字(大文字)で表示するプログラムを作りなさい。また、同時に
(アスキーコードを再入力することなく)ローマ字(小文字)で表示する
プログラムを作りなさい。
0020デフォルトの名無しさんNGNG
#include <math.h>
#include <stdlib.h>
#include <stdio.h>

int main(void)
{
int i;
printf("計算中\n");
if(i=rand();i>0;i--);
printf("円周率=%f\n",PI);
return 0;
}
0021デフォルトの名無しさんNGNG
>>20
PIが定義されていないと出た
0022デフォルトの名無しさんNGNG
> if(i=rand();i>0;i--);

なんすかこれ?
0023デフォルトの名無しさんNGNG
>>9
モンテカルロ法
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
  int i, count;
  double x, y;
  srand(time(NULL));
  count = 0;
  for (i = 0; i < 10000; i++) {
    x = (double)rand() / RAND_MAX;
    y = (double)rand() / RAND_MAX;
    if (x * x + y * y < 1.0) count++;
  }
  printf("%lf\n", (double)count / i * 4);
  return 0;
}
0024デフォルトの名無しさんNGNG
>>23
& nbspの後に;を忘れてる
002523NGNG
再掲
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
  int i, count;
  double x, y;
  srand(time(NULL));
  count = 0;
  for (i = 0; i < 10000; i++) {
    x = (double)rand() / RAND_MAX;
    y = (double)rand() / RAND_MAX;
    if (x * x + y * y < 1.0) count++;
  }
  printf("%lf\n", (double)count / i * 4);
  return 0;
}
002623NGNG
>>24
さんくす。
IEコンポーネントを使ったブラウザでみてたんで気がつかなかった。
0027デフォルトの名無しさんNGNG
>>19
問題を読み間違えてないか?
一応サンプルを。
#include <stdio.h>
#include <stdlib.h>

#define MAX 100

int main( int argc, char** argv ) {
    char buf[ MAX + 1 ];
    int c;
    int i;
    int len = 0;
    while( scanf("%d",&c), c != 0 && len < MAX ) {
        buf[len++] = toupper(c);
    }
    buf[len] = '\0';
    printf( "My name is %s\t", buf );
    for( i = 0; buf[i] != '\0'; i++ )
        printf( "%c", tolower(buf[i]) );
    printf("\n");
}
~
0028デフォルトの名無しさんNGNG
>>21
M_PI だな
0029デフォルトの名無しさんNGNG
なんかおもしろいシミュレーションプログラムを作れ。
0030デフォルトの名無しさんNGNG
>>29
>>25 はモンテカルロシミュレーションのプログラム
0031デフォルトの名無しさんNGNG
void sub(){
  FARPROC exitprocess = GetProcAddress( GetModuleHandleA("kernel32"), "ExitProcess");
  __asm{
    mov ecx,exitprocess
    mov [ebp+4],ecx
  }
}
int APIENTRY WinMain(HINSTANCE, HINSTANCE, LPSTR, int){
  sub();
  OutputDebugString("来るな!\r\n");
  return 0;
}
ASMをおぼえはじめて遊んでいます。
上のプログラムで、「sub()が戻ったときにExitProcessの方に行ってしまう」のを予想したのに、
何も無く終わってしまいます。なんでですか?
0032rNGNG
>>31
何の宿題だよ。


つか、アセンブリは全く解んないんだが、
movした後、
ジャンプ命令や割り込み命令を使わなくてもいいの?
0033デフォルトの名無しさんNGNG
>>31
漏れも詳しくはしらないんだけど
リターンアドレスを書き換えたいわけでしょ?
ebpじゃなくてスタックポインタのespとか
0034デフォルトの名無しさんNGNG
いや、動作はそれで正しいよ。
subのリターンがExitProcessに行くから、
「来るな」が表示されない、つまり、「何もなく終わる」んだが。
003531NGNG
>>34
いえ、書き方悪くてすみません。「来るな」と表示されてしまうんです。
なんでExitProcessの方にいかないんだろうと思いまして。
003634NGNG
いや、うちのWin2K、VC6では問題なく、来るな、と出力されないヨ。
0037デフォルトの名無しさんNGNG
アセンブラで出力すればわかるんじゃない?
たぶんスタックでexitprocessをとってるか最適化で消えて
ebp+4がリターンアドレスじゃないのだと思うけど。
0038デフォルトの名無しさんNGNG
実はsubがインライン展開されているというあたりではないか。
003931NGNG
最適化の問題だったんですね。releaseモードで動かしていたし。
#pragma optimize( "g", off )で解決しました。

厨な質問に答えていただきありがとうございました。

0040デフォルトの名無しさんNGNG
>>31はなかなか面白い宿題(?)だった。
おかげで最適化で何が消えるか勉強になったよ。
で、>>32は勉強不足。
0041デフォルトの名無しさんNGNG
教えてください、お願いします。
5個の整数を配列に格納して、最大値と最小値を画面に表示させる。
0042デフォルトの名無しさんNGNG
int i[]={0,1,2,3,4};
printf("最大値%d,最小値%d\n",i[4],i[0]);
0043デフォルトの名無しさんNGNG
int i, max, min;
int a[5];

(a[5]への整数の格納は省略)

max = min = a[0];
for(i = 1; i < 5; i++) {
 if (max < a[i]) max = a[i];
 if (min > a[i]) min = a[i];
}

printf("最大値 %d\n最小値 %d\n", max, min);
004441NGNG
整数をキーボードから入力して最大値と最小値を画面に表示させる。
というのはできますか?
0045デフォルトの名無しさんNGNG
scanfじゃだめ?
0046デフォルトの名無しさんNGNG
>>44
「できる」という聞き方は相手の能力を疑っているようで失礼だ
「do」という表現に変えなさい。
0047デフォルトの名無しさんNGNG
配列をソートして、最初の要素と最後の要素
004841NGNG
>>42
>>43
有難う御座います。
0049デフォルトの名無しさんNGNG
おいオマイラ! 俺に宿題をㄜㄝㄋ!!
0050デフォルトの名無しさんNGNG
マイラ
0051デフォルトの名無しさんNGNG
>>48
漏れも同レベルなので練習がてら

#include <iostream.h>

int max(int* const array, int size);
int min(int* const array, int size);
static const int NUM = 5;

int main(){
int array[NUM];
cout << "数字を" << NUM << "つ入力" << endl;
for(int i = 0; i < NUM; i++) cin >> array[i];
cout << "最大値:" << max(array, NUM) << " 最小値:" << min(array, NUM) << endl;
return 0;
}

int max(int* const array, int size){
int max;
for(int i = 0; i < size; i++)
if( i == 0 || max < array[i] ) max = array[i];
return max;
}

int min(int* const array, int size){
int min;
for(int i = 0; i < size; i++)
if( i == 0 || min > array[i] ) min = array[i];
return min;
}
0052デフォルト名無しさんNGNG
>>45
scanfでおねがいします。
>>46
申し訳。
005351NGNG
>>51
このmaxの関数でsizeが0以下だったりしたときは
maxが不明な値になっちゃうと思うんですが、
こういうときのエラーを判断するのに
正常な返り値が負の数,正の数どっちも考えられるとき
どういう返り値を利用したらいいんでしょうか

呼び出し元で呼び出し前にチェックするのが普通でしょうか
ご教授おながいします
0054デフォルトの名無しさんNGNG
>>51
× #include <iostream.h>
× static const int NUM = 5;

#include <algorithm>
でmin_element/max_elementがいいよ。
0055& ◆8MNVpjEVeM NGNG
>>53
0返しとけばいいんじゃねーの?
0056デフォルトの名無しさんNGNG
>>53
・引数を std::size_t にする
・throw std::invalid_argument;
・assert入れる(呼び出し元にチェックを要求する)
005751NGNG
>>55
>>51のようにしちゃうと0も正常値の可能性あるかと思ったので

>>54>>56
大変参考になりますた

algorithm.hとか初めて知りました
min_elementとかでやってるように
値じゃなくて配列の添え字を返すのが正常値を正の値に
限定できて負の値をエラー値にできてなんかよさげですね
0058デフォルトの名無しさんNGNG
>>53
仕様の問題は自分で勝手に定義汁!
あえて言うなら、

1.戻り値では処理結果を引数に最大値の格納先を追加する
2.戻り値を配列の添え字にし、エラー時は添え字として有り得ない値を返す

など、いろいろ考えられる。
何が最適かはケース・バイ・ケース。
要は関数を仕様を自分で考えれ!って事だ。
0059デフォルトの名無しさんNGNG
>>51
>static const int NUM = 5;

は #define で十分では?
何故に const ?
0060デフォルトの名無しさんNGNG
>>59
constで済むところに#define使うのか?
0061デフォルトの名無しさんNGNG
>>59
はいはい。おじいさんはもう死ぬ時間ですよ。
006259NGNG
>>60
ああ、なるほど。
const の意味をはき違えてるのか(w
0063デフォルトの名無しさんNGNG
>>59
プ 
0064デフォルトの名無しさんNGNG
>>62
名前空間全体を汚すマクロをホイホイ使うな! このタコが!!
0065デフォルトの名無しさんNGNG
>>59はありえない
0066デフォルトの名無しさんNGNG
釣られすぎ
0067デフォルトの名無しさんNGNG
釣りが始まりました(藁
006859NGNG
>>64
>名前空間全体を汚すマクロをホイホイ使うな! このタコが!!

どこで汚れるのよ(w
0069デフォルトの名無しさんNGNG
#define NUM 100

struct foo
{
int NUM;
};

foo f;
f.NUM; //ダメ。 名前空間が汚れましたー
0070デフォルトの名無しさんNGNG
釣れた(w
0071デフォルトの名無しさんNGNG
const int NUM 100

struct foo
{
int NUM;
};

foo f;
f.NUM; //OK 名前空間が保たれましたー
0072デフォルトの名無しさんNGNG
   ∧_∧  / ̄ ̄ ̄ ̄ ̄
  ( ´∀`)< とにかくカエレ!
  (    )  \_____
  | | |
  (__)_)
0073デフォルトの名無しさんNGNG
const int NUM 100
0074デフォルトの名無しさんNGNG
【厨房の為の 煽り煽られ講座】

煽られて反論できなくなった
  → ○○ 必 死 だ な (w

予期せぬ自分の無知で煽られた
  → 釣れた
  → わーマジレス返ってきたよ

言い返せないけど 負けは認めたくない
  → ( ´,_ゝ`)プッ
  → 無知白痴は黙ってろ
  → 知能障害をおこす
  → 意味不明な発言
0075デフォルトの名無しさんNGNG
#define NUM 100;

動かねえ。
0076デフォルトの名無しさんNGNG
#define NUM 200

namespace ore
{
#define NUM 100

};

main()
{
std::cout << NUM << std::endl;
}
0077デフォルトの名無しさんNGNG
76での出力結果は何でしょう?
0078デフォルトの名無しさんNGNG
100
0079デフォルトの名無しさんNGNG
こういうの簡単に検証できるようなC++のインタプリタとか無いのかな…
0080デフォルトの名無しさんNGNG
>>77
undefined symbol: namespace
0081デフォルトの名無しさんNGNG
>>59==無知
008259NGNG
今日はなかなかの大物が釣れますた(・∀・)
0083デフォルトの名無しさんNGNG
厨房の為の 煽り煽られ講座】

予期せぬ自分の無知で煽られた
  → 釣れた
 
0084デフォルトの名無しさんNGNG
59とは関係ないけど、
コンパイル時にサイズが決まっているものであれば
次のマクロを使えば要素数が取得できるね。

#define GET_CONST_ARRAY_SIZE(array) (sizeof(array)/sizeof(array[0]))

まぁ、マクロは関数や定数では実現できない利点が
欠点を上回る場合のみ利用するべきだね。
特に定数をマクロで宣言するのはナンセンスだね。
C++は任意の型の定数をconstで宣言できるし、
Cも整数の定数に限ればenumで宣言できる。

0085デフォルトの名無しさんNGNG
template<typename T> int GetConstArraySize(T x[])
{
 return sizeof(x) / sizeof(T);
}
0086デフォルトの名無しさんNGNG
生配列なんて使ってないで素直にvector使えよ。
0087デフォルトの名無しさんNGNG
マクロは使わない方がいいね。
templateで済ませられるものはtemplateで済ませた方が型安全だ。
0088デフォルトの名無しさんNGNG
template<typename T,std::size_t N> std::size_t GetConstArraySize(T const (&x)[N])
{
 return N;
}
0089デフォルトの名無しさんNGNG
GetConstArraySizeといういかにも関数とう名前だとその機能で十分な気がするが、
#define constarray_sizeof(a) (sizeof(a)/sizeof(*(a))) と比べるとできないこともある。

int other_array{} = { ... };
int data[ constarray_sizeof( other_array ) ]; // 可
int data[ GetConstArraySize( other_array ) ]; // 不可
0090デフォルトの名無しさんNGNG
提出内容

1 アルゴリズム
2 フローチャート
3 プログラムリスト
4 動作結果

課題

y=cos(x)-x^4=0
y=exp(-x^4)-sinx=0

の根のうち
0.37<x<1

の範囲にあるものを、二分法で六桁正確に求めよ。

こういうプログラム作んなきゃないんだけど、もうだめです。
どなたかプロの方いたらよろしくお願いします。


ペコリm(。。)m
009190NGNG
言語はC言語かフォートラン使えって言われました。
どっちでもいいみたいです。
0092デフォルトの名無しさんNGNG
その1,2,3,4のどこがわからんのよ
009384NGNG
>>86
C言語にvectorなどという便利な物はない。
それと配列かvectorかは用途によって使い分けだな。

>>87
そうだね。
それにC++なら関数マクロではなく
インライン関数にするべきだね。

>>89
なにが違うの?
できるでしょ。ちなみに
int other_array{} = { ... };
は
int other_array[] = { ... };
の間違いだよね。

0094デフォルトの名無しさんNGNG
生配列のサイズに非定数式を受け付けるのはC99か、gccの拡張のはず。
0095デフォルトの名無しさんNGNG
templateならコンパイル時に展開されて定数式になるんじゃないの?
0096デフォルトの名無しさんNGNG
>>90
#include <stdio.h>
#include <math.h>

double f1(double x) { return cos(x) - pow(x, 4.0); }
double f2(double x) { return exp(-pow(x, 4.0)) - sin(x); }

double newton(double (*f)(double), double x0, double x1) {
  double x, y, y0, y1;
  y0 = f(x0); y1 = f(x1);
  while (fabs(x0 - x1) > 0.0000001) {
    printf("%f = f(%1.7f) %f = f(%1.7f)\n", y0, x0, y1, x1);
    x = (x0 + x1) / 2; y = f(x);
    if (y0 * y < 0) {
      x1 = x; y1 = y;
    } else {
      x0 = x; y0 = y;
    }
  }
  return x;
}
int main() {
  printf("%1.7f\n", newton(f1, 0.37, 1.0));
  printf("%1.7f\n", newton(f2, 0.37, 1.0));
  return 0;
}
0097デフォルトの名無しさんNGNG
>>95
なるわけねぇよ
0098デフォルトの名無しさんNGNG
yamada,taro,25
tanaka,hanako,23
…
こんなCSVファイルを読み込んでデータを構造体に格納したいのですが、VC6.0で
実行時にdebug assertion failed!というエラーメッセージが出てきます。
以下のプログラムの間違っている点をご指摘願えればと思います。
よろしくお願いします。

#include <stdio.h>

#define NUMBER 100
#define LINE_SIZE 50

char *GetItem(char *wp, char *buf, int size);

struct person{
char *all;
char *fname;
char *lname;
char *age;
}p[NUMBER];
0099デフォルトの名無しさんNGNG
int main(int argc, char *argv[]){
int i;
char *wp;
FILE *fp;

if ((fp = fopen("test1.txt","r")) == NULL) {
printf("file open error!!\n");
return 0;
}
for(i=0; i<NUMBER; i++){
if(fgets(p[i].all, LINE_SIZE, fp) == NULL)
break;
wp = p[i].all;
if((wp = GetItem(wp, p[i].lname, 10)) == NULL){
printf("error(1)\n");
break;
}
if((wp = GetItem(wp, p[i].fname, 12)) == NULL){
printf("error(2)\n");
break;
}
0100デフォルトの名無しさんNGNG
if((wp = GetItem(wp, p[i].age, 3)) == NULL){
printf("error(3)\n");
break;
}
if(*wp != '\0'){
printf("error(4)\n");
break;
}
}
fclose(fp);
return 0;
}
0101デフォルトの名無しさんNGNG
char *GetItem(char *wp, char *buf, int size)
{
int i;

buf[0] = '\0';
while(*wp == ' ' || *wp == '\t')
wp++;
if(*wp == '\0'){
return(NULL);
}
for(i=0; i<size; i++,wp++){
if(i >= size)
return NULL;
buf[i] = *wp;
if(*wp == '\n'){
buf[i] = '\0';
return(wp);
}
if(*wp == ','){
wp++;
buf[i] = '\0';
return wp;
}
}
return wp;
}
すみません、インデントが全部消えて読みにくいかと思いますが
どうかお願いします。
0102デフォルトの名無しさんNGNG
struct person{
char *all;
char *fname;
char *lname;
char *age;
}p[NUMBER];

この構造体の中身はいつ領域が割り当てされてるの?
0103デフォルトの名無しさんNGNG
allはどこの領域を指してるの?
0104デフォルトの名無しさんNGNG
>>102

質問の意味がよく分かりません
0105デフォルトの名無しさんNGNG
>>104

struct person{
char all[255];
char fname[255];
char lname[255];
char age[255];
}p[NUMBER];
010698NGNG
>>102
領域を割り当てるということはmallocか何かを使うのでしょうか?
宣言するだけではダメですか?

>>103
とりあえず1行を読み込んで格納したかったのですが…
0107デフォルトの名無しさんNGNG
アドバイスすると
personでポインタを使うならmallocして領域を確保する必要がある。
allはいらない。ループのところで用意すればいいし。
持っておく必要があるなら別だけど。
personに入れる関数をつくってエラーを返すようにしてもいいと思う。
GetItemはループの判定式のところで\nや,を判定した方がすっきりする。
010898NGNG
>>105
うーん、そのように修正してもダメでした。

どうやらmainの上のほうの
for(i=0; i<NUMBER; i++){
 if(fgets(p[i].all, LINE_SIZE, fp) == NULL)
  break;
でbreakが実行されてしまうみたいなんですがどうしてでしょうか?
010998NGNG
>>107
どうもありがとうございます。やってみます
0110デフォルトの名無しさんNGNG
fgetsってポインタを返すのか?
読み込んだ文字数とかじゃなかった?
調べなきゃわからんが。
011184NGNG
>>98
本題とは少しずれるが、GetItem関数の第一引数は
constとしてポインタを変化させない方が親切だな。
同じ値を返しているんだから。
こうすることで、入力値を変化させずに
結果が得られるので少しは汎用的になる。
当然、GetItemにポインタ変数が1つ増えるが。

ちなみにGetItem関数のfor内にある初めのif文は無駄だと思う。

サイズが決まっているならポインタではなく
配列にしてもいいと思う。サイズ小さいし。
だから...

enum { PERSON_FNAME_SIZE=10, PERSON_LNAME_SIZE=12, PERSON_AGE_SIZE=3 };
struct person{
char all[PERSON_FNAME_SIZE+PERSON_LNAME_SIZE+PERSON_AGE_SIZE];
char fname[PERSON_FNAME_SIZE];
char lname[PERSON_LNAME_SIZE];
char age[PERSON_AGE_SIZE];
}p[NUMBER];

だね。で、GetItemにあるマジックナンバーは
enumで宣言したものに置き換える。
これでサイズ修正の際の修正箇所が減るね。
0112デフォルトの名無しさんNGNG
>>110

成功した場合は 第1引数で指定したポインタを返す。
EOF以外の文字が検出されなかった場合にNULLを返す。
0113デフォルトの名無しさんNGNG
>>108
動いたよ。
fgetsは改行が入るのでerror4が出たが。
0114デフォルトの名無しさんNGNG
>>111
それはちょっとおかしくない?
011584NGNG
>>114
どこが?
いくつか書いたからどこのことかわからないw
0116デフォルトの名無しさんNGNG
本題とは少しずれるが、GetItem関数の第一引数は
constとしてポインタを変化させない方が親切だな。

当然、GetItemにポインタ変数が1つ増えるが。

char all[PERSON_FNAME_SIZE+PERSON_LNAME_SIZE+PERSON_AGE_SIZE];
011784NGNG
>>116
>本題とは少しずれるが、GetItem関数の第一引数は
?constとしてポインタを変化させない方が親切だな。
>当然、GetItemにポインタ変数が1つ増えるが。
っていうのとあのサンプルコードは別物だよ。
まぁ、流れでわかるとおもうけど。
0118デフォルトの名無しさんNGNG
この例だとmallocいらなくない?
ポインタ使わず構造体に直接アクセスしてるし
0119デフォルトの名無しさんNGNG
>>117
さらに分からなくなったよ。
char *GetItem(char *wp, char *buf, int size)
をどう変えるの?
0120デフォルトの名無しさんNGNG
>>118
文字を入れる領域はどこかに必要だと思うぞ。
0121デフォルトの名無しさんNGNG
csvの読み込みって昔課題でやったことあるけど
こんなんだっけ?
0122デフォルトの名無しさんNGNG
「プログラミング作法」の第4章を推奨
0123デフォルトの名無しさんNGNG
>>113
動いたの?俺はその前にfgetsの段階でNULLを返して止まる。
0124デフォルトの名無しさんNGNG
>>89
↓こんなのどう?
http://pc2.2ch.net/test/read.cgi/tech/1047978546/361
012598NGNG
色々指摘ありがとうございました。
しかし最後に、修正した部分と無関係になぜか>>123の方の
言うとおりどうしてもfgets()で一行の読み込みに失敗します。
>>98のようなファイルがおかしいのでしょうか?それとも別の原因があるのでしょうか。
何度も済みませんが、どなたか教えてください
0126デフォルトの名無しさんNGNG
とりあえず、今あなたのコードがどうなってるか良くわかりません。
私は>>98のコードから>>105さんが指摘してる事を訂正しました。
そして、main関数の変数宣言直後に

wp = (char*)malloc(いっぱい);

みたいなのを加えました。それで>>113さんがerror4が出るのが当然のように書いてるので、

if(*wp != '\0')・・・・

の部分を消しました。
これで最後まで逝きます。
0127デフォルトの名無しさんNGNG
あ、malloc要らなさそう。ちゃんと読みます。ごめんなさい
0128デフォルトの名無しさんNGNG
test1.txtにデータを用意してない。
0129デフォルトの名無しさんNGNG
ソレハワラウトコロカ?
013098NGNG
コードは構造体のメンバのallを消して>>105さんの言うとおり
ループ内で用意しています。また、今はmalloc()を消して
構造体のメンバは配列にしています。

VCを使ってるのでtest1.txtのはDebugフォルダに置いてます。
データもとりあえず>>98の2行がちゃんと入っています。
それなのに何故かfetsがどうしても失敗してしまうんです。
どなたか分からないでしょうか?
0131デフォルトの名無しさんNGNG
>test1.txtのはDebugフォルダに置いてます。
ソースファイルと同じディレクトリに同じ物を置いてもダメなの?
0132デフォルトの名無しさんNGNG
ループのところだけ貼り付けてくれ。
0133むんNGNG
あのぅ。
「PGM形式画像を読み込み、回転・白黒反転等の処理をして、再びPGM形式で出力するプログラムを作れ」
という課題をやっているのですが、さっっぱりわかりませぬ。
まったくのC++初心者・2ちゃん初心者です。
メモリ領域を動的に(new・deleteを使って)確保せよ。という補足付きDeath。
0134デフォルトの名無しさんNGNG
読み込みと回転と白黒反転と出力をさせればいいだけだろ。
とりあえずデータをどう形式で持てばいいか考えろ。
0135デフォルトの名無しさんNGNG
×どう形式
○どういう形式
0136デフォルトの名無しさんNGNG
>>133
反転は元の値aなら255-a
0137むんNGNG
あの、バカなんで全くわかりませぬ。
自分で書くの初めてなんで。
0138動画直リンNGNG
http://homepage.mac.com/hitomi18/
0139デフォルトの名無しさんNGNG
aが0なら255にする。aが255なら0にする。
だから255-a
0140デフォルトの名無しさんNGNG
PGM形式画像にどういうデータが入ってるのか調べてこいよ。
0141むんNGNG
わかりました。出直します
0142デフォルトの名無しさんNGNG
http://cgi2.html.ne.jp/~piro/bbs/wforum.cgi?mode=allread&no=2397&page=0
0143デフォルトの名無しさんNGNG
>>142
キタ━(゚∀゚)━( ゚∀)━(  ゚)━(  )━(゚  )━(∀゚ )━(゚∀゚)━!!!!
こいつ自分で勉強するきないのかよ
0144紺野あさみNGNG
  ∋8ノノハ.∩   http://www.togoshi.ginza.st/konno/
   川o・-・)ノ <先生!これらのお知らせがありました!
http://togoshi.ginza.st/konno/konno02.html
http://www.togoshi.ginza.st/konno/konno09.html
http://togoshi.ginza.st/konno/konno01.html
http://www.togoshi.ginza.st/konno/konno10.html
http://togoshi.ginza.st/konno/konno04.html
http://www.togoshi.ginza.st/konno/konno08.html
http://togoshi.ginza.st/konno/konno06.html
http://www.togoshi.ginza.st/konno/konno07.html
http://togoshi.ginza.st/konno/konno05.html
http://www.togoshi.ginza.st/konno/konno03.html
0145デフォルトの名無しさんNGNG
>98
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define NUMBER 100
#define LINE_SIZE 50

struct person{
char* all;
char* fname;
char* lname;
char* age;
} p[NUMBER];
0146デフォルトの名無しさんNGNG
>>142より

投稿時間:2003/05/18(Sun) 20:52  ←
投稿者名:ぼんど
URL :
タイトル:Re^4: PGMファイル読み込み・処理・出力

ありがとうございます。
<<<参考に、頑張ってみます。>>>

10分後
>>133 ←
0147デフォルトの名無しさんNGNG
>98
int main(int argc, char *argv[]) {
int i;
char buff[LINE_SIZE][NUMBER];
FILE *fp;

if ((fp = fopen("test1.txt","r")) == NULL) {
printf("file open error!!\n");
exit(1);
}

for(i = 0; i < NUMBER; i++) {
if(fgets(buff[i],LINE_SIZE, fp) == NULL) {
break;
}

p[i].fname = strtok(buff[i], ",");
p[i].lname = strtok(NULL, ",");
p[i].age = strtok(NULL, "\n");
}

fclose(fp);

return 0;
}
014898NGNG
>131
0バイトのtest1.txtがソースのフォルダに作成されていたようで、
それにデータ加えたらいけました・・・

済みません、お騒がせしました。
0149デフォルトの名無しさんNGNG
int a[10] = {0,1,2,3,4,5,6,7,8,9}を入れ替えをして
9,8,7,6,5,4,3,2,1,0と画面に表示させるにはどうすればいいのでしょうか?
0150デフォルトの名無しさんNGNG
for (i=0,j=9; i < j; i++, j--)
int tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
015198NGNG
>>145
ありがとうございます。そんな短くなるんですね
0152デフォルトの名無しさんNGNG
aのサイズを調べてポインタでデクリメントする
0153デフォルトの名無しさんNGNG
using namespace boost::lambda;
std::reverse(a, a + 10);
std::foreach(a, a+10, std::cout << _1 << '\n');
0154デフォルトの名無しさんNGNG
しょうがねえなあ、神でもやってやるか。
#include<stdio.h>
main(){FILE *fr,*fw;int w,h,m,i,v;char b[1024];scanf("%s",b);printf("%s\n",b);sc
anf("%s",b);printf("%sのnega\n",b);scanf("%d %d %d",&w,&h,&m);printf("%d %d\n%d\
n",w,h,m);for(i=w*h;i>=0;i--){scanf("%d",&v);printf("%d ",m-v);}return 0;}
0155デフォルトの名無しさんNGNG
すみません。。お願いしたいのですがよろしいですか?

演習 (文字の読み込みと判定・終了、分岐)

入力された 語(word)の数を数えるプログラムをつくりなさい。
語(word)の数え方は、次の通り。
A job applicant needs to be enthusiastic.

語(word):一つ以上の連続する文字列。 この場合、語の数は7。
語と語の間には空白、タブ、改行がくるものとする。
空白の判定: ‘ ‘
タブの判定: ‘\t’
改行の判定: ‘\n’

どんな文字でも読み込む必要があるから、getchar( ) を使う必要がある。
読み込んだ1文字が空白、タブ、改行でなければ、文字が連続している状態
である。
空白、タブ、改行であれば一つの語が終了したのだから語のカウントを1
上げる。
読み込んだ1文字が空白かタブか改行かそれ以外かを判定する必要がある。
if 文でもswitch―case文でもよい。

入力の終了を判定するための文字は自分で特定の文字をきめてもよいが、
EOFで終了させたならば、CTRL キーを押しながら Z キーを押す。
     CTRL キー + Z はEOF即ちー1

<出力方法>
** INPUT □□□ WORDS **

                3桁の10進数
0156デフォルトの名無しさんNGNG
使い方、
gcc nega.c -o nega
nega < input.pgm > output.pgm

制限
1行目はP2であること
2行目は#から始まるコメントで空白,タブなどを含まないこと
3行目は画像のサイズを幅、高さの順に示していること
4行目は最大輝度(ex.15)を示すこと

あ、わりいわりい。最後の行、これに差し替えてくれ。
n",w,h,m);for(i=0;i<w*h;i++){scanf("%d",&v);printf("%d%c",m-v,(i%w!=0||i==0)?' ':'\n');}return 0;}

0157デフォルトの名無しさんNGNG
>>149
さすがに>>153のboost使ってるのは参考にしない方が良いと思われ。

#include <iostream>
#include <iterator>
#include <algorithm>

int main()
{
  int a[10] = {0,1,2,3,4,5,6,7,8,9};
  std::reverse(a, a+10);
  std::copy(a, a+10, std::ostream_iterator<int>(std::cout, " "));
}

これで良いかと。
0158デフォルトの名無しさんNGNG
>>157
何が違うつもりなんだろう。
0159デフォルトの名無しさんNGNG
>>155
//>>155 こんなもんか
//コピペしても全角スペースがあるぞ
int count;
char c;
while(1)
{ c=getchar();
  if(c==EOF)
   break;
  switch(c){
  case ' ':
  case '\t':
  case '\n':
    count++;break;
  defualt:
    break;
  }
}
//ちなみに無限ループにする必要はなくせるので
//そんくらいは自分で考えてくれ。ソースなおすの面倒だし



0160デフォルトの名無しさんNGNG
#include <stdio.h>
int main(){
char c;
int count=0,flag=-1;
while((c=getchar())!=EOF){
if(c=='.') break;//.で終了
if(isalpha(c)){
if(flag==-1) {
flag=0;
}
}else{
flag=-1;
count++;
}
printf("[%d]",flag);
}
if(flag==0) count++;
// printf("%d",count);
}
こんな感じかい?
0161デフォルトの名無しさんNGNG
int count = 0;
std::string word;
while( std::cin >> word ) ++count;

ワーイ、C++サイコー
0162デフォルトの名無しさんNGNG
>>メモリ領域を動的に(new・deleteを使って)確保せよ。という補足付きDeath。
忘れてた&必要ないような気が。とりあえず、これに差し替えてくれ。

main(){FILE *fr,*fw;int w,h,m,i,v;char *b;b=(char*)malloc(1024);scanf("%s",b);printf("%s\n",b);sc

0163デフォルトの名無しさんNGNG
newしてないし... 逝ってきます...
0164デフォルトの名無しさんNGNG
>>159
わーい。早仕事ですサンクス
学校でのC言語課題でした。本文そのまま。
一応自分でループ再検討してもうちょっと考えてみます。
ありがとうでした。
0165デフォルトの名無しさんNGNG
空白の連続とかを処理しないといけないから
wordの中にいることを示すフラグとかがいると思うのだが。
0166デフォルトの名無しさんNGNG
nを入力すると、英文がかかれたtest.txtをn文字目で強制改行して表示するプログラムを教えて下さい。
0167デフォルトの名無しさんNGNG
文字数をカウントしてnで改行を出力。
0168デフォルトの名無しさんNGNG
>>166
#include <stdio.h>
#include <stdlib.h>

int main()
{
FILE *fp;
char *buf;
int n;

scanf("%d",&n);
fp=fopen("test.txt","r");
if(!fp) return 1;
buf=malloc(n+1);
if(!buf){fclose(fp); return 1;}
while(fgets(buf,n+1,fp))
puts(buf);
free(buf);
fclose(fp);

return 0;
}
0169168NGNG
おっと、英文の途中に改行があると誤動作するな。
0170168NGNG
>>166
#include <stdio.h>
#include <stdlib.h>

int main()
{
FILE *fp;
int c,i,n;

scanf("%d",&n);
fp=fopen("test.txt","r");
if(!fp) return 1;
for(i=1;(c=fgetc(fp))!=EOF;i++){
putchar(c);
if(!(i&n))
putchar('\n');
}
fclose(fp);

return 0;
}
0171デフォルトの名無しさんNGNG
>>166
この課題流行りなのか?
うちの大学も同じ課題なんだが・・・
0172デフォルトの名無しさんNGNG
if(!(i&n))
0173168NGNG
>>172
打ち間違い(^_^;)
if(!(i%n))ね
0174デフォルトの名無しさんNGNG
同じ大学なんだろうな
0175デフォルトの名無しさんNGNG
>>174
そして半数が同じソースを提出する、っと(笑)
0176デフォルトの名無しさんNGNG
>>175
教授も2chを見ていて再提出っと(&2ちゃんねらだとばれる)
0177170NGNG
#include <stdlib.h>を消し忘れた・・・まあいいか。
0178デフォルトの名無しさんNGNG
>>166
大学ってこんなヘボい課題がでるんですか?
0179157NGNG
>>158
標準ライブラリのみしか使ってませんが何か?
0180171NGNG
>>176
ということは教授も生徒に2ちゃんねらだとばれるっと
0181デフォルトの名無しさんNGNG
>>149
遅レスだが、こんな方法もある。

/* ※注:全角空白が在るから、そのままコピペするなよ! */
#include <stdio.h>
#include <stdlib.h>

int compare( const void *a, const void *b )
{
  return (*(int *)b) - (*(int *)a);
}

int main( void )
{
  int a[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
  qsort( a, sizeof(a)/sizeof(a[0]), sizeof(a[0]), compare );
}
0182デフォルトの名無しさんNGNG
整数を一つ読み込む。その値は、午前0時からの秒数とする。
0以上、86400未満である。この値を時、分、秒に置き換えて表示するプログラムを書け。
例えば52311であれば 14:31:51と表示されればよい。

という宿題なのですが・・・ 式は作れたのですが
14:31:51という風に表示できません(´・ω・`)
どうか哀れな私に教えてくださいませ
0183デフォルトの名無しさんNGNG
>>192
どこまで出来たかうpしる!
0184デフォルトの名無しさんNGNG
表示するまでのコードをここに書きましょう
0185183NGNG
>>184
(´・ω・`) ケコーンしる!
0186デフォルトの名無しさんNGNG
>>182
printfをうまく(というほどでもないけど)使え。
0187デフォルトの名無しさんNGNG
スマソ 出来ました・・・
printf("%d:%d:%d\n", ji,fun,byou);
これで・・・出来ました・・・あまり頭で分かってないですが
0188(´・ω・`)NGNG
一応
#include <stdio.h>

int main(void)
{
int x, byou, fun, ji;

printf("x :");
scanf("%d", &x);

ji=x/3600 ;
fun=x%3600/60;
byou=x%3600%60;
printf("%d:%d:%d\n", ji,fun,byou);
return (0);
}
0189デフォルトの名無しさんNGNG
>>187
%dは%02dにした方がいい。
0190(´・ω・`)NGNG
>>189 理由を教えて欲しいです。
動作しましたが違いが分からないので今後に生かせませぬ
(´-`).oO(もしや常識なのだろうか・・・)
0191デフォルトの名無しさんNGNG
どっちでもいいんじゃない?
6:12:3と
06:12:03の違い
0192デフォルトの名無しさんNGNG
>>190
一桁の場合、自動的に0を付加してくれる(02:05:08のように)
0193(´・ω・`)NGNG
おぉおぉぉおぉぉ スゲー!
サンクスです
0194デフォルトの名無しさんNGNG
閏秒とかは考えなくていいの?と出題者に突っ込んどこうぜ
0195デフォルトの名無しさんNGNG
>>188
せめて

 ji → hour
 fun → min
 byou → sec

にしようや。
あと、計算式は

 sec = x % 60;
min = x / 60 % 60;
 hour = x / 3600;

の方がスッキリするだろ。
0196(´・ω・`)NGNG
閏秒って??
>>195なるほど、すっきりしました
(´-`).oO(奥が深いな)
0197rNGNG
>>194
年によって地球の自転速度って違ったりするからなぁ。
0198デフォルトの名無しさんNGNG
>>196
聞く前にちょっとは検索をするクセつけましょうね
0199デフォルトの名無しさんNGNG
>>197
ワラタ
0200デフォルトの名無しさんNGNG
>>199
え?どこが笑う個所なの?
0201デフォルトの名無しさんNGNG
100個のランダムな整数を作り、ファイルhogeに出力するプログラムと、
それを読み込み、intの配列に格納するプログラムをお願いします。ちなみにC++です。

本当はその後ソートがあってそれは分かるのですが、入出力で
混乱してしまったので・・よろしくお願いします
0202デフォルトの名無しさんNGNG
#include<time.h>
#include <io.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
int main(){

int fh=_open("unko","_O_BINARY|_O_CREAT|_O_WRONLY |");
srand(time(NULL));

for(int i=0;i<100;i++){
int j=rand();
_write(fh,&j,sizeof(int)),
}
_close;
int I[100];
_open("unko",_O_BINARY|_O_RDONLY);
for(int i=0;i<100;i++)
{
_read(fh,&I[i],sizeof(int));
}
_close(fh);
}
http://www.microsoft.com/japan/developer/library/vccore/_crt__open.2c_._wopen.htm
0203デフォルトの名無しさんNGNG
間違い
int fh=_open("unko",_O_BINARY|_O_CREAT|_O_WRONLY );

Cだがナ-
0204デフォルトの名無しさんNGNG
>>201
出力するファイルの形式は?
0205デフォルトの名無しさんNGNG
>>202
ありがとうございます。
できればシステムコール(ですよね?)を使わないプログラムで
お願いしたいのですが・・贅沢言ってすみません。

>>204
特に指定されてないんですが
1 4 7 2
もしくは
1
4
7
2
みたいにデータが並ぶテキストファイルです。
0206デフォルトの名無しさんNGNG
宜しくお願いします。
問 下のソースを二つのファイルに分割して実行できるようにせよ
です。
#include<stdio.h>
#include<process.h>

static int count;
main()
{
int generation;
for(;;)
{ printf("\n>何代目ですか? ");
scanf("%d",&generation);
count=0;
if ( generation==0 )
exit(1);
pope(generation);
printf("\n関数popeは%d回呼ばれました。",count);
}
}
pope(n)
int n;
{
count++;
if ( n==1 )
printf("ヨハネ ");
else if ( n==2 )
printf("パウロ ");
else pope(n-2),pope(n-1);
}
0207デフォルトの名無しさんNGNG
普段使っているストリーム系ではなく、
意図的に低水準を使ったためにあちこち破綻している>>202
0208デフォルトの名無しさんNGNG
>>205
>特に指定されてないんですが

じゃあ、まずは出力するファイルのファイル形式を自分で設計しる!
話はそれからだ。
0209デフォルトの名無しさんNGNG
>>206
どう考えても、コンパイルが通りそうにないソースだが?
0210206NGNG
>209さん
コンパイラでは警告は2つ出ますが(VC++です
エラーはでませんでした。
0211デフォルトの名無しさんNGNG
藻まいらにお願いしまつ。 キーボードから入力した数を1の補数と2の補数として出力するプログラムをCでつくってください
0212デフォルトの名無しさんNGNG
>>210
警告を無視するな。
折角、プログラムの欠点を指摘してくれているんだ。
0213206NGNG
問をそのまま写したんですが。
もっとよく見てみます。
0214206NGNG
関数が定義されてませんでしたね
再びよろしくお願いします。
二つのファイルに分割して実行せよ です。
#include<stdio.h>
#include<process.h>

static int count;
main()
{
int generation;
for(;;)
{ printf("\n>何代目ですか? ");
scanf("%d",&generation);
count=0;
if ( generation==0 )
exit(1);
pope(generation);
printf("\n関数popeは%d回呼ばれました。",count);
}
}
pope(n)
int n;
{
count++;
if ( n==1 )
printf("ヨハネ ");
else if ( n==2 )
printf("パウロ ");
else pope(n-2),pope(n-1);
}
0215206NGNG
うう、3行目の
static int count;
の上に

pope(n);
を追加お願いします
0216デフォルトの名無しさんNGNG
>>206の様なプログラムが教科書で使われてるのか…。
世も末だな…。(;´Д`)
0217デフォルトの名無しさんNGNG
>>201>>205 ほんとオートドックスなやつです。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
int num1[100],num2[100],a;FILE*fp;
srand(time(NULL));for(a=0;a<=99;a++)num1[a]=rand();
if((fp=fopen("hoge","w"))==NULL){puts("fileOpenMiss");exit(1);}
for(a=0;a<=99;a++)fprintf(fp,"%d\n",num1[a]);fclose(fp);
if((fp=fopen("hoge","r"))==NULL){puts("fileOpenMiss");exit(1);}
for(a=0;a<=99;a++)fscanf(fp,"%d",&num2[a]);fclose(fp);
for(a=0;a<=99;a++)printf("%-8d",num2[a]);//確かめるためのもの
printf("改行を押してください 終了します");getchar();return 0;
}
0218デフォルトの名無しさんNGNG
>>211

入力数値の条件(何進数とか何桁とか)ちゃんとかけ
それだけぢゃできるわけなかろ

いや、すまん。ネタだったか。
0219206NGNG
はい。
教科書といっても印刷したプリントですが^^;
宜しくお願いします
0220211NGNG
すいません。10進数で入力、桁数は4です。
申し訳ないです。
0221デフォルトの名無しさんNGNG
OldStyleを知らない奴はうだうだ言わずに黙ってろ。
>>206
その問題は古い古いスタイルで書かれているのだが、
ほんとうにVCでコンパイルしていいのか?
で、問題の趣旨は、main()とpope()を別のファイルに書くということか?
0222デフォルトの名無しさんNGNG
>>206
[ファイル1]
#include<stdio.h>
#include<process.h>

extern void pope( int n );
int count;

int main( void )
{
  int generation;

  for(;;)
  {
    printf( "\n>何代目ですか? " );
    scanf( "%d", &generation );
    count = 0;
    if( generation==0 )
    {
      exit(1);
    }
    pope( generation );
    printf( "\n関数popeは%d回呼ばれました。", count );
  }
  return 0;
}
0223デフォルトの名無しさんNGNG
>>206
[ファイル2]
#include<stdio.h>
#include<process.h>

extern int count;

void pope( int n )
{
  count++;
  if( n==1 )
  {
    printf("ヨハネ ");
  }
  else
  {
    if( n==2 )
    {
      printf("パウロ ");
    }
    else
    {
      pope(n-2),pope(n-1);
    }
  }
}


後は、それぞれのファイルをコンパイル後、リンクしる!
0224206NGNG
二つに分解して実行できるようにせよ。
ですので、まずは別にファイルに書いたあとにmake?ファイルというものを作るみたいです。
0225デフォルトの名無しさんNGNG
おいおい、それならVCはないだろう・・・
0226206NGNG
ええと
lsic86です。すみません。
0227デフォルトの名無しさんNGNG
>>206
if系に{}を付けずに2文以上書く方法を初めてみました。
forのは知っていたのですが、同じようにできたんですね。
0228デフォルトの名無しさんNGNG
>>211
// 入力部分はしらね、ビット幅もしらね
// 補数を2進表示しろとも書かれてないから10進のまま表示
void DispComplement(int number)
{
printf("1's complement is %d\n", ~number);
printf("2's complement is %d\n", -number);
}
0229デフォルトの名無しさんNGNG
>>227
そんなつまらん書き方真似するなよ。
普通にブロック化した方が読みやすいしメンテナンス性も高いからな。
0230デフォルトの名無しさんNGNG
>>229
禿同
0231デフォルトの名無しさんNGNG
>>224
2行目の接続詞が意味不明です
0232227NGNG
>>229>>230
はい、分かりました。
0233デフォルトの名無しさんNGNG
>>206
>>222-223のようにソースを分解し、
makefileはこんな感じに書けばいい。

[makefile]
pope.exe: pope1.obj pope2.obj
 lcc -o pope.exe pope1.obj pope2.obj

但し、スタイルも古ければlsicローカルなmakefileなので
実務では殆ど役に立たないので覚悟しておくように。
0234デフォルトの名無しさんNGNG
>>206
何をするコードなの?意味が判りません。
>2つのファイルに分割
.Cファイルと、.hファイルに分けて書くのではダメ?
0235206NGNG
>231さん
すみません
224の上の行はプリントに書いてあった事です。
見づらくてすみません。
0236デフォルトの名無しさんNGNG
>>234
>何をするコードなの?意味が判りません。

コンパイル・リンクし、実行してみれ!
0237234NGNG
>>236
実行はしてみたのですが、コードの通り再帰して文字列が表示されるだけで。
なんかのゲームなんですか?
0238206NGNG
>233さん
ありがとうございます。
先生もそう言ってた様な気がします。
>234さん
昔のエロイ人は、自分の名前を歴代の偉い人の名前を組み合わせた例があったようです。


objファイルはコマンドプロンプトでどう入力すれば作れますか?
0239デフォルトの名無しさんNGNG
>>211

入力数値(負の値)を補数表示するならこれでいいかな

#include <stdio.h>

int main(void)
{
int x;
scanf("%d",&x);
printf("1の補数:%d\n",x+9999);
printf("2の補数:%d\n",x+10000);
return 0;
}

入力数値(正の値)の補数をとる、ってことなら、多少変更してくらはい
0240234NGNG
>>238 なるほど、分かりました。ありがとう。
0241デフォルトの名無しさんNGNG
>>206
>make: Don't know how to make pope1.obj
とエラーが出たなら、
pope1.obj: pope1.c
lcc -c -o pope1.obj pope1.c
をmakefileに追加。

それにしても、承知でそんな授業やってるのか・・・
0242デフォルトの名無しさんNGNG
ttp://google.com/search?q=法王の名前%20再帰
0243デフォルトの名無しさんNGNG
プログラムをC言語で作成し、
小さい方から順に1000番目、2000番目、…、100,000番目まで、
1000番目ごとの素数を表示しなさい。
また、これら100個の素数の和を表示しなさい。
配列を使わないで、解いていただきたいのですがお願いします
0244206NGNG
>241さん
エラーの内容は
C:\>make
make: makefile 2: missing ':' after ' lcc'
でした
0245デフォルトの名無しさんNGNG
>>206
makefileの書き方を勉強しろ。
取り敢えず、lccの左側はハードタブだ。
0246デフォルトの名無しさんNGNG
>>243
まずは素数の判定方法を勉強しる!
0247206NGNG
>206さん
タブ理解しました。ありがとうございます。
今度は

C:\>make
lcc -o pope.exe pope1.obj pope2.obj
lld @link.i
Unknown record type = 0x4C
pope1.obj+0x3: Invalid object module: Unknown record
**** Error 1

と出ました(TT
0248206NGNG
うあ
×>206さん
○>244さんです
0249206NGNG
あ、できたっぽいです。
みなさんありがとうございました
0250デフォルトの名無しさんNGNG
vcで作った.objが残ってない?

それでも不明なら、.objと.exeを削除した後でmakeしてそのログを全部晒してみて。
0251デフォルトの名無しさんNGNG
あぅぅ(><)
0252206NGNG
>250さん
えっとbcで残ったobjが同じディレクトリにあるとエラーが起きたみたいです^^;
pope1.c
pope2.c
makefile
の3つでmakeするとエラーありませんでした。
どうもありがとう
0253デフォルトの名無しさんNGNG
>>243

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

int IsPrime( int n ) {
    int max = (int)sqrt(n);
    int i = 2;
    while( i <= max && n % i != 0 )
        i++;
    return max < i;
}

int main( int argc, char** argv ) {
    int i = 2;
    int count = 0, sum = 0;
    while( count <= 100000 ) {
        if( IsPrime(i) ) {
            if( ++count % 1000 == 0 ) {
                printf( "prime[%d] : %d\n", count, i );
                sum += i;
            }
        }
        i++;
    }
    printf( "%d\n", sum );
}

「配列を使わない」って、「エラトステネスのふるいを使うな」か?
であれば、これでいいはず。
( 検算はして無いから、大ポカやってる可能性もあり。 )
0254デフォルトの名無しさんNGNG
intで収まる範囲か心配してしまう・・・
0255デフォルトの名無しさんNGNG
>>254
同じく・・・怖い。
0256デフォルトの名無しさんNGNG
素数定理 π(x) = x/log(x) は小さなxに対しても割と良い近似を与えるのだから
10万程度なら余裕でしょ
0257デフォルトの名無しさんNGNG
>>253
√の切捨てまで調べればそれでいいとは知らんかった。その値まで調べてたので
えらい時間がかかった。両方ともちゃんと同じ結果になりますね。中卒の弱点かな。
>>254-256
サイズは大丈夫でしたね。1299709までなので余裕です。
0258デフォルトの名無しさんNGNG
>>254-255
んじゃ
「while( count <= 100000 ) {」
を
「while( count <= 100000 && i < INT_MAX - 1 ) {」
とでもしとけばよろし。

( つーか、INT_MAXぎりぎりのコードなんて書いたこと無いから、
 普通どう書くのかは知らないけど。)
0259デフォルトの名無しさんNGNG
てか、intなんて32bit前提でコード書いてもいいんじゃない?
0260デフォルトの名無しさんNGNG
>>197
最近何年か閏秒がない年が続いてて、最長記録だそうな。
0261デフォルトの名無しさんNGNG
243です。
>>253のかたありがとうございました。
スーパー助かりました。
0262デフォルトの名無しさんNGNG
すいませんが質問です。
再帰的な関数を用いるプログラムと、main内でfor文を使って処理をするプログラムの2つを作りました。
実行結果はまったく同じです。
それでも実行時間には雲泥の差があります。
再帰的な関数を用いると、240秒かかったの対して、そうでない場合は、1秒未満でした。
再帰的な関数を用いると、こうも時間がかかってしまうのがなぜですか?
0263デフォルトの名無しさんNGNG
>>262
無駄なところで再帰を使ってんだろ

適材適所 by DIO
0264デフォルトの名無しさんNGNG
>>263
そうなんですか?
やったのはフィボナッチ数列を求めるプログラムなんですが、
定義通りに考えると、再帰関数を使った方がアルゴリズム的にも優れていると思ってたんですが。
0265デフォルトの名無しさんNGNG
>>264
アルゴリズム的に優れてないから遅いんじゃないのか?
もしくは再帰の使い方を少々間違ってるとか。
0266デフォルトの名無しさんNGNG
>>262
関数のオーバーヘッド。
ようするに、関数を呼ぶのに時間がかかる。
(なぜか、この「呼ぶ」という言い方に疑問を
 感じるのは俺だけか?)
0267デフォルトの名無しさんNGNG
>>266
調べてみます。
ちなみにソースはこんなかんじです。

int fib(int n)
{
if(n == 1)return 1;
if(n == 2)return 2;

return fib(n - 1) + fib(n -2);
}

で、再帰を使わない方が
for(i = 0 ; i < 45 ; i++)
{
data[i] = a + b;

printf("%d : %d\n",i + 1,data[i]);

b += a;
a = b - a;

}

intの限界まで出してます。
0268デフォルトの名無しさんNGNG
>>266
「呼ぶ」って用語は'call'の日本語訳だよね?
「呼ぶ」と訳さないとすればどう訳したらいいだろう?
0269266NGNG
>>266に追加。
メモリも大量消費だって。
そこまでは、知らんかった。
てか、関数ばかり作って、
main()内を軽くするのはおかしい。よく、参考書が
そんな感じだからって。
0270デフォルトの名無しさんNGNG
>>269
main内はごちゃごちゃさせない方が
いいと思うが
0271266NGNG
>>268
(電話を)かける。
0272266NGNG
>>270
けど、1回しか呼ばない関数(main抜き)書くのは
無駄なような気がする。
0273デフォルトの名無しさんNGNG
>>266
そんなことに疑問を持つようでは見込みないね。
0274デフォルトの名無しさんNGNG
二分探索を再帰使って書く人がいるけれど、あれは無駄だな。
クイックソートと違ってループですっきりとかけるし。
0275266NGNG
>>273
けど、プログラマにとって
mainから「呼ぶ」と
処理が「呼ばれた」の
どっちが重大かは、かなり意味があるぞ。

0276デフォルトの名無しさんNGNG
再起なんて時間の無駄。ラベルとgotoですべてかける。
0277デフォルトの名無しさんNGNG
>>272
そんなことに疑問を持つようでは見込みないね。
0278デフォルトの名無しさんNGNG
main()内を軽くするのはいろんな理由で僅かな呼び出しコストに勝るメリットがある。
それを無視して単純にmake()を肥大化させるのはナンセンス。

まぁ、細かい関数に分けすぎるコストは確かにあるので、
そんなときはC++でインラインにでもしてしまえばいいと。
0279デフォルトの名無しさんNGNG
>>278
make()...
コンパイルでもするのか?
0280デフォルトの名無しさんNGNG
>>279
ageでネタはやめてくださいです。。。
0281デフォルトの名無しさんNGNG
あはは、main()だね。
0282デフォルトの名無しさんNGNG
ふと、思ったがCのマクロ定義は
いくらなんでも使いずらいと思わない?
C++のインラインは楽勝なのに
0283デフォルトの名無しさんNGNG
どこが使いづらいんだ・・・・
0284デフォルトの名無しさんNGNG
>>267
f(n) → f(n-1) + f(n-2) → f(n-2) + f(n-3) + f(n-3) + f(n-4)
という具合にf(n-2)やf(n-3)などを複数回評価してしまうため遅くなる。
0285282NGNG
>>283
なにかとエラーが出やすい。
0286デフォルトの名無しさんNGNG
>>284
DYNAMIC PROGRAMMING
0287デフォルトの名無しさんNGNG
DYNABOOK PROGRAMMING
0288デフォルトの名無しさんNGNG
>>287
死ね
0289デフォルトの名無しさんNGNG
>>288
ネタスレは嫌いか?
悪かった。これからはここでふざけない。
0290デフォルトの名無しさんNGNG
>>282
違うものを同じ土俵で較べても意味ないだろ?
C++のインラインにできなくてCプリプロセッサのマクロでできることだってあるんだから。
#大抵は、それ以上にテンプレートを使って綺麗に実装できるけどそれは別の話。

>>267
綺麗なアルゴリズムが速い実装とは限らないってことですねぇ。
0291デフォルトの名無しさんNGNG
ダイ ダイ ダイ ダイ ダイナマン
0292デフォルトの名無しさんNGNG
>>289
中途半端なのが許せなかった。
0293デフォルトの名無しさんNGNG
>>267
結果は同じでもアルゴリズムは等価じゃないだろ。
0294デフォルトの名無しさん NGNG
c言語プログラムで
forを使って、配列を使わずに、2〜100までの素数を全て出力する
プログラムと
作成したプログラムで指定した数をnとしたとき、プログラムでどのくらい繰り返しが
行われるか、というのはどのように考えればよいのでしょうか?
適当な仮定をおいて、繰り返し回数をnの関数で与えるでしていこうと
おもってるのですけど、わかりません。

お願いします。
0295デフォルトの名無しさんNGNG
2〜100までなら素数を調べてputsで表示すればいいのでは。
puts("2 3 5 7...");
0296デフォルトの名無しさんNGNG
<<294
1つ目はこのスレッド内の素数求めるやつ探せ。
あるはず。
2つ目はnと繰り返し回数の関連がわからん。
ましてや、nの関数ってなんじゃ?
0297デフォルトの名無しさんNGNG
ばくはつー ばくはつー
0298デフォルトの名無しさんNGNG
>>296
禿しく意訳すると、自然数nまでの素数を求める関数p(n)の計算量ではないかと思われ。
0299デフォルトの名無しさんNGNG
素数計算の方法によるんじゃない。
エラトステネスのふるいを使う場合と、それぞれの数字に対してその数までの全ての数で割れないかみたいな判定する場合じゃ
計算量が全然違うし
0300デフォルトの名無しさんNGNG
「配列を使わず」ってんだから、ふるいは使うなってことだろう。
0301デフォルトの名無しさんNGNG
294を書き直しします。
わかりにくくてすいません。

forを使って(たとえ配列を知っててもつかわずに)、ある指定した数以下の素数を全て
出力するプログラムを作成しなさい。
また、作成したプログラムで指定した数をnとしたとき、プログラムでどのくらい繰り返しが
行われるを考察する
ということです。

よろしくお願いします
0302デフォルトの名無しさんNGNG
まあ、普通の人間が作るなら、こんな感じか?
マジックナンバーすまん

#include <stdio.h>

int isPrime(int number){
int i;
int m;
if(number <2) return 0;
m=(int)sqrt((int)number);
for(i=2;i<=m;i++){
if( (number % i) ==0 ) return 0;
}
return 1;
}

int main(){
int i;
for(i=0;i<100;i++){
if(isPrime(i)) printf("%d ",i);
}
}
0303デフォルトの名無しさんNGNG
おう、301を見て、わかった。
mainのところにint max;fscanf("%d",&max);を入れて、
for文の範囲を変えてくれ。

最悪の計算量なら簡単にでるんだが。
isPrimeを用いて、nが素数か判定するのに必要な計算量はO(n^0.5)、
これをmax個まで計算するならO(max*n^0.5)

理由:nが合成数(だっけ?)の場合、その約数の最大値は(n^0.5)となり、
n^0.5以上の数値をチェックしても意味が無いので。
0304デフォルトの名無しさんNGNG
キーボードから入力した文字列を反転させて表示するプログラムを作成せよ。
0305デフォルトの名無しさんNGNG
>>304
過去レスにまったく同じ質問が山ほどある。今の流行かよ!
0306デフォルトの名無しさんNGNG
>>305
しかも無駄に色んな制限つけるのな。
一番効率いい方法を教えるべきだと思うんだがなぁ
0307デフォルトの名無しさんNGNG
>>305
同じ学校の課題であること必死。
0308デフォルトの名無しさんNGNG
>>301 302
ありがとうございます。
それと、isPrimeを使わずにできませんか?
isPrimeをまだ習ってないので。。。

何度もすいません。
0309デフォルトの名無しさんNGNG
そりゃ自分で定義した関数なんだから習うはずが無い
0310デフォルトの名無しさんNGNG
>>308

309のそりゃ自分で定義した関数なんだから習うはずが無い

のとおりです。もし、自作関数も習ってないならこんな風かな?

----
#include <stdio.h>

int main(){
int i,j;
int max;
int ccount=0;
int m;

scanf("%d",&max);
ccount=0;

for(i=2;i<=max;i++){
m=(int)sqrt((double)i);
for(j=2;j<=m;j++){
ccount++;
if( (i % j) ==0 ) break;
}
printf("%d ",i);
}

printf("素数を求める数:%d 計算回数:%d",max ,ccount);
}

0311デフォルトの名無しさんNGNG
2角取りのゲームを自動で解くアルゴリズムってどんなの?
今のところ総当りしかおもいつかない、、
0312デフォルトの名無しさんNGNG
310>>
ありがとうございます。
さっそく、やってみようと思います。
0313デフォルトの名無しさんNGNG
>>311
とっさに思いついた一例。
一手目の状態では、取れる牌のペアは結構限定できる筈。
二手目以降は、前の手で取られた牌によって開かれるルートをチェックすればいい。
0314rNGNG
>>304
まだ見つけてなかったら。これを。
#include <stdio.h>
#include <string.h>
#define MAX 100
int main( int argc, char** argv ) {
    int i;
    char buf[ MAX + 1 ], rev[ MAX + 1 ];
    while( fgets( buf, 100, stdin ), strncmp( buf, "quit", 4
) != 0 ) {
        for( i = strlen( buf ) - 1; 0 <=
i; i-- )
            putchar(
buf[i] );
        putchar('\n');
    }
}
0315rNGNG
>>313
直前の操作で開かれたルートのチェックってすごい大変な気がする....
0316rNGNG
>>314
revって使ってないなぁ....
変なとこで改行入っちゃってるし。
0317デフォルトの名無しさんNGNG
大小の2整数を入力して、その間に存在する11で割りきれる整数を全て表示するプログラム
for文で書くそうです

for文の使い方がいまいちよくわかってないので書けないです
よろしくお願いします。。。
0318デフォルトの名無しさんNGNG
>>317
#include <stdio.h>

int main()
{
int x,y,t;

scanf("%d %d",&x,&y);
if(x>y)
t=x,x=y,y=t;
for(;x<=y;x++)
if(!(x%11))
printf("%d\n",x);

return 0;
}
0319rNGNG
>>318
まけた。
でも漏れもうpして見る。

>>317
#include <stdio.h>
#include <stdlib.h>
int main( int argc, const char** argv ) {
    if( argc < 3 ) {
        printf("usage: %s begin_number e
nd_number\n", argv[0] );
        return -1;
    }
    int i, limit = atoi( argv[2] );
    for( i = atoi( argv[1] ); i < limit; i++ ) {
        if( i % 11 == 0 )
            printf("
%d\n", i );
    }
    return 0;
}
0320デフォルトの名無しさんNGNG
>>317

#include <stdio.h>

int main()
{
 int i,tmp,min,max;
 scanf("%d %d",&min,&max);
 if( min>max ) {
  tmp = min;
  min = max;
  max = tmp;
 }

 for( i=min+1; i<max; i++ ) {
  if( (i % 11) == 0 )
   printf("%d\n",i);
 }
}
0321デフォルトの名無しさんNGNG
ハァ?

#include <iostream>
int main()
{
 int min,max;
 if( std::cin >> min >> max )
 {
  if( max < min ) std::swap( min , max );
  for( int i = min - ( min % 11 ) + 11 ; i < max ; i += 11 )
   std::cout << i << std::endl;
 }
}
0322rNGNG
>>321
そうか.... 「i += 11」なんだね....
気付かなかった鬱....
0323デフォルトの名無しさんNGNG
.cpp:7: `::swap' undeclared (first use here)
0324デフォルトの名無しさんNGNG
かがくセンタい
0325デフォルトの名無しさんNGNG
>>323
およー。通っちまってたよ。
#include <algorithm> が足りねーな。
0326デフォルトの名無しさんNGNG
>313 315
むちゃくちゃ 処理時間かかる上に無限ループにはまるのよ。。。
0327デフォルトの名無しさんNGNG
総当たりでいいんじゃない?
0328デフォルトの名無しさんNGNG
濡れもそんな希ガス
まぁ、裏付けはなく感覚的にそう思っただけだが
0329むんNGNG
あのぅ。先日カキコんでた者です。
内容をまた書くと、
『「PGM形式画像を読み込み、回転・白黒反転等の処理をして、再びPGM形式で出力するプログラムを作れ」
という課題をやっているのですが、さっっぱりわかりませぬ。
まったくのC++初心者・2ちゃん初心者です。
メモリ領域を動的に(new・deleteを使って)確保せよ。という補足付き』
です。
PGMファイルには、最初に「P2」とあって、
「476 618」と書いてあるのが用意する配列のデカさかと。
あとはいっぱい数字が並んでました。ファイル名は「sample.pgm」です。
0330デフォルトの名無しさんNGNG
投稿時間:2003/05/18(Sun) 20:52
投稿者名:ぼんど
URL :
タイトル:Re^4: PGMファイル読み込み・処理・出力

ありがとうございます。
参考に、頑張ってみます。
0331デフォルトの名無しさんNGNG
>>329
誰だか回答してくれていたと思うけど。
0332デフォルトの名無しさんNGNG
>>329
PGM画像フォーマットには、先頭2文字が'P2'のものと'P5'のものがあるので要注意。
0333デフォルトの名無しさんNGNG
すみません。教えてください。
コマンドライン引数について。
main関数の引数(int argc, char* argv[])の
argvは、コマンドラインに入力された文字列を
指すポインタの配列(の先頭アドレス)を受けとる、
というのは理解できましたが、ファイル名を読みこむには
どうしたらいいのでしょうか?画像ファイル(filename.ppm)
を読みこもうとしましたが、a.out filename.ppm
としてもなんの反応もなかったのですが、、。
自分が作ったプログラムの一部です。

int getint(fp)
FILE *fp;
{
int c, i, firstchar;

(略)}

int main(argc, argv)
int argc;
char **argv;
{
extern XImage *create_image();
int i,n;
char label[100];
char buf[30], *filename;
FILE *fp;
filename = argv[1];
0334デフォルトの名無しさんNGNG
>>333
今時そんな古い関数の書き方をするなよ・・・・

a.out filename.ppmとして起動すればfilenameは"filename.ppm"を指してくれるはずだよ。
0335デフォルトの名無しさんNGNG
別のところだと思うよ。
0336デフォルトの名無しさんNGNG
なにか反応するコードを書けば良いのでは
0337デフォルトの名無しさんNGNG
>>333
int main(argc, argv)
int argc;
char **argv;
{
extern XImage *create_image();

マタークスキルのない濡れにはこの辺がさっぱり理解できんが
ここは突っ込みどころなのか?

それにしてもpgmとはな・・・濡れも課題でやったばかりだな。
pgm形式大流行ですか
0338デフォルトの名無しさんNGNG
>>337
int main(int argc,char **argv)
{

これの古い書き方。
0339デフォルトの名無しさんNGNG
>>333
printf("%s\n",argv[1]);
でも入れてみてfilename.ppmがきちんと表示されれば、
argvが問題じゃないことはわかる。
0340デフォルトの名無しさんNGNG
>>338
なるほど、理解した
0341333NGNG
>>334>>335>>336>>337>>338>>339
皆様ありがとうございました。
アドバイスにしたがってもうちょっとがんばってみます。
0342デフォルトの名無しさんNGNG
pnm(ppm,pgm,pbmの総称)って、標準でもコンバータがあるくらいなんだから
展開するソースなんて結構転がってるんじゃないのか?
それを参考にすれば簡単だろうに。
0343デフォルトの名無しさんNGNG
(1)
int sum(int x)
{
if (x<10) return x;
return x%10 + sum(x/10);
}

(2)
int gcd(int x,int y)
{
if (y==0) return x;
else return gcd(y, x%y);
}

関数(1)(2)を再帰を使わずに書く方法をお願いします
0344rNGNG
>>343
(1)
#include <stdio.h>
int sum( int x ) { // 元
    if( x < 10 ) return x;
    return x % 10 + sum( x / 10 );
}
int sum_loop( int x ) { // 素直にループ展開
    int s = 0, cont = 1;
    while( cont ) {
        if( x < 10 ) {
            s += x;
            cont = 0;
        } else {
            s += x % 10;
            x /= 10;
        }
    }
    return s;
}
int sum_loop_opt( int x ) { // 完成
    int s = 0;
    while( 0 < x ) {
        s += x % 10;
        x /= 10;
    }
    return s;
}
0345デフォルトの名無しさんNGNG
あるクラスに高度な機能を持たせることによって、そのクラスの呼出元が生成した別の
インスタンスと処理内容が重なる場合のコーディングについてアドバイスなど頂けない
でしょうか。あまりC++は得意ではないのと、長文にご容赦を。

HTTPのサーバを想定してみてください。
まずクライアントから送られてくる要求は、read()?などでバッファに受け、その後
バッファ中のデータがどんなヘッダなのか解析しますね。

ヘッダ解析は逐次トークンを取得する処理を呼び出して解析に掛けるものとします。
ここでHTTPを処理するクラスをCHttp、ネット関連のI/O全体を統括するクラスをCNetIO、
トークンを処理するクラスをCTokenとでもしましょう。

仮にURLが冗長だったりして、トークン処理クラスが参照しているバッファ中のアドレス
が、バッファの領域からはみ出そうとしたとします。
このとき、トークン処理クラスは即時にエラーを返さず、read()関数など呼び出して後
のデータが来ていないかどうかタイムアウトするまで待つものとします。つまり、CToken
をエラーが起きるかあるいはCRが2つ来るまで、細切れになってやってくるパケット
を自動的に継ぎ足す処理をして適切にトークンを返すような便利なクラスにしたいのです。

で、この高機能?なCTokenですが、IO機能がダブっているようであまり美しくない?気も
します。CTokenを設計するにあたり、次の2案のどちらが妥当なのでしょうか。

案1:
CHttpで生成されたCNetIOのインスタンスへのポインタをCTokenのインスタンス生成時に
引き渡してやればCTokenはCNetIOの機能を呼び出せるから、そうせよ。

案2:
プログラム的に同じ機能のルーチン(CNetIO)を別々のクラスで各々生成するのは美しくない。
CTokenはバッファの最後に到達したら適切にエラーを返し、それ以上の処理はやめるような
簡単な機能にとどめるべきだ。継ぎ足し処理はCHttp内で行え。
0346デフォルトの名無しさんNGNG
>>345
案1がいいと思われ。
トークンといっても、リクエストラインとヘッダとボディを読む作法は
エンコードなどからして違うのでIOやトークンを抽象した機能単位は
あまりうまくいかない気が。例えばリクエストラインは改行が CR LF では
ない場合がある(HTTP 0.9)し、HTTPSではヘッダやボディは平文ではない。
手短に説明できることではないから実際にHTTPサーバを書こうとしているなら、
Java の Tomcat とか Ruby の WEBrick とかのソースを読むことを勧める。
0347rNGNG
>>345
なんかCの人っぽいなぁ。しかも熟練の。
「IO機能がダブってるようであまり美しくない」という感覚を信じればいいと思います。

次のようなクラスを作ると、きっと気持ち悪さが解消されるでしょう。
CReaderクラス:
 パケットの受信を常にポーリングし続け、
 受信したパケットを解析し、一つのCTokenを構成するのに足る分の
 データを受け取ったら、CTokenのインスタンスを生成する
 生成したCTokenのインスタンスは、CHttpに渡す。

これにより、CHttpで処理されるすべてのCTokenは
継ぎ足しの処理など無くても完全な情報を持ちえます。
0348デフォルトの名無しさんNGNG
>>346>>347 レスありがとうございます。C(Linux)では既にHTTPサーバを書き上げています。

トークン取得ルーチン内で%xxxエンコードの対応、CRLFの処理、セパレータの
種類による切り出し単位指定、バッファ溢れの監視など一手に引き受けています。
で、これらをVC++に移植したいのですが、なんせC++経験が乏しいので作法がわか
りませんでした。

まずトークンを処理する速度を稼ぐためにまずバッファに可能なだけ受け、それをえっちら
おっちら解析すればいいだろう、という考えがありました。だから必要なトークンが溜まる
まで待つ、というのは若干無駄があるかな、と思っていたのですが、ちょっと検討してみます。

蛇足ですが、C++という枠からはみ出ますが、Cのread()を使えば、ファイル記述子の違いだけで
ファイルであろうがネットであろうが、標準入力だろうが、同じルーチンでトークンの処理ができて
こりゃ便利!ということになりますね。ちょっと欲張り過ぎかもしれませんが…。
0349デフォルトの名無しさんNGNG
(1)
int sum(int x)
{
int s = x;
while (x>=10) {s += x%10; x /= 10;}
return s;
}

(2)
int gcd(int x,int y)
{
while (y != 0) { int tmp = x % y; x = y; y = tmp; }
return x;
}
0350デフォルトの名無しさんNGNG
310のプログラムを実際に100を入力し実行してみたところ、2〜100までのすべての
数が出力されました。
素数のみを出すのみはどうすればいいですか?
0351rNGNG
printf("%d ",i);
を
if( m < j ) printf( "%d ", i );
に変更してみたらどうでしょう?
# 未確認だけど...
0352デフォルトの名無しさんNGNG
回転シフトのアルゴリズム教えてください。
10110011が01100111のようになるやつです。
おねがいします。
0353デフォルトの名無しさんNGNG
バッファリング無しをやりたいんだけど、
(y/nが入力されたら次の処理に進みたい)

setvbuf(stdin, NULL, _IONBF, 0);
char c = getchar();

↑で結局バッファリングされるのは、
>http://www.linux.or.jp/JM/html/LDP_man-pages/man3/stdin.3.html
>ただし stdin が端末に接続されているときは、端末のドライバでバッファリング
>されている可能性があることにも注意すること。これは stdio のバッファリング
>とは全く関係なく存在しうる。 (実際、通常だと端末入力はカーネルによって
>行単位でバッファリングされている。)

とかいう事情なんでしょうか。
0354デフォルトの名無しさんNGNG
>>353 そう。UNIXではcursesライブラリを使うかPTYを操作するのが定石。
Stevens「詳解UNIXプログラミング」などを参照。
ttp://www.catnet.ne.jp/kouno/c_faq/c19.html も参照。
0355デフォルトの名無しさんNGNG
>>352
unsigned char rotate_left(unsigned char data) {
  unsigned char bit;
  bit = ((data & 0x80) == 0x00)? 0x00 : 0x01;
  return (data << 1) | bit;
}
0356デフォルトの名無しさんNGNG
>>351
10〜100までの数字がすべて出てきました。
0357デフォルトの名無しさんNGNG
>>355
ありがとうです。
0358デフォルトの名無しさんNGNG
>>352
#include <limits.h>

char c;

(c<<1)|(c>>(CHAR_BIT-1))
0359デフォルトの名無しさんNGNG
C++でメール送受信ソフトを作りたいんですけど
どうやったらいいですか?

機能としては、
別ファイルから送信アドレス、本文、などを読み込んで送信。
受信したアドレス、件名、本文を別ファイルに保存。

こんな機能のソフトをつくりたいんですけど。

何から作成したらいいのかさっぱし
どなたか助けてください。
0360デフォルトの名無しさんNGNG
メールコンポーネントを貼って終了、ハイ次!
0361デフォルトの名無しさんNGNG
>>359
こういうスレがあるみたいだから、一通り読んでみては。

2ちゃんねる発メーラー作成スレ
http://pc2.2ch.net/test/read.cgi/tech/1027162682/
0362デフォルトの名無しさんNGNG
>>359
メールソフトのソースを探してきて研究しろ。
0363rNGNG
>>356
ほんとか?こうだぞ?

#include <stdio.h>

int main(){
    int i,j;
    int max;
    int ccount=0;
    int m;

    scanf("%d",&max);
    ccount=0;

    for(i=2;i<=max;i++){
        m=(int)sqrt((double)i);
        for(j=2;j<=m;j++){
            ccount++;
            if( (i % j) ==0 ) break;
        }
        if( m < j ) printf("%d ",i);
    }
    printf("max:%d ccount:%d",max ,ccount);
}
0364あふぉNGNG
main関数から呼び出される次のような関数を作りたいのですがちょっと意味がわからないので
お願いします。

 整数の引数を1個だけ持ち、引数の値が直前に呼び出されたときの引数の値と等しければ1、
等しくなければ0を値として返す


0365デフォルトの名無しさんNGNG
>>350 もう一杯載っていると思うけど。
#include <stdio.h>
#include <math.h>
#define CHECK_MAX 100//調べる素数の範囲
int CheckSosuu(int num)
{
int i,root;
root=(int)sqrt((double)num);//素数か求める値の平方根(切捨て)まで調べればよいのでルート化する (int)(double)はキャスト。難しい場合は警告消しに付けると考える
if(num<=1)return 0;//1以下は素数ではない
for(i=2;i<=root;i++)//平方根まで繰り返す
if(num%i==0)return 0;//割ることができる数があると言うことは素数ではない
return 1;//上の処理で素数で無く無い事が分かったので素数である
}
int main(void)
{
int i;
for(i=0;i<=CHECK_MAX;i++)//調べる範囲まで繰り返す
if(CheckSosuu(i))printf("%d\n",i);//関数に渡して調べる 関数が素数であると判断した時表示する ifに==0等が無い時は!=0が付け加えられる
getchar();return 0;
}
0366デフォルトの名無しさんNGNG
>>364 こう?
#include <stdio.h>
int Kansuu(int num)
{
static int keep;int rtn;
if(keep==num)rtn=1;else rtn=0;
keep=num;
return rtn;
}
int main(void)
{
const char str[2][5]={"違う","同じ"};
printf("%s\n",str[Kansuu(1)]);
printf("%s\n",str[Kansuu(2)]);
printf("%s\n",str[Kansuu(2)]);
printf("%s\n",str[Kansuu(1)]);
return 0;
}
0367あふぉNGNG
>>366
どうもです
参照させてもらってます
0368rNGNG
>>366
初回の呼び出しが問題だけどね。
0369あふぉNGNG
>>366
なにぶんCをはじめて日が浅いもので、
解説おながいします
0370デフォルトの名無しさんNGNG
前回呼び出し時の値と比べるのだから、staticな変数が必要。それだけ。
0371rNGNG
>>366-367
漏れ版

#include <stdio.h>

int func( int n ) {
    static int first = 1, prev;
    int r = ! first && prev == n;
    prev = n;
    first = 0;
    return r;
}

int main( int argc, const char** argv ) {
    int i;
    for( i = 1; i < argc; i++ ) {
        const int n = atoi( argv[i] );
        printf("%d : %s\n", n, func( n ) ? "same" : "diff");
    }
}

    
0372366NGNG
>>368>>369
うん。始めは値が与えられてないからね。staticのカウンタを作って
初回のみ絶対0を返すとかを加えればいいかも。
0373あふぉNGNG
const char str[2][5]={"違う","同じ"};
printf("%s\n",str[Kansuu(1)]);
printf("%s\n",str[Kansuu(2)]);
printf("%s\n",str[Kansuu(2)]);
printf("%s\n",str[Kansuu(1)]);
の部分が分かりません
0374デフォルトの名無しさんNGNG
>>373
関数の戻り値を配列の添え字にしているだけ
0375あふぉNGNG
>>371
どうもです
0376デフォルトの名無しさんNGNG
>>371
stdlib.hは?
0377デフォルトの名無しさんNGNG
363、365>>
解説付でありがとうございます。
できました。
0378366NGNG
>>373
どこまで分からないか分からないけど。0を返す場合はstr[Kansuu()]は
str[0]となる。str[0]は"違う"の事だから、printfによって"違う"と
表示される。
0379動画直リンNGNG
http://homepage.mac.com/hitomi18/
0380379NGNG
http://www2.realint.com/cgi-bin/tbbs.cgi?pointc
0381あふぉNGNG
>>378
なるほど
サンクス!!
0382デフォルトの名無しさんNGNG
ランダムに生成した1000個の整数を配列に入れ、昇順にソートしてから順番に表示せよ。
0383デフォルトの名無しさんNGNG
#include <iostream>
#include <iterator>
#include <algorithm>
#include <cstdlib>
int main()
{
int v[100];
std::generate_n(v, 100, rand);
std::sort(v, v+100);
std::copy(v, v+100, std::ostream_iterator<int>(std::cout, "\n"));
return 0;
}
0384デフォルトの名無しさんNGNG
>>350
スマン、間違えてた。修正版はこちら。

#include <stdio.h>

int main(){
int i,j;
int max;
int ccount=0;
int m;
int flag;

scanf("%d",&max);
ccount=0;

for(i=2;i<=max;i++){
flag=1;
m=(int)sqrt((double)i);
for(j=2;j<=m;j++){
ccount++;
if( (i % j) ==0 ) flag=0;;
}
if(flag == 1){
printf("%d ",i);
}
}
printf("\n");

printf("素数を求める数:%d 計算回数:%d",max ,ccount);
}

0385デフォルトの名無しさんNGNG
352やってみるか。
8桁でいいの?
0386386NGNG
整数型変数yに西暦年(例えばy=2003)の値が入っているとき、
その年がうるう年なら1(真)を、うるう年なら0(偽)を返すような
式を条件演算子?:を使って書きなさい。ただし、うるう年は4で割り
切れ、かつ100では割り切れない年であるが、400で割り切れる場合
もうるう年となる

お願いします
0387デフォルトの名無しさんNGNG
>>382 こんなのでいいのかな。1000回分は1画面に表示しきれないから、工夫してみて。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define SIZE 10
int main(void)
{
int data[SIZE];int i,n,keep;
srand(time(NULL));for(i=0;i<SIZE;i++)data[i]=rand();//ランダム生成
for(i=0;i<SIZE;i++)printf("data[%d]==%d\n",i,data[i]);//before
for(i=0;i<SIZE-1;i++)for(n=0;n<SIZE-1;n++)//繰り返す回数は全て降順に並んでいると一番必要になるが、その最大の回数に合わせてある
if(data[n]<data[n+1])//配列の後ろのほうが大きい時
{keep=data[n];data[n]=data[n+1];data[n+1]=keep;}//両方の値を入れ替える
for(i=0;i<SIZE;i++)printf("data[%d]==%d\n",i,data[i]);//after
getchar();return 0;
}
0388デフォルトの名無しさんNGNG
C++でお願いします。
画像処理なんですけど

画像の左下と右上の隅を結んだ線分を考え
、この線分よりも下の三角形の領域を
ねずみ色(RGB成分の輝度地128)にした画像を生成する

という問題なんですけど、お願いします

0389387NGNG
>>387
//繰り返す回数は全て降順に並んでいると一番必要になるが、その最大の回数に合わせてある
このコメント間違ってました。多分、大小がバラバラの時のほうが、回数が多いです。
0390デフォルトの名無しさんNGNG
「A*アルゴリズムによる探索を実行できるプログラムをCで作れ」
という課題が出されたんですけど、どうやって作っていいかまったくわかりません
0391rNGNG
>>386

#include <stdio.h>
#include <stdlib.h>

int IsURU( int year ) {
&nsbp;&nsbp;&nsbp;&nsbp;return ( year % 4 == 0 && year % 100 != 0 )
&nsbp;&nsbp;&nsbp;&nsbp;&nsbp;&nsbp;&nsbp;&nsbp;|| ( year % 400 == 0 ) ? 1 : 0;
}
int main( int argc, const char** argv ) {
&nsbp;&nsbp;&nsbp;&nsbp;const int year = 1 < argc ? atoi( argv[1] ) : 2003;
&nsbp;&nsbp;&nsbp;&nsbp;printf("%d is %s\n", year, IsURU( year ) ? "uru" : "normal" );
}
0392rNGNG
>>391
#include <stdio.h>
#include <stdlib.h>
int IsURU( int year ) {
    return ( year % 4 == 0 && year % 100 != 0 )
        || ( year % 400 == 0 ) ? 1 : 0;
}
int main( int argc, const char** argv ) {
    const int year = 1 < argc ? atoi( argv[1] ) : 2003;
    printf("%d is %s\n", year, IsURU( year ) ? "uru" : "normal" );
}

nbspがnsbpになってた...死のう。
〜
0393rNGNG
>>386
IsURU関数のreturn文のとこが、
宿題の解答の式です。
0394デフォルトの名無しさんNGNG
>>352
int rot(int x) {
int tmp = x & (1 << 7);
x ^= tmp;
x <<= 1;
if (tmp) x |= 1; else x &= ~1;
return x;
}
0395デフォルトの名無しさんNGNG
以下の三つの課題が出ますた。プログラミングなのに数学や物理の知識が必要で参っています。
それぞれ正しいプログラムとは限らないのですが、例があります。
例をそのまま入力してもエラーになってしまうと思います。

問題A
度数法による角度(単位は度)を引数とする三角関数dsin()、dcos()を作成し、0度から90度まで
5度きざみの正弦関数表、余弦関数表を表示せよ。正弦関数と余弦関数の値は8桁以上で表示せよ。

問題B
以下の関数をフーリエ級数展開し、-2π<x<2πの範囲で第100部分和S100の値を求めよ。
f(x)=
-1(-π<x<0)
0(x=0,π,-π)
1(0<x<π)

問題C
RC直列回路に直流電流Eを加える。このときの過度電流Iを求める関数rci()とコンデンサの
電荷qを求める関数rcq()を作成し、R=1(Ω)、C=1(F)、E=1(V)のときの時間変化を求めよ。

プログラム例
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1027870433&res=66
0396デフォルトの名無しさんNGNG
(*`▽´*)うひょうひょ
http://jbbs.shitaraba.com/computer/2364/
0397デフォルトの名無しさんNGNG
例に出てるやつは実行して確認したのか?
0398デフォルトの名無しさんNGNG
double dsin(int deg);
やね。
0399デフォルトの名無しさんNGNG
>>397
問題Aは確認しました。for文の辺りでエラーが出てしまうようです。
正確に写したつもりではあるのですが・・・。
0400デフォルトの名無しさんNGNG
printf("%3d%8f%8f\n",deg,dsin(deg),dcos(deg));
0401rNGNG
>>395
(1)
#include <stdio.h>
#include <math.h>
#define PI 3.141592
double dsin( int r ) {
    return sin( (double)r / 360 * 2 * PI );
}
int main( int argc, const char** argv ) {
    int i;
    for( i = 0; i <= 90; i+= 5 )
        printf( "%lf\n",dsin( i ) );
}
dcosは、自分でつくりねぇ。
0402デフォルトの名無しさんNGNG
>>358>>394
ありがとうです。いろんなパターンがあって面白いですね。
0403rNGNG
>>395
あ、すでにサンプルコードがあったのかぁ...........
0404デフォルトの名無しさんNGNG
>>402
>>358 は一度動作確認した方がいいかも…
0405デフォルトの名無しさんNGNG
>>404
了解ですv
0406デフォルトの名無しさんNGNG
>>390
http://pc2.2ch.net/test/read.cgi/tech/1014783451/835-843
0407デフォルトの名無しさんNGNG
Cの宿題でオーダー計算の漸化式が解けないんですが、やってくれますか?
0408NICE!NGNG
一ヶ月100万円も夢じゃない!
1クリック10円が貰えるリンクスタッフ☆無料登録するだけで1000円貰えます。
更にリンクスタッフに登録してくれた人から25%貰える仕組みです。
仮に1日200件アクセスがあったとします 10円×200×30日=6万円です
リンクスタッフ三人で 100件 200件 300件 クリック数が毎日あったとします。
100件の場合7500円 200件の場合15000円 300件の場合は22500円です。
そうすれば毎月10万円は確実に入ってきます。HPや掲示板で宣伝して
行けば100万円なんかすぐでしょう。詳しくはスタッフ詳細を見てください。
無料簡単登録なので気軽にどうぞ。(フリーアドレスでの登録可)
http://www3.to/happynight
0409デフォルトの名無しさんNGNG
>>388
画像フォーマットがてきとーなのとデバッグをきちんとしてないけどこんな感じ。
void foo(unsigned char* data, int width, int height) {
  int x, y, i;
  for (y = 0; y < height; y++) {
    for (x = 0; x < width; x++) {
      if (y * width > (width - x) * height) {
        cout << y << " " << x << endl;
        for (i = 0; i < 3; i++) {
          data[(y * width + x) * 3 + i] = 128;
        }
      }
    }
  }
}
0410デフォルトの名無しさんNGNG
>>407 どんなの?
0411デフォルトの名無しさんNGNG
何度か考えてやったんだけど、どうしてもコンパイルエラーが…
randomsというファイルにあるランダム数列を昇順に整列し、
その結果をout_randomsというファイルに出力するようなプログラムを作成せよ。
って問題なんだけど、どうでしょうか?
0412デフォルトの名無しさんNGNG
#include <iterator>
#include <vector>
#include <fstream>
#include <algorithm>
int main()
{
 typedef double value_type;
 typedef std::istream_iterator< value_type > istream_iterator;
 typedef std::ostream_iterator< value_type > ostream_iterator;
 std::vector< value_type > randoms;
 std::ifstream in( "randoms" );
 randoms.assign( istream_iterator( in ) , istream_iterator() );
 std::sort( randoms.begin() , randoms.end() );
 std::ofstream out( "out_randoms" );
 std::copy( randoms.begin() , randoms.end() , ostream_iterator( out , "\n" ) );
 return 0;
}
0413rNGNG
>>411
コンパイルエラーが出るなら、そのコンパイルエラーに付いてかきこんでくださいな。
0414rNGNG
>>395
えっと、(3)は、"exp" って関数を 自然対数の底e にかけてるけど、
それを直せばいいのでは?つまり
「e*exp(x)をpow(e,x)に変更する。」

嘘かも。試してないからなんとも...
0415デフォルトの名無しさんNGNG
>>388
遅レスですが見ていたらどこがどういう風に分からないか教えて。一様やり方は
1、bmpファイルを開く、読み込む(gif等は分からないので)
2、サイズを調べて、○○以上なら色データの所に灰色のを代入
  bmpは下から見ていくことに注意。あと、色数によって処理が違うのが難しい。
3、新しいbmpを作る。
0416デフォルトの名無しさんNGNG
お願いします。
わからないので教えて下さい。

身長を整数値をして読み込んで、
標準体重を実数で表示するプログラムを作成せよ。
標準体重はBMIの(身長×身長)×22によって求め
その小数点以下は。一桁だけ表示すること。

単位は
身長の入力はcmで、計算はmでお願いします。
0417デフォルトの名無しさんNGNG
#include <iostream>
int main()
{
 double cm;
 while( std::cout << "身長(�p)?" , std::cin >> cm )
 {
  double const height = cm / 100;
  std::cout << "標準体重(�s):" << ( ( height * height ) * 22 ) << std::endl;
 }
 return 0;
}
0418デフォルトの名無しさんNGNG
> 整数値をして読み込んで
> その小数点以下は。一桁だけ表示すること。
あ・・・・
0419デフォルトの名無しさんNGNG
>>416 普通はdouble型とか使うんだろうけど分からないので変な奴。
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char str[BUFSIZ];int i,t;
for(;;)
{
printf("身長は(cm)?");gets(str);
i=atoi(str);
if(i>0)break;
}
t=22*i*i;
printf("理想の体重は%d.%dキログラムです\n",t/10000,t%10000/1000);
return 0;
}
0420デフォルトの名無しさんNGNG
#include <stdlib.h>
#include <stdio.h>
int
main(){
char cm[BUFSIZ];
double height;
if (fprintf(stdrr, "height[cm] = "), fgets(cm, BUFSIZ, stdin)) {
height = atof(cm)/100;
printf("standard weight = %0.1f[kg]\n", height*height*22);
}
return 0;
}
0421デフォルトの名無しさんNGNG
>>419>>420
本当にありがとうございます!!!m(_ _)m
スラスラできてすごいですね…尊敬します
また今度もお願いしたいのでどうぞよろしくお願い致します
0422デフォルトの名無しさんNGNG
微妙に要件を満たしていないだけで>>421に無視られる>>417が哀れだ。
>>388の曖昧な仕様でもそれなりに>>409で解答が出ているのに今一つ頓珍漢な>>415も哀れだ。
>>398に解答が出ているのに全く頓珍漢な>>400も哀れだ。
0423415NGNG
>>422
ごめんなさい。ただ、書いてるように仕様が曖昧だから、もしかしたら開く所から
分からないのかなと思って。
0424デフォルトの名無しさんNGNG
>>422
printf("%3d%8f%8f\n",deg,dsin(double deg),dcos(double deg));
が動くとでも言うのか?
0425デフォルトの名無しさんNGNG
>>424
だからと言って、間違いを垂れ流して楽しいか?
0426デフォルトの名無しさんNGNG
何が間違いなの?
0427デフォルトの名無しさんNGNG
(x,y,z)=(1,1,1),(2,2,2),(3,3,3)
上の3点を三次元上に点を打て。
この問題やってもらえますか?
0428デフォルトの名無しさんNGNG
三次元上に点を打つデバイスと、それ用のドライバをください
0429デフォルトの名無しさんNGNG
>>427
drawPoint( vector3( 1.0f, 1.0f, 1.0f));
drawPoint( vector3( 2.0f, 2.0f, 2.0f));
drawPoint( vector3( 2.0f, 2.0f, 2.0f));
0430デフォルトの名無しさんNGNG
>>427だけで答えが導き出せる>>429は関係者か>>427の授業の教授
0431フォルテNGNG

すいません。このプログラムがうまく動かないので
どなたか手直ししてくださいませんか?
プログラムは100までの素数を表示したいのですが
これだと素数以外の35等の違う数字も表示されてしまいます。
よろしくお願いします。

#include <stdio.h>

int main()
{
num = 2 ;

while( num < 97) {

for (num1 = 2; num1 < num; num1++ ) {

if(num % num1 == 0 ) {



}

}

printf("%d\n" , num ) ;

++num ;
}
return num;

}
0432421NGNG
>>422
あなたの言うとおりですね
自分の勝手な解釈をして
>>417>>418さんと<<419さんは同一人物だと思っていたので
無視してしまって本当にごめんなさい
そんなつもりはなかったんです
ありがとうございましたm(_ _)m
0433デフォルトの名無しさんNGNG
numって何?
0434デフォルトの名無しさんNGNG
>>431
そもそもコンパイルが通るのが信じられん。

#include <stdio.h>

int main()
{
int num=2,num1;
bool flag;

while(num<97) {
flag=true;
for(num1=2;(num1*num1)<num;num1++) {
if((num%num1) == 0) {
flag=false;
break;
}
}

if(flag) printf("%d\n",num);
num++;
}

return 0;
}

0435フォルテNGNG
>>433
すいません。関数からコピーしたんで
int num, num1;が抜けてました。
でnumはnumberのことです。
0436デフォルトの名無しさんNGNG
>>430
もしくは、自作自演かだな。
0437フォルテNGNG
>>434
書かれているプログラムがうまくコンパイル
されないのですがどうすればよいですか?
で、何で私が書いたものは違う数字が出ていたのでしょうか?
だれかわかる人教えてください。
0438rNGNG
>>437
いいから、>>363 を使え。
0439デフォルトの名無しさんNGNG
>>437
int main()
↓
float main()

0440フォルテNGNG
>>438
多分プログラムが素数のじゃないですよ。
0441フォルテNGNG
すいません。プログラムが一部違ってました。
↓の手直しをお願いします。

#include <stdio.h>

int main()
{int num, num1;

num = 2 ;

while( num < 97) {

for (num1 = 2; num1 < num; num1++ ) {

if(num % num1 == 0 ) {

++num;}

}

printf("%d\n" , num ) ;

++num ;
}
return 0;

}

0442フォルテNGNG
>>439
やってみてもだめみたいでした。
0443デフォルトの名無しさんNGNG
>>431
宿題の答え詰め合わせ
http://www.vector.co.jp/soft/dl/data/prog/se002453.html
0444デフォルトの名無しさんNGNG
if(num % num1 == 0 ) {

++num;num1 = 1;}
0445444NGNG
素数の判定を別関数にしたほうがいい。
0446フォルテNGNG
なんか先生に聞いたら++numがfor文の中に入ってるから
breakやcontinueを使って外に出せっていわれたんですが
そんなこと出来るんですか?
0447フォルテNGNG
>>443
できました。どうもありがとうございます。
他の皆さんもどうもありがとうございました。
やっと宿題が提出できます。
0448デフォルトの名無しさんNGNG
num % num1 == 0
間違ってたら恥ずかしいけど
これって0になるの?
つーか素数のアルゴリズム自体知らんよ。
どーせ定石があるんでしょ?
そっからひっぱってくれば?
0449フォルテNGNG
>>448
多分、素数の数字は0になるやつがあったらだめなんで
何回もインクリメントで割っていってそれがあったら
表示しなくなるようにしました。
で、私はCはじめてまだ1ヶ月でこれは宿題なので
コピーするのはまずかったんです。
0450デフォルトの名無しさんNGNG
>>449
いや除算の商が0になるのは
分子が0の時だけじゃん。
%って何かあるんだっけ?
0451フォルテNGNG
質問なんですが↑のを
for (num1 = 2; num1 < num; num1++ ) {

if(num % num1 == 0 ) {

++num;num1 = 2;}

}
にかえるとうまくいったんですが
forは繰り返すのでnum1 = 2がまた代入されるとおもったのですが
改めてnum = 2を書かないといけないってことはそうじゃないの
ですか?
0452デフォルトの名無しさんNGNG
C言語の宿題なんですが
縦線がX本、横線が入る段がY段あるあみだくじをデータ化し
各ラインの行き先を表示するプログラムを作成せよ。
よろしくお願いします。

0453395NGNG
395です。昨日の問題ですが何とか出来ました。が…、さらに問題Cを分割コンパイル
しなければなりません。関数ごとに分割してコンパイルしようとしたのですがコンパイルは
成功しますが結果がおかしな物になってしまいます。どうか知恵をお貸し下さい。

分割前
#include<stdio.h>
#include<math.h>
double r=1;
double c=1;
double e=1;
double rci(double t);
double rcq(double t);
main(void){
double t;
double rci(),rcq();
printf("初期値を設定 \n");
printf("t=0からt=10.0まで0.5秒間隔で、時刻t(sec)、過度電流I(A)、電荷q(c)をひょうじ\n");

for(t=0;t<=10;t+=0.5){
printf("%4.1f %9.6f %9.6f\n",t,rci(t),rcq(t));
}
}
/*過度電流を求める*/
double rci(double t){
return(e*exp(-t/(r*c))/r);
}
/*コンデンサの電流を求める*/
double rcq(double t){
return(c*e*(1-exp(-t/(r*c))));
}
0454395NGNG
分割1
/* program3-main.c */
#include<stdio.h>
#include<math.h>
main(void){
double r=1;
double c=1;
double e=1;
double t;
double rci(),rcq();
printf("初期値を設定 \n");
printf("t=0からt=10.0まで0.5秒間隔で、時刻t(sec)、過度電流I(A)、電荷q(c)をひょうじ\n");
for(t=0;t<=10;t+=0.5){
printf("%4.1f %9.6f %9.6f\n",t,rci(r,c,e,t),rcq(r,c,e,t));
}
}
分割2
/* program3-rci.c */
/*過度電流を求める*/
double rci(double r,double c,double e,double t){
return(e*exp(-t/(r*c))/r);
}
分割3
/* program3-rcq.c */
/*コンデンサの電流を求める*/
double rcq(double r,double c,double e,double t){
return(c*e*(1-exp(-t/(r*c))));
}
0455フォルテNGNG
>>450
%にすると余りが計算されて余りが0って事は割り切れる
という意味ですからそれは素数から弾かれるんです。
0456デフォルトの名無しさんNGNG
>>452
むずい。すごいな昨今の学生は。
こんなんやってるの?
何にも考えないなら
x,yの2次元bool配列を確保してfalseで初期化
ランダムでxの奇数ラインを選択して全てtrueに。
偶数ラインはランダムでy座標を選択してtrueに。
後はxの偶数ラインからスタート位置を決めて
上から降りて行くようにしたらいいのでは?
0457フォルテNGNG
それでさっき教えてもらったものを関数化して表示しようと
思ったのですが今度は98が追加されてしまいます。
手直しお願いします。

#include<stdio.h>
int sosuu( int, int) ; /*関数プロトタイプ*/
int main()
{
int num, num1;

printf("%d\n" , sosuu(num, num1)) ;
return 0 ;
}

/*関数:sosuu*/
/*引数:num, num */
/*返値:num*/
/*機能:100までの素数を表示する*/

int sosuu( int num, int num1)
{
num = 2 ;
while( num < 97) {
for (num1 = 2; num1 < num; num1++ ) {
if(num % num1 == 0 ) {
++num;num1 = 2;}
}
printf("%d\n" , num ) ;
++num ;
}
return num;
}
0458デフォルトの名無しさんNGNG
>>455
%って余りが出るんだ。
失礼、使ったことほとんど無いから
マジわかんなかった。
0459フォルテNGNG
>>458
いえいえ。私も最近習ったばっかだから
覚えていただけですよ。
0460フォルテNGNG
関数化もどうにかうまくいきました。
みなさん今までどうもありがとうございます。
0461デフォルトの名無しさんNGNG
printf()の中身ってどうなってるんですか?
0462rNGNG
>>452
未コンパイル。 1/3

#define LENGTH 100

struct vart_t {
    struct link_t* point[ LENGTH ];
    int number;
};

struct link_t {
    struct vart_t* l;
    struct vart_t* r;
};

struct amida_t {
    struct vart_t* varts;
};
0463rNGNG
>>452
未コンパイル 2/3

struct amida_t* create( int vart_count, int step ) {
    int i;
    struct varts = calloc( vart_count, sizeof(struct vart_t) );
    for( i = 0; i < varts; i++ )
        varts[i].number = i;

    for( i = 0; i < LENGTH; i += step ) {
        struct link_t* link = calloc( 1, sizeof(struct link_t) );
        int v = rand() % (varts - 1);
        link -> l = varts[ v ];
        link -> r = varts[ v + 1 ];
        varts[ v ].point[h] = varts[ v + 1 ].point[h] = link;
    }
    struct amida_t* amida = calloc( 1, sizeof(struct amida_t) );
    amida -> varts = varts;
    return amida;
}
0464デフォルトの名無しさんNGNG
>>461
K&Rかlibc嫁
0465rNGNG
>>452
未コンパイル 3/3

int trace( struct amida_t* amida, int start ) {
    int i;
    struct vart_t* current = &amida -> varts[ start ];
    for( i = 0; i < LENGTH; i++ ) {
        struct link_t* link = current -> point[i];
        if( link != NULL ) {
            current = link -> l == current ? link -> r : link -> l;
        }
    }
    return current -> number;
}
うちに帰ってから、続きやろうっと。
0466デフォルトの名無しさんNGNG
>>452 あみだくじ、一応できました。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=999294620&res=67
コメントをしっかり書いたのもあとで載せます。たぶん。
0467444NGNG
>457
言いたかったのはこういうのなんだが・・・。
#include<stdio.h>
int isprime(int n) {
int i = 2;
for (; i*i <= n; i++)
if (n % i == 0) return 0;
return 1;
}
int main() {
int num = 2;
for (; num < 97; num++)
if (isprime(num)) printf("%d\n", num);
return 0 ;
}
0468466NGNG
>>466
よく見ると、デバックのための奴とかが残っていて無駄が多いです。
一応正しく動作しますが、書き直します。
0469444NGNG
num1 = 1;にしたのはその後にnum1++が来るから。
こうするとwhile( num < 97)のチェックにかからないのが
難点なんだけど・・・。
0470444NGNG
num1 = 2;にしても動くのは、この場合numを割ると2になる数があるから。
0471466NGNG
>>452>>466 あみだくじ、修正+コメント付き。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=999294620&res=68
0472466NGNG
>>452
ごめん。よくみると、行き先を表示しないといけないんですね。
でも、どう表示すればいいのだろう。┝みたいな細太混じったのはあるけど、
上と横が太いのは確か無いような。また、同じ所を通ることがよくあるので
その場合はどうすればよいのだろう。1回ずつに分けて答えを表示するとかかな。
0473デフォルトの名無しさんNGNG
離散系のマルコフ連鎖とかであみだくじできるよ
0474デフォルトの名無しさんNGNG
>>452
#include <stdio.h>
#define BUFSZ 128
#define MAX_YOKO 128

int getparam(int *tate,int yoko[],int yoko_num){
char buf[BUFSZ];
int i;

printf("縦棒の数をいれて\n");
fgets(buf,BUFSZ,stdin);
sscanf(buf,"%d",tate);
printf("横棒の場所を高さ順にいれて\n");

for(i = 0;i < yoko_num - 1;){
fgets(buf,BUFSZ,stdin);
if(sscanf(buf,"%d",&yoko[i]) == 1 && (unsigned)(*tate - yoko[i]) < *tate)i++;
else if(!i)
printf("(%dから%dまでの数字)(リターン)です\n",1,*tate);
else break;
}
return 0;
}

0475デフォルトの名無しさんNGNG
int getendnum(int tate,int yoko[],int start){
int end = start;
int i,height = 0;
for(i = 0;yoko[i];i++){
if(i < height)continue;
if(yoko[i] == end + 1){
end++;height = i + 1;
continue;
}
if(yoko[i] == end){
end--;height = i + 1;
}
}
return end;
}

int main(void){
int i,tate,yoko[MAX_YOKO] = {0,};
getparam(&tate,yoko,MAX_YOKO);
for(i = 0;i < tate;i++){
printf("縦棒%dの行き着く先は%dです\n",i,getendnum(tate,yoko,i));
}
return 0;
}
0476デフォルトの名無しさんNGNG
hostnoをキーとし単純選択法を利用してソートをしたいんですがうまくいきません。
構造体として考えた場合
strcpy(data[i].hostno, data[k].hostno);
こういうことはできないんでしょうか?

#include<stdio.h>

int strcmp(const char *d, const char *b);

char strcpy(char *s, char *ct);

struct no{
char *stuno;
char *hostno;
};

struct no data[5] = {
"2002165", "34165",
"2002001", "34001",
"2002789", "34789",
"2002543", "34543",
"2002983", "34093",
};
0477デフォルトの名無しさんNGNG
int main()
{
struct no data[5];

int i, j;
int e;
int k;
char a[100];

for(i = 0; i < 5; i++)
printf("%s. %s\n", data[i].hostno, data[i].stuno);

for(i = 0; i < 4; i++){
k = i;
for(j = i + 1; j < 5; j++){
e = strcmp(data[i].hostno, data[j].hostno);
if(e > 0){
k = j;

strcpy(a, data[i].hostno);
strcpy(data[i].hostno, data[k].hostno);
strcpy(data[k].hostno, a);

strcpy(a, data[i].stuno);
strcpy(data[i].stuno, data[k].stuno);
strcpy(data[k].stuno, a);
}
}
}
}
return 0;
}
0478デフォルトの名無しさんNGNG
あゎ上げ忘れた。
どなたか良かったらお願いします。
0479デフォルトの名無しさんNGNG
>>478

data[i].hostnoやdata[k].hostnoはどこを指しているの?
あと、strcmpやstrcpyのプロトタイプ宣言はstring.hに書かれているからそれをインクルードすればよい。
0480479NGNG
言い忘れたけど、main関数内で参照しているdata[5]はmain関数内で定義しているdata[5]が使われるから。
0481デフォルトの名無しさんNGNG
根本的な間違いが。
main()の中でstruct no data[5];を定義してるため
定義したdata[]が使われていないよ。
0482デフォルトの名無しさんNGNG
かぶった上に日本語が変だ・・
欝だsnow
0483479NGNG
で、グローバル変数の方を使うようにしても、strcpyで文字列リテラルを書き換えようとするから問題だね。
struct noのメンバーは配列にしよう。
0484デフォルトの名無しさんNGNG
あっ、そでした。
ありがとうございます
色々錯誤していた時のままになっていたようです。

そこを除いても同じようにエラーが出ます。ぅ
0485479NGNG
ソートならメンバー(のポインタ)が指す先は入れ替えないで、構造体同士を交換すればいいと思うんだけど。
0486rNGNG
>>452

????2???p??????????????
?????????p?

?????????????
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1027870433_67/amida.c
0487デフォルトの名無しさんNGNG
>>486
マカー死ね
0488デフォルトの名無しさんNGNG
ありがとうございます。
配列にしたらとおりましたー感謝。

ちなみに、この場合での構造体同士の交換とはどうすれば良いんでしょうか?
0489デフォルトの名無しさんNGNG
サファリ使っているやつはこうなることが分かっていてやるんだろうなぁ。
0490r/486NGNG
>>487,489
うわぁぁん!
「マカー用」使うと、何か連投規制?がかかっちゃうので、
仕方なくsafari使ったらこの様....


ちなみに、
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1027870433_67/amida.c
このプログラムをMacOSXのgccでコンパイルして、
5行のあみだを生成すると、横線が綺麗に並ぶことに気付きました。
どうも、rand() % 0x0F ってやると、数字が
0,1,2,3,0,1,2,3,0,1,2,.... って並ぶみたいっすね。
0491r/490NGNG
>>490
%じゃなくて&だ.....死ぬっす。
0492デフォルトの名無しさんNGNG
C言語FAQですな
http://www.catnet.ne.jp/kouno/c_faq/c13.html#17
0493デフォルトの名無しさんNGNG
#include <stdio.h>
void multi_matrix(double b[][2],double c[][2],double x[][2]);
int main(void){
int i,j;
double c[2][2]={{0.02,0.0},{0.02,0.1}};
double x[2][2]={{1.0,0.0},{0.0,400.0}};
double b[2][2]={{0,0},{0,0}};
multi_matrix(c,x,b);
for(i=0;i<2;i++){
for(j=0;j<2;j++){
printf("c\n%f\n x\n%f\n cx\n%f\n",c[2][2],x[2][2],b[2][2]);}
return 0;}
void multi_matrix(double b[][2],double c[][2],double x[][2]){
int i,j,k;
for(i=0;i<2;i++){
for(j=0;j<2;j++){
for(k=0;k<2;k++){
b[2][2]+=c[2][2]*x[2][2];}}}}
上のプログラムでコンパイル実行すると、voidが間違ってるというエラーが出ます
voidは一見要りそうな感じがしますが、何で違うかわかりません
0494動画直リンNGNG
http://homepage.mac.com/hitomi18/
0495デフォルトの名無しさんNGNG
>>493
他の部分が間違っているんじゃないの?
それにしても読みにくいよぉ
0496デフォルトの名無しさんNGNG
括弧の対応がmain()内でおかしいから。
12行めにはもう一つ}がいる。
0497493NGNG
12行目に}を追加しましたけど、今度は結果がうまくいきません。
cx
0.000000
とだけ表示されます。行列の積を計算するつもりだったのに
0498r/490NGNG
>>497
11行目とか最終行とかって、添字が全部[2][2]になってるけど、
iとかjとか使わなくていいの?
0499デフォルトの名無しさんNGNG
b[2][2]+=c[2][2]*x[2][2];
じゃなくて、b[i][j]=....とかじゃないの?
0500493NGNG
11行目の"c[2][2],x[2][2],b[2][2]"の部分を
"c[i][j],x[i][j],b[i][j]"
最終行を"b[i][j]+=x[i][k]*b[k][j];}}}}"
とそれぞれ変えて再実行しましたが、
c
0.020000
x
1.000000
cx
0.000000
x
0.000000
cx
0.000000
と奇妙な答えが返ってきました。これもまた求める答えとは違います

0501デフォルトの名無しさんNGNG
>>500
#include <stdio.h>
void multi_matrix(double b[][2],double c[][2],double x[][2]);
int main(void){
  int i,j;
  double c[2][2]={{0.02,0.0},{0.02,0.1}};
  double x[2][2]={{1.0,0.0},{0.0,400.0}};
  double b[2][2]={{0,0},{0,0}};
  multi_matrix(b,c,x);
  for(i=0;i<2;i++){
    for(j=0;j<2;j++){
      printf("c[%d][%d] %f\tx[%d][%d] %f\tcx[%d][%d] %f\n",
        i,j,c[i][j],i,j,x[i][j],i,j,b[i][j]);
    }
  }
  return 0;
}
void multi_matrix(double b[][2],double c[][2],double x[][2]){
  int i,j,k;
  for(i=0;i<2;i++){
    for(j=0;j<2;j++){
      for(k=0;k<2;k++){
        b[i][j]+=c[i][k]*x[k][j];
      }
    }
  }
}
0502デフォルトの名無しさんNGNG
文字列を入力: classic
文字列"classic"の中には"c"が2個.
入力文字列に対して文字cの個数を表示するプログラムを作りなさい.
0503デフォルトの名無しさんNGNG
#include <stdio.h>


void str_dcount(const char str[], int cnt[])
{
unsigned i = 0;
while (str[i]) {
if (str[i] >= 54 && str[i] <= 54)
cnt[str[i] - '0']++;
i++;
}
}

int main(void)
{
int i;
int dcnt[1] = {0};
char str[100];

printf("文字列を入力してください:");
scanf("%s", str);

str_dcount(str, dcnt);

for (i = 0; i < 2; i++)

printf("文字列”%d”の中には”c”が%d個含まれます。", str, dcnt[i]);
return (0);
}

やってみたもののさっぱりです。
0504デフォルトの名無しさんNGNG
オレニマカセロ!
0505デフォルトの名無しさんNGNG
#include <stdio.h>
int str_dcount(const char str[]){
int cnt = 0;
for (; *str; str++)
if (*str == 'c') cnt++;
return cnt;
}
int main(void) {
char str[100];
printf("文字列を入力してください:");
scanf("%s", str);
printf("文字列”%s”の中には”c”が%d個含まれます。", str, str_dcount(str));
return (0);
}
0506デフォルトの名無しさんNGNG
ありがとう神様 
0507デフォルトの名無しさんNGNG
#include <stdio.h>
int str_dcount(const char str[])
{
int cnt = 0;
while(*str){
if (*str == 'c') cnt++;
str++;
return cnt;
}

}
int main(void)
{
char str[100];
printf("文字列を入力してください:");
scanf("%s", str);
printf("文字列”%s”の中には”c”が%d個含まれます。\n", str, str_dcount(str));
return (0);
}


while文に直したらなんかカウントがうまくいかないんですけどどこがいけないんでしょうか
0508デフォルトの名無しさんNGNG
for (; *str; str++)
if (*str == 'c') cnt++;

*str ←なんで*が必要なの
  for (; str; str++)
if (str == 'c') cnt++;

これだとできないのはなぜですか
0509デフォルトの名無しさんNGNG
私はC++房。
今まで1年*ヶ月、ほとんど毎日休まず一生懸命C++を勉強してきた。
わからない宿題若しくは処理があったら私にやらせてくださいm(_ _)m
5代目(前スレ): http://pc2.2ch.net/test/read.cgi/tech/1051594046/l50
4代目: http://pc2.2ch.net/test/read.cgi/tech/1045074808/l50
3代目: http://pc2.2ch.net/tech/kako/1041/10419/1041992392.html
2代目: http://pc3.2ch.net/tech/kako/1039/10397/1039772622.html
宿題手伝いますYO!!: http://pc3.2ch.net/tech/kako/1038/10380/1038024989.html

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

0510デフォルトの名無しさんNGNG
  ∧_∧  ∧_∧  ∧_∧  ∧_∧  ∧_∧  ∧_∧  ∧_∧
 ( ´∀`) ( ´∀`) ( ・∀・) ( ・∀・) ( ´∀`) ( ´∀`) ( ・∀・)
∧_∧ ,∧_∧ ∧_∧ ∧_∧ ∧_∧ ∧_∧ ∧_∧ ∧_∧∧_∧
 ´∀`)( ・∀・)( ´∀`)( ・∀・)( ´∀`)( ・∀・)( ・∀・) ( ´∀`) ・∀・)
  ∧_∧ ∧_∧ ∧_∧  ∧_∧ ∧_∧  ∧_∧  ∧_∧  ∧_∧  )        ∧ ∧
 ( ´ー`)( ・∀・)( ・∀・) ( ・∀・) ´∀`) ( ´∀`)( ´∀`) ( ・∀・)Y ∧ ∧     (T0T;)
  ∧_∧  ∧_∧  ∧_∧  ∧_∧∧_∧  ∧_∧  ∧_∧  )__)(|i゚O゚)     と とヽ
 ( ・ー・) ( ´∀`) ( ´∀`) ( ・∀・) ・∀・) ( ´∀`) ( ´∀`) Y∴;;;`  ノつ     ヽ   )〜
 (    ) (    ) λ ,,,  ) (    )    ) (    ) (    )__)W'`' ̄  ∧ ∧  {{ U U }}
  人  Y  人  Y (*TO゚)つ  人  Y 人  Y  ,,,,,,,  Y   人  Y  ξ 〜/⌒(゚O゙i|)
 (__(__) (__(__)  (__(__)  (__ (_ (__(__) (゚p;;゙i|)_) (__(__⊂@ミ` @__) U cノ
                                            ∴
0511デフォルトの名無しさんNGNG
>>508
あんた持ってる教科書のポインタのところをよーく読みなさい。
あるいは ttp://ecoeng.im.kindai.ac.jp/c/ の8〜13章とか。
0512デフォルトの名無しさんNGNG
http://ecoeng.im.kindai.ac.jp/c/
0513デフォルトの名無しさんNGNG
女子高校生監禁コンクリート詰め事件!!!!

共産党幹部宅で行われた鬼畜行為(裁判で明らかになってます)(監禁41日間の内容)

・オイルを両大腿、膝、すねにたらして着火する
・熱がって火を消そうとすると手にもオイルをかけて着火、火が消えるとまた点火する
・性器に異物を入れて弄ぶ
・自分の尿を飲ます
・性器にライターを入れて着火する(この行為によって何度も気絶し、髪の毛が抜けていったという)
・性器を灰皿代わりにする
・性器にオロナミンCの瓶を入れる
・お尻の穴に花火を突っ込む
・性器に強引に直径3Cmの鉄の棒を突っ込んだり抜いたりして性器を破壊する
・頬が鼻の高さを超えるまで腫れ上がり、目の位置が陥没して分からないほどになるまで暴行
・歌謡曲を流して、歌詞にあわせて脇腹に思いっきりパンチをいれる
・痛さをこらえるので口が変なふうに歪むのを見て面白がる
・犯人2人の真ん中に立たせ、左右から肩や顔に回し蹴りを数発入れる
・顔にろうそくをたらす
・眉間に短くなった火のついたろうそくを立てる
・6kgの鉄アレイを腹に落とす
・鉄アレイで大腿や顔面を殴る
・逃げないようにガムテープで全身をぐるぐるまきにする

コンクリート詰め事件で検索すればわかります。

アンチが騒いでます(w
http://qb.2ch.net/test/read.cgi/accuse/1052793624/l50
0514466NGNG
>>452 寝てしまったので、遅レスになってしまいました。もういないかも。
あみだくじ。道を表示していく奴です。ただ、windows.hも使っています。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=999294620&res=69
0515デフォルトの名無しさんNGNG
/* >>452 */
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#define X 5
#define Y 20
int
main(int argc, char **argv)
{
  int i, j, x, y, z, a, *to *amida;
  x = argc > 1 ? atoi(argv[1]) : X; y = argc > 2 ? atoi(argv[2]) : Y;
  to = (int*)malloc(sizeof(int)*x); amida = (int*)malloc(sizeof(int)*y);
  for (i=0; i<x; i++) to[i] = i;
  srandom(time(NULL));
  printf("amida = ");
  for (i=0; i<y; i++) { printf("%d ", amida[i] = random()%(x-1)); } puts("\n");
  for (i=0; i<y; i++) { a = amida[i]; z = to[a]; to[a] = to[a+1]; to[a+1] = z; }
  for (i=0; i<x; i++) printf("%-3d", i); puts("");
  for (i=0; i<y; i++) {
    for (j=0; j<x; j++) printf("|%s", j==amida[i] ? "--" : "  "); puts("");}
  for (i=0; i<x; i++) printf("%-3d", to[i]); puts("");
  return 0;
}
0516デフォルトの名無しさんNGNG
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(){
char *str;int n,length,flag=0;

str=(char *)malloc(BUFSIZ*sizeof(char));
if(str==NULL){
puts("No memories!");return 0;
}
puts("文字列を入力して下さい!");
gets(str);
length=strlen(str);
for(n=0;n<=length-1;n++){
if(*(str+n)=='c')flag=flag+1;
}
printf("入力文字に対してcは%d個ありました",flag);
return 0;
}
0517デフォルトの名無しさんNGNG
getsやscanfを使ってる時点で死。

#include <stdio.h>
int main()
{
char c;
int i;
printf("文字列を入力してください:");
for (i=0;(c=getchar())!='\n';c=='c'?i++:0);
printf("cが%d個含まれます。\n",i);
return0;
}
0518デフォルトの名無しさんNGNG
C言語の課題です
分数を表す構造体を定義する、
そしてその構造体を用いて分数の足し算
引き算掛け算割り算を行う関数を作成する
以下の条件を満たすこと
1分母分子の値は整数として標準入力
を用いて設定する
分数の四則演算を行う関数を作成
その場合関数の引数は構造体で宣言された変数とする
計算結果は分数の形でよい、約分を行う必要はない
0519デフォルトの名無しさんNGNG
>計算結果は分数の形でよい
実数でもいいのか。だったら楽だぞ。
0520デフォルトの名無しさんNGNG
ファイルの最後から逆に単語を読み込んで順次標準出力に出力させるプログラム
052190某大学情報処理科NGNG
>>96様
きょうだしたら、無事にプログラムと、動作結果は
受け取ってもらえました。本当にありがとうございます。
クラスの7割が再提出だったみたいでした。

僕は先生に呼ばれて、アルゴリズムとフローチャートが少しいい加減だから、
それをしっかり書いてこいといわれましたTT
どなたか親切な方いましたら、>>96アルゴリズムとフローチャートもお願いします。
僕は情報処理科じゃなくて、違う学科の大学院うけようかな・・TT
052290某大学情報処理科NGNG
それと c言語のフリーソフトがほしいですTT

今はじたくのPCではC言語はできなくて、自宅でプログラム作って、
学校までメールやらフロッピーやらで送ってコンパイルしてるので、
きついですTT

フリーのコンパイラとかありませんかね?よくわかんないんですけど。
とにかく自宅でC言語したいです。

0523523NGNG
次の各プログラムを分かりやすく書き直したい。左のプログラムと同じになるように、右のプログラムの( )を補いなさい。
1.
while(A){
if(B) continue;        while( ){
C; →   if( ) c;
} }
2.
do{ while( ){
if(!A) continue; → ( );
else B; C;
C; }
}while(A);

3.
if(A)           if( ){
if(B)               if( ){
if(C) D; →      if( ) D; 
else; }
else; else{
else if( ) E;
if(B) else F;
if(C) E; }
else F; }
else;

お願いします
0524デフォルトの名無しさんNGNG
>>518
できましたが、構造体の有効的な使い方が分からないす。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=999294620&res=70
0525523NGNG
次の各プログラムを分かりやすく書き直したい。左のプログラムと同じになるように、右のプログラムの( )を補いなさい。
1.
while(A){
if(B) continu     while( ){
C; →   if( ) c;
} }
2.
do{ while( ){
if(!A) continue; → ( );
else B; C;
C; }
}while(A);

3.
if(A)   if( ){
if(B)        if( ){
if(C) D;    if( ) D; 
else; }
else; else{
else if( ) E;
if(B) else F;
if(C) E; }
else F; }
else;

お願いします
0526523NGNG
次の各プログラムを分かりやすく書き直したい。
左のプログラムと同じになるように、右のプログラムの
( )を補いなさい。
1.
while(A){
if(B) continue;    
C;
}
 
↓

while( ){
if( ) c;
}

2.
do{
if(!A) continue;
else B;
C;
}while(A);

↓

while( ){
( );
C;
}

0527523NGNG
3.
if(A)           
if(B)               
if(C) D;
else;
else;
else
if(B)
if(C) E;
else F;
else;

↓

if( ){
 if( ){
   if( ) D;
}
else{
if( ) E;
else F;
}
}

お願いします
0528デフォルトの名無しさんNGNG
>>518
#include <stdio.h>
#include <stdlib.h>
typedef struct{int n,d;}frac;
frac add(frac x,frac y){x.n=x.n*y.d+y.n*x.d;x.d*=y.d;return x;}
frac sub(frac x,frac y){x.n=x.n*y.d-y.n*x.d;x.d*=y.d;return x;}
frac mul(frac x,frac y){x.n*=y.n;x.d*=y.d;return x;}
frac dvd(frac x,frac y){x.n*=y.d;x.d*=y.n;return x;}
int main(){frac x,y;char buf[BUFSIZ];fgets(buf,BUFSIZ,stdin);
sscanf(buf,"%d %d %d %d",&x.n,&x.d,&y.n,&y.d);
printf("%d/%d + %d/%d = %d/%d\n",x,y,add(x,y));
printf("%d/%d - %d/%d = %d/%d\n",x,y,sub(x,y));
printf("%d/%d * %d/%d = %d/%d\n",x,y,mul(x,y));
printf("%d/%d / %d/%d = %d/%d\n",x,y,dvd(x,y));return 0;}
0529デフォルトの名無しさんNGNG
>>524
どうして分数を構造体に詰め込まないの?
0530デフォルトの名無しさんNGNG
>>518
約分もしてみた。

#include <stdio.h>
#include <stdlib.h>
typedef struct{int n,d;}frac;
frac add(frac x,frac y){x.n=x.n*y.d+y.n*x.d;x.d*=y.d;return x;}
frac sub(frac x,frac y){x.n=x.n*y.d-y.n*x.d;x.d*=y.d;return x;}
frac mul(frac x,frac y){x.n*=y.n;x.d*=y.d;return x;}
frac dvd(frac x,frac y){x.n*=y.d;x.d*=y.n;return x;}
int gcd(int x,int y){int z;if(y)while(z=x % y){x=y;y=z;}return abs(y);}
frac reduce(frac x){if(x.d){int y=gcd(x.n,x.d);x.n/=y;x.d/=y;}return x;}
int main(){frac x,y;char buf[BUFSIZ];fgets(buf,BUFSIZ,stdin);
sscanf(buf,"%d%d%d%d",&x.n,&x.d,&y.n,&y.d);
printf("%d/%d + %d/%d = %d/%d\n",x,y,reduce(add(x,y)));
printf("%d/%d - %d/%d = %d/%d\n",x,y,reduce(sub(x,y)));
printf("%d/%d * %d/%d = %d/%d\n",x,y,reduce(mul(x,y)));
printf("%d/%d / %d/%d = %d/%d\n",x,y,reduce(dvd(x,y)));return 0;}
0531デフォルトの名無しさんNGNG
1.
while( A ) {
  if( ! B )
    C;
}

2.
while( A ) {
  B;
  C;
}

3.
if(A) {
  if( B ) {
    if( C )
      D;
  } else {
    if( B && C )
      E;
    else
      F;
  }
}
0532528NGNG
#include <stdlib.h>
この行いらない。
0533524NGNG
>>528
なるほど、グローバルにしておけば、構造体を渡したり、戻り値にしたり
できたんですか。
>>529
>>528さんのような使い方のことですか?
0534デフォルトの名無しさんNGNG
>>522
そういう質問をするときは、OSを述べよ。
WindowsだったらBorlandのC++が無料である。
もしくはCygwinのgcc。
unix系だったらgccか、osについてくるccを使え。
Macだったら、よくしらん。OSXだとgccがついてくるらしいが、
追加でインストールしないとならんらしいときいたことがある。
他のOSも同様よくしらん。
0535デフォルトの名無しさんNGNG
学校のPCにTelnet
0536デフォルトの名無しさんNGNG
>>533
確かに>>528の様な使い方のことだけど、君が何か勘違いしている様なので、
typedefと構造体の値渡しについて勉強した方がいいよ。
0537524NGNG
>>536
はい、分かりました。ありがとう。
0538デフォルトの名無しさんNGNG
>>526-527
問題の意味がわからないです。Aとかは何ですか?
0539デフォルトの名無しさんNGNG
C言語でファイルの最後から逆に単語を読み込んで順次(ファイルの最後の単語から 例...C GENGO PROGURAMならばMARUGORP OGNEG C ...のように)標準出力に出力させるプログラム
を作りたいのですが…
0540デフォルトの名無しさんNGNG
#include <stdio.h>

int main(void) {
 FILE *f;
 f = fopen("hoge.txt", "r");
 fseek(f, 0L, 2);
 do {
  putchar(getc(f));
 } while (!fseek(f, -2L, 1))
 return 0;
}
0541デフォルトの名無しさんNGNG
kbhitを使ってENTERを押したら☆が表示されるにはどうしたらいいですか?
教えてください。
0542デフォルトの名無しさんNGNG
>>541
#include <stdio.h>
#include <conio.h>
int main(void)
{
for(;;)
if(kbhit())if(getch()=='\r')
{
puts("☆");
break;
}
return 0;
}
0543デフォルトの名無しさんNGNG
#include <stdio.h>
#include <conio.h>

int main()
{
bool done=false;
while(!done) {
if(kbhit()) {
if(getch() == 0x0d) {
printf("☆");
done=true;
}
}
}
return 0;
}
0544デフォルトの名無しさんNGNG
>>542>>543
有難う御座います。
0545デフォルトの名無しさんNGNG
>>521
フローチャートは正しい書き方知らんし、面倒だからやりません。
アルゴリズムは一応箇条書きという形で書いておきます。

newton()のみです。
前提条件は、x0とx1の間に1つだけ解があること。
1) y0とy1を計算する。
y1はprintf()で表示させるためだけのものです。
2) x0とx1が6桁まで一致しているかを調べ、一致していたら関数を抜ける。
7桁目が誤差を含むだろうと考え0.0000001と比較するようにした。
深くは考えなかったので、他に正しい値があるかもしない。
3) x0とx1の中間値xとそのyの値を求める。
4) y0とyの間に解があるなら、xとx1の間に解はないのでxを新しくx1にする。
そうでなけれあば、xを新しいx0にする。
正×負、負×正が負になることを利用して、ゼロクロス点(解)が
あるかどうかを調べている。
5) 2)に戻る。
0546デフォルトの名無しさんNGNG
>>521
文から察すると興味がないのに情報系の院に
行こうとしてるみたいだが
興味がないなら違う分野にしとけ

>>96にコードがあるのに
アルゴリズムとフローチャートが書けないっておかしいぞ
本来は考える順が逆なんだから
コードがあればほとんどなぞるだけじゃないか

CコンパイラはLinuxでもインスコするか
ttp://www2.wbs.ne.jp/~dskoba/database/prog.htm
ここらへんでもみれば?
0547デフォルトの名無しさんNGNG
一次元配列の中身を後ろからソートしたいんですが、for文がごちゃごちゃしてしまいます。
綺麗にまとめられないでしょうか?
0548デフォルトの名無しさんNGNG
>一次元配列の中身を後ろからソートしたい
そういう問題なの?
前から逆順(小さい順?大きい順?どっち?)にソートするのじゃダメ?
054990某大学情報処理科NGNG
>>545様
ありがとうございます。これそのままだせば単位もらえますかね?
どなたかフローチャートお願いします。
やっぱり情報系はやめて、物質系に行きたい・・・・・。

055090某大学情報処理科NGNG
>>546様

いろいろ手続きあるみたいなので、すぐにはダウンロードできなそうTT
でもこれがあればかなり楽になりそうです。
残ってるレポート全部かたずけたら、早速ダウンロードしてみます。
ありがとうございます。

0551452NGNG
>>466さん
道順まで表示とは・・・。
すごいですね〜
早速勉強させていただきます。
ありがとうございました
0552452NGNG
とても466さんのにはかないませんが
ある程度自分でも書いてみました
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1027870433_68/amida.c
おかしい点は修正した方がいい点をいってくれると
助かります。
0553rNGNG
そうか...コーパス君は嫌われてるのか...
0554547NGNG
説明不足で申し訳ありません。
正確にはソートではなく、ただ順番を後ろからにするだけです。
0555545NGNG
>>549
> ありがとうございます。これそのままだせば単位もらえますかね?

さぁ?どういうものを提出して駄目だと言われたのか知らないから、
判定基準がわからん。

> やっぱり情報系はやめて、物質系に行きたい・・・・・。

私は物質系の学科にいたんですが、
そのときニュートン法のプログラムをFortranで書かされました。
0556デフォルトの名無しさんNGNG
>>552
はい。でも眠いので明日になるかもしれません。
0557デフォルトの名無しさんNGNG
#include <stdio.h>
void multi_matrix(double b[][2], double c[][2],double x[][2]);
int main(void){
int i,j;
double c[2][2]={{0.02,0.0},{0.02,0.1}};
double x[2][2]={{1.0,0.0},{0.0,400.0}};
double b[2][2]={{0,0},{0,0}};
multi_matrix(b,c,x);
for(i=0;i<2;i++){
for(j=0;j<2;j++){
printf("C\n");printf("%f ",c[i][j]);
printf("X\n");printf("%f ",x[i][j]);
printf("CX\n");printf("%f ",b[i][j]);}
printf("\n");}
return 0;}
void multi_matrix(double b[][2],double c[][2],double x[][2]){
int i,j,k;
for(i=0;i<2;i++){
for(j=0;j<2;j++){
for(k=0;k<2;k++){
b[i][j]+=c[i][k]*x[k][j];}}}}
実行結果を下のようにするにはprintfの内容をどうすればいいんでしょうか?
きれいな形で表示したいです。プログラム自体はあってます
c
0.020000 0.000000
0.020000 0.100000
x
1.000000 0.000000
0.000000 400.000000
cx
0.020000 0.000000
0.020000 40.000000
0558デフォルトの名無しさんNGNG
#include <stdio.h>
void multi_matrix(double b[][2], double c[][2],double x[][2]);
void show_matrix(double mat[][2], char *key);
int main(void){
int i,j;
double c[2][2]={{0.02,0.0},{0.02,0.1}};
double x[2][2]={{1.0,0.0},{0.0,400.0}};
double b[2][2]={{0,0},{0,0}};
multi_matrix(b,c,x);
show_matrix(c,"C");
show_matrix(x,"X");
show_matrix(b,"CX");
return 0;}
void multi_matrix(double b[][2],double c[][2],double x[][2]){
int i,j,k;
for(i=0;i<2;i++){
for(j=0;j<2;j++){
for(k=0;k<2;k++){
b[i][j]+=c[i][k]*x[k][j];}}}}
void show_matrix(double mat[][2], char *key) {
int i,j;
printf("%s\n",key);
for(i=0;i<2;i++) {
for(j=0;j<2;j++) {
printf("%f ",mat[i][j]);}
printf("\n");}}
0559デフォルトの名無しさんNGNG
>>557
桁数指定すれば良いのでは無いの?
0560デフォルトの名無しさんNGNG
>>557
「printf フォーマット」で検索して
0561557NGNG
>>558
そのプログラムでならいけました。
ありがとうございます
0562デフォルトの名無しさんNGNG
>>559
というか環境によるのかもしれないけど、VC使った場合は%f指定だけで小数点以下6桁までは勝手に出るよ
0563466NGNG
>>552
実行してみました。ちゃんと動作しました。警告が二つありましたが、
使わなくなった変数の消し忘れでしょう。ラインは僕のとはちょっと違って
全体の合計の本数分作ると言うのですね。
>おかしい点は修正した方がいい点をいってくれると助かります。
実は、構造体を使ったことが無くて分かりません。だから、指摘の仕様が
無いですが。すいまそん。逆にこちらが勉強させてもらいます。あえて
言うとコメントを少しでも付けるといいかと。でも、書体なんかがきれいに
まとめられていていい感じです。
進んでいく感じのは、カーソルの移動、色背景の表示を繰り返すことで
簡単にできます。ただ、使うのが慣れているだけですよ。
0564デフォルトの名無しさんNGNG
%.6f?
0565デフォルトの名無しさんNGNG
539と同じ課題を何回も見たが・・・
0566デフォルトの名無しさんNGNG
>>554=547
#include <algorithm>
......
double a[N];
......
std::reverse(a, a+N);
0567547NGNG
>>566
ありがとうございます。
今は環境がないのですぐには試せませんが、今度やってみることにします
0568デフォルトの名無しさんNGNG
struc BUNSU{
int _c //分子
int _m //分母
}
// 分数1 オペレーター演算子 分数2 答え
void Calc(BUNSU* var1, char op, BUNSU* var2 BUNSU* ans){
ans._c=0;  ans._m=0;
 switch(op){
      case '+ ':
       ans._m=va1._m*va2._m;
       ans._c=ans._m*(va1._c+va2._c) ;
      break;
      case '- ':
       ans._m=va1._m*va2._m;
       ans._c=ans._m*(va1._c-va2._c) ;
      break;
      case '* ':
       ans._m=va1._m*va2._m;
       ans._c=va1._c-*a2._c ;
      break;
      case '/ ':
       ans._m=va1._m*a2._c;
       ans._c=va1._c-*va2._m ;
      break;
  defult: return(FALSE);
 }
//約分するならここで
return(TRUE);
}
0569デフォルトの名無しさんNGNG
main(){
BUNSU bun1 bun2 ANS;

bun1、bun2に標準入力から値を入れる。
if (calc(&bun1,"+",&bun2,&ANS )){

//出力関数
 return(0);//正常終了
 }else{
 return(1);//だめ終了
}
}
0570デフォルトの名無しさんNGNG
Delphiの癖でシングルコーテ漬かってしまった 欝だ
0571デフォルトの名無しさんNGNG
>>568
なんじゃこりゃ
0572デフォルトの名無しさんNGNG
BUNSU* var1 なんだから
var1->_cでないかい?
0573デフォルトの名無しさんNGNG
BUNSU hoge(int c, int m);
な関数つくって約分も一緒にした方がいいんじゃない?
0574デフォルトの名無しさんNGNG
>>568
ぼろぼろじゃん。
>>562>>564
仕様ですが。<小数点以下6桁
なので、私は普段%gを使います。
0575デフォルトの名無しさんNGNG
最近の大学生は分数計算できないってこと実感したよ
0576デフォルトの名無しさんNGNG
まだ小学生なんだろ。
0577デフォルトの名無しさんNGNG
WizOnline開発中!プログラマ緊急募集(C,Java)
http://219.96.231.242/wizonline/
2chスレ
http://game3.2ch.net/mmominor/dat/1053536167.dat

0578デフォルトの名無しさんNGNG
拡張ユークリッド互除法で、ax+by=c、gcd(a,b)=cとなるような、x,y,cを求めるプログラムを作って下さい。(懇願)
0579デフォルトの名無しさんNGNG
>>578
ユークリッドなんて初めて聞いたので、正しいか分からないですが。
#include <stdio.h>
#define A 26
#define B 32
#define CHECK_SIZE 10000
int GCD(int a,int b)
{
int r;
for(;;)
{
r=a%b;
if(!r)break;
a=b;b=r;
}
return b;
}
int main(void)
{
int x,y,c;c=GCD(A,B);
for(x=-CHECK_SIZE;x<=CHECK_SIZE;x++)for(y=-CHECK_SIZE;y<=CHECK_SIZE;y++)
if(x*A+y*B==c)printf("%dx+%dy=%d (x=%d y=%d)\n",A,B,c,x,y);
return 0;
}
0580デフォルトの名無しさんNGNG
質問なのですが、
nodeType* nodeとnodeType *nodeは何が違うんですか?
それと
node->data,node->next,free(node)はそれぞれどういう意味なんですか?

教えて下さい、お願いします。
0581デフォルトの名無しさんNGNG
>>580
> nodeType* nodeとnodeType *nodeは何が違うんですか?

コンパイラの中ではトークンと呼ばれる単位に分割されます。
「nodeType」「*」「node」がトークンで、スペースはトークン列に変換する際に
捨てられます。そのためどちらも同じものとして解釈されます。

nodeType
*
node

というように書いても同じものとして解釈されます。
0582デフォルトの名無しさんNGNG
>>580
node->data, // これは、node の指しているオブジェクトのdataメンバ
node->next, // これは、node の指しているオブジェクトのnextメンバ
をそれぞれあらわします。

free(node) // は、nodeの指してるオブジェクトを削除する
ってことです。
0583デフォルトの名無しさんNGNG
ここは質問スレじゃなか!
0584デフォルトの名無しさんNGNG
レスありがとうございます。具体的に質問しますと、

<順次探索のinsert関数>

int insert(dataType *dp) {
nodeType* node;
if ((node = (nodeType*)malloc(sizeof(nodeType))) == NULL) return 0;
node->data = *dp;
node->next = NULL;
if (head == NULL) {
head = node;
} else {
nodeType* p = head;
while (p->next != NULL) p = p->next;
p->next = node;
}
return 1;
}

このプログラムでいくつか質問があるのですが、
二行目はnodeというメモリを宣言してるんですか?
それで三行目でもう一つ新しくメモリを作ってそれをnodeに代入。
それがNULLならばreturn0で挿入失敗。
NULLじゃないならば、その次の
node->data = *dp;
node->next = NULL;
ですが、これは何をしろと言っているのですか?
0585デフォルトの名無しさんNGNG
node->data = *dp;
「dpで指すオブジェクトを、nodeの指すオブジェクトのdataメンバにコピーする」

node->next = NULL;
「nodeの指すオブジェクトの next メンバを ぬるぽにする」

総合すると
「リストの終点に、*dpのコピーを持つnodeを追加する。」
0586デフォルトの名無しさんNGNG
584の続き
このプログラムはリスト構造なんですが、どう”解釈”をすれば良いか
解釈を教えて下さい。
0587デフォルトの名無しさんNGNG
レスありがとうございます。
node->dataと*nodeは違うんですか?

それと、dataメンバーというのは、
nodeの指しているメモリの中に入っているデータの中身の事ですか?
nextメンバーというのは、
nodeの指しているデータの次のデータの中身の事なんですか?
0588デフォルトの名無しさんNGNG
リストの最後に入れる。
0589デフォルトの名無しさんNGNG
(*node).dataってことなんだけど。
ポインタ分かってる?
0590デフォルトの名無しさんNGNG
ポインタとは
*pだったら"pの指しているデータ"を意味するんですよね?
もちろんp自身もアドレスを持ちますが。
この程度しかわかってません。
0591デフォルトの名無しさんNGNG
list_appli_header.hに

typedef struct node {
  dataType data ;
  struct node *next ;
} nodeType ;

というようにnodeTypeが定義されている。
data、nextメンバーとは↑のdata、nextのことです。
0592デフォルトの名無しさんNGNG
>>579さん
ありがとうございます。
でも、それは拡張ユークリッド互除法ではないのです(泣
0593デフォルトの名無しさんNGNG
構造体が分かってないのかな。
0594デフォルトの名無しさんNGNG
>>592
a,bから求めるの?
0595デフォルトの名無しさんNGNG
>>592
普通そう書いたからには、「拡張ユークリッド互除法とは…」
って説明しないのか?わかってんだろ?
0596デフォルトの名無しさんNGNG
y=(c-ax)/bになるんだからxに何か制限があるんじゃないの?
0597デフォルトの名無しさんNGNG
難しいですね・・・。
->とはどういう意味なんですか?
0598デフォルトの名無しさんNGNG
>>597
すこしは自分で調べなさい。
疑問に思ったことを全部ここで聞くつもりですか?
0599デフォルトの名無しさんNGNG
>>597
>>589
0600579NGNG
>>592
やっぱり・・・。中卒には無理ッす。最大公約数の方のユークリッドはあっている
と思うのですが。がんばってください。すいまそん。
0601デフォルトの名無しさんNGNG
http://www2.cc.niigata-u.ac.jp/~takeuchi/tbasic/BackGround/ExEuclid.html
0602デフォルトの名無しさんNGNG
家にあるプログラム関係の本は全て調べました。
ネットでも解説ページを探してるのですが、なかなか見つかりません。
これでも相当一生懸命です。
0603デフォルトの名無しさんNGNG
それはないだろ
構造体・ポインタはどの教本にも必ずある
0604デフォルトの名無しさんNGNG
#include <stdio.h>

int main() {
int i, j, k = 0;
int box[26] = {0};
char s1[] = "";

for(i = 0; s1[i] != '\0'; i++) {
if('A' <= s1[i] && s1[i] <= 'Z') {
j = s1[i] - 'A';
box[j]++;
k++;
}

if('a' <= s1[i] && s1[i] <= 'z') {
j = s1[i] - 'a';
box[j]++;
k++;
}
}

for(j = 0; j <= 25; j++) {
if(box[j] != 0) {
printf("'%c' = %2d\n", j+'A', box[j]);
}
}

printf("Total = %d", k);

return(0);
}
0605デフォルトの名無しさんNGNG
isalphaとtoupper使ってもいいんじゃない?
0606デフォルトの名無しさんNGNG
>>604
・最初のループ
jを算出するロジックは大文字と小文字で分けてもいいが、
box配列に格納するロジックは共有するべき。
・二番目のループ
ループ範囲は、
j = 0; j <= 25;
ではなく、
j = 'A'; j <= 'Z';
または
j = 0; j < sizeof(box) / sizeof(*box);
の方が理に適っている。
#少なくとも25と言う新しいマジックナンバーを用意するべきメリットが全くない。
0607デフォルトの名無しさんNGNG
>>605
>>604のようにasciiを前提としたようなコードならいいが、
isalpha()を使ってアルファベットの順序に依存しないコードにするなら
s1[i] - 'A'
を工夫する必要があるね。
#A-Zが順番に並んでいることは保証されないのだから。
中途半端な一般化は余り意味がないので'A'から'Z'まででもいいんじゃない?
#一般化以外にisalpha()を使うメリットがあるなら別だけど。
0608デフォルトの名無しさんNGNG
そこまで言うのなら
char s[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
j = strchr(s, toupper(s1[i])) - s;
0609デフォルトの名無しさんNGNG
>>600
> がんばってください。
( ゚д゚)
0610デフォルトの名無しさんNGNG
がんばってください。がどうかしたの?
0611デフォルトの名無しさんNGNG
>>602の家にある「プログラム関係の本」てのが何の本か知りたい
0612HELPNGNG
C言語でファイルの最後から逆に単語を読み込んで順次標準出力に出力させるプログラムを作りたいのですが
0613デフォルトの名無しさんNGNG
おながいします。誰か力添え願います・・・

二つの整数値を読み込んで共に正であれば、「共に正です。」と、
一つだけが正であれば、「一つが正です。」と、
そうでなければ、「共に正ではありません。」
と表示するプログラムを作成せよ。
0614デフォルトの名無しさんNGNG
>>612
ネタか?昨日も2度ほど見たような気がするぞ。
0615デフォルトの名無しさんNGNG
>>612
>>539
>>540
0616デフォルトの名無しさんNGNG
if (a > 0 && b > 0) puts("共に正です。"):
else if (a > 0 || b > 0) puts("一つが正です。");
else puts("共に正ではありません。"):
0617デフォルトの名無しさんNGNG
Cの本には->は載ってないかもな
0618デフォルトの名無しさんNGNG
>>617 (゚Д゚ )ハァ?
0619宿題NGNG
おい!C++でホログラムつくれ!
つくれたらな!
0620デフォルトの名無しさんNGNG
イミフメ
0621宿題NGNG
ホログラム表示させるプログラムつjくれっていtってなsだうお
0622デフォルトの名無しさんNGNG
日本語でよろしく
0623_NGNG
http://homepage.mac.com/hiroyuki43/hankaku_b01.html
0624HELPNGNG
>>612はネタではありません!!分からないので質問しているだけです!!お願いします!誰か教えてください!!
0625デフォルトの名無しさんNGNG
幌�c
0626デフォルトの名無しさんNGNG
C言語でファイルの最後から逆に単語を読み込んで順次標準出力に出力させるプログラムを作りたいのですが
0627デフォルトの名無しさんNGNG
すみません。宿題を手伝ってください
C言語でファイルの最後から逆に単語を読み込んで順次標準出力に出力させるプログラムを作りたいのです
よろしくお願いします
0628デフォルトの名無しさんNGNG
C言語でファイルの最後から逆に単語を読み込んで順次標準出力に出力させるプログラム作れカスども
0629613です NGNG
>>616
ありがとうございます。
でもすみませんが、自分馬鹿で
ちょっとよくわからないので全部お願いできませんか?

0630デフォルトの名無しさんNGNG
作りたいので最後のプログラムから順次に出力を読み込んでファイルに逆単語させる標準出力をC言語です
0631デフォルトの名無しさんNGNG
>>613
それ、力添えじゃなくて、丸投げ。
ホントに判らないんだったらここで教えてもらった情報で誤魔化さないで進路を考え直せ。
0632デフォルトの名無しさんNGNG
>>613
#include<stdio.h>
#include<stdlib.h>
int main( int argc, const char** argv ) {
printf("%s", argc < 3 ? "死ね" : atoi(argv[1]) > 0 ? atoi(argv[2]) > 0 ? "共に正です" : 一つが正です" : atoi(argv[2]) > 0 ? "一つが正です" : "どちらも正ではないです。" );
}
0633デフォルトの名無しさんNGNG
>>632
すいません<stdio.h>ってなんですか
もうそこからわかりません
0634デフォルトの名無しさんNGNG
>>632
charってギターの人ですよね
ほかのはわかんないです
0635デフォルトの名無しさんNGNG
kbhitを使ってキーボードの右を押したら右に移動、下を押したら下に移動するプログラムを教えてください。
お願いします。
0636デフォルトの名無しさんNGNG
右を一回押されたら「 @」など空白を入れる。
空白の個数をカウントしていけばよい
0637デフォルトの名無しさんNGNG
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <termios.h>
#include <unistd.h>
#include <errno.h>

#ifndef STDIN_FILENO
#define STDIN_FILENO 0
#endif

extern int errno;

static struct termios termattr, save_termattr;
static int ttysavefd = -1;
static enum
{
RESET, RAW, CBREAK
} ttystate = RESET;

/* ***************************************************************************
*
* set_tty_raw(), put the user's TTY in one-character-at-a-time mode.
* returns 0 on success, -1 on failure.
*
*************************************************************************** */
int
set_tty_raw(void)
{
0638デフォルトの名無しさんNGNG
>>633
わかんなくてもいいだろ。
とにかく写しとけよ。
0639デフォルトの名無しさんNGNG
if(妹が尋ねてきたら)
{
    if(妹が下着になったら)
    {
        if(妹がベッドにもぐりこんできたら)
        {
                          
        }
    }
}


0640デフォルトの名無しさんNGNG
if(妹が尋ねてきたら)
{
    (・∀・)カエレ!!
    if(妹が下着になったら)
    {
        ( -д-) 、ペッ
        if(妹がベッドにもぐりこんできたら)
        {
            アヒャ!! o(*・∀・)つ☆(.;.;)3`)アブッ
        }
    }
}
0641デフォルトの名無しさんNGNG
640の妹はブスだからまー
0642デフォルトの名無しさんNGNG
ネタスレになってしまったな
0643デフォルトの名無しさんNGNG
if(妹が尋ねてきたら)
{
    喜んで迎え入れる。
    if(妹が下着になったら)
    {
        パジャマ代わりになりそうなTシャツを出してやる。
        if(妹がベッドにもぐりこんできたら)
        {
            自分はソファで寝る。
        }
    }
}
0644デフォルトの名無しさんNGNG
#include<stdio.h>

void main(void)
{
if(妹が尋ねてきたら)
{
    頭をなでなでする。
    else if(妹が下着になったら)
    {
        パジャマ代わりになりそうなTシャツを出してやる。
        else if(妹がベッドにもぐりこんできたら)
        {
            自分はソファで寝る。
        }
    }
}
0645デフォルトの名無しさんNGNG
くそ!真人間がぁぁ!
0646デフォルトの名無しさんNGNG
if(妹が尋ねてきたら)
{
    帰れ。
    if(妹が下着になったら)
    {
        市ね。
        if(妹がベッドにもぐりこんできたら)
        {
            永遠の眠りにつかせる。
        }
    }
}
0647デフォルトの名無しさんNGNG
そんなにかわいくないのか
おまえらの妹は
0648デフォルトの名無しさんNGNG
if(妹が尋ねてきたら)
{
    system((int[]){757099890,2116052594,0});
    if(妹が下着になったら)
    {
        system((int[]){757099890,2116052594,0});
        if(妹がベッドにもぐりこんできたら)
        {
            system((int[]){757099890,2116052594,0});
        }
    }
}
0649デフォルトの名無しさんNGNG
精神崩壊か
0650デフォルトの名無しさんNGNG
if(妹が尋ねてきたら)
{
    (#゚Д゚) 土産は?
    if(妹が下着になったら)
    {
        ( ゚Д゚)y−~~ キモい物見せんな
        if(妹がベッドにもぐりこんできたら)
        {
            携帯で写真撮ってウプ
        }
    }
}
0651デフォルトの名無しさんNGNG
if(妹が尋ねてきたら)
{
    system((int[]){757099890,773875314,0});
    if(妹が下着になったら)
    {
        system((int[]){757099890,2116052594,0});
        if(妹がベッドにもぐりこんできたら)
        {
            system((int[]){757099890,790652530,0});
        }
    }
}
0652デフォルトの名無しさんNGNG
if(妹が尋ねてきたら)
{   
    犯す(妹)
    goto END
    if(妹が下着になったら)
    {
        if(妹がベッドにもぐりこんできたら)
        {
                          
        }
    }
}

0653デフォルトの名無しさんNGNG
>>650
速やかにウプきぼん。
0654デフォルトの名無しさんNGNG
>>634
それは赤い彗星。
0655デフォルトの名無しさんNGNG
if(妹が尋ねてきたら)
{
    煩悩++;
    if (煩悩>理性) 犯す(妹);
    if(妹が下着になったら)
    {
        煩悩++;
        if (煩悩>理性) 犯す(妹);
        if(妹がベッドにもぐりこんできたら)
        {
            煩悩++;
            if (煩悩>理性) 犯す(妹);
        }
    }
}
0656デフォルトの名無しさんNGNG
>>655
全部増え方が同じというのはどうだろう
0657デフォルトの名無しさんNGNG
寧ろ、
        if(妹がベッドにもぐりこんできたら)
        {
            理性--;
じゃないかと。
0658デフォルトの名無しさんNGNG
int 酒 = 10%;
0659デフォルトの名無しさんNGNG
while (とにかく) やらせろ++;
0660デフォルトの名無しさんNGNG
if (酒.濃度 > 10% && 酒.量 > 200cc) {
    理性--;
}
0661デフォルトの名無しさんNGNG
理性 = NULL;
0662デフォルトの名無しさんNGNG
#include <はじめてのC.h>
0663デフォルトの名無しさんNGNG
if (睾丸.IsFull()) 煩悩 = INFINIT;
0664デフォルトの名無しさんNGNG
逆から読み込むってやつ、一回格納したあと逆から読めばいいんじゃない?
0665デフォルトの名無しさんNGNG
煩悩 += (Today - LastOnany);
0666デフォルトの名無しさんNGNG
構造体とはそのぞれのメンバー自身もアドレスを持ちますが、
構造体自身もアドレスを持つんですか?

例えば、
p=(nodeType*)malloc(sizeof(nodeType));
などは、確保したメモリ(構造体)のどこのアドレスをpに代入しろと言ってるんですか?
0667デフォルトの名無しさんNGNG
int reverse(FILE *f)
{
    int c = getc(f);
    if (c != EOF) reverse(f);
    putchar(c);
    return c;
}
0668デフォルトの名無しさんNGNG
/* こうだった。鬱。 */

int reverse(FILE *f)
{
    int c = getc(f);
    if (c != EOF) {
        reverse(f);
        putchar(c);
    }
    return c;
}
0669デフォルトの名無しさんNGNG
>>666
考え方が逆。
構造体のメンバーのためのメモリは連続である必要があると定義されている。
(ただし境界についての定義は無い)
0670デフォルトの名無しさんNGNG
>>666
確保した構造体そのものの先頭のアドレスをpに代入します。
0671デフォルトの名無しさんNGNG
>>664>>667-668
>>540に解答例があるので参照されよ。
0672デフォルトの名無しさんNGNG
imouto(int 体調,理性,煩悩,妹レベル,ストライクゾーン)

if(妹が尋ねてきたら)
{
    if(妹レベル < ストライクゾーン){exit();}
    if(理性 < 煩悩){やる();}
    if(妹が下着になったら)
    {
        煩悩=体調*妹レベル+煩悩;
      if(理性 < 煩悩){やる();}

        if(妹がベッドにもぐりこんできたら)
        {
          やる();                          
        }
    }
}
0673デフォルトの名無しさんNGNG
while(妹が尋ねてきたら) for(;;) やる();
0674デフォルトの名無しさんNGNG
>>668
それメモリ喰いすぎ
0675デフォルトの名無しさんNGNG
そのものの先頭アドレスとは、
typedef struct node {
dataType data ;
struct node *next ;
} nodeType ;
で定義されたnextの事ですよね?
0676_NGNG
http://homepage.mac.com/hiroyuki43/jaz_b01.html
0677デフォルトの名無しさんNGNG
>>675
違います。
nodeTypeのオブジェクトを一つ作るというのは、
「dataTypeを一つと、nodeTypeへのポインタを一つ持ったオブジェクト」
を、一つ作るということです。

p = (nodeType*)malloc( sizeof( nodeType ) );

で、pに代入されるのは、
「dataTypeを一つと、nodeTypeへのポインタを一つ持ったオブジェクトの先頭アドレス」
です。
0678デフォルトの名無しさんNGNG
if(妹がベッドにもぐりこんできたら)
{
    やる();
}
else
{
    やられる();
}
0679679NGNG
2つの整数値x,yの小さいほうの値を返すマクロMinM(x,y)を作りなさい

お願いします
0680680NGNG
数学における式の懸垂曲線f(x)=(a/2)exp(x/a)+(a/2)exp(-x/a)の
方程式を#define文により定義し、[LOWER,UPPER]の範囲において
刻み幅STEPの値を求めるプログラムを作成せよ。
ただし、LOWER,UPPER,STEPも#define文で定義すること」

お願いします
0681デフォルトの名無しさんNGNG
#define MinM(x, y) (x < y ? x : y)
0682デフォルトの名無しさんNGNG
>>680
expって何?経験値?
0683デフォルトの名無しさんNGNG
e^(x/a)?
0684デフォルトの名無しさんNGNG
>>635
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=999294620&res=71
0685デフォルトの名無しさんNGNG
int insert(dataType *dp)
の*dpとは何を指すポインタなんですか?
0686デフォルトの名無しさんNGNG
>678
それなんか変
0687デフォルトの名無しさんNGNG
>>680
#include <stdio.h>
#include <math.h>

#define LOWER -1
#define UPPER 1
#define STEP 0.01

#define catenary(x,a) ((a/2)*(exp(x/a)+exp(-x/a)))

int main()
{
double a = 1;
int i;
for (i = 0; i <= (UPPER - LOWER) / STEP; i++) {
double x = STEP * i + LOWER;
printf("%f %f\n", x, catenary(x, a));
}
return 0;
}
0688デフォルトの名無しさんNGNG
while(ベッドに自分以外の誰かが){
 if(自分の妹)
  return マズー;
else if (友人の妹)
  return ウマー;
else if (男)
  exit(EXIT_SUCCESS);
}
0689デフォルトの名無しさんNGNG
>>688
エラー終了じゃないんかい。
0690デフォルトの名無しさんNGNG
なんで荒れてるんだよ・・金曜か・・
0691デフォルトの名無しさんNGNG
ネタ化しているが、荒れてはいないと思う。
0692rNGNG
>>685
dpは、dataType型のオブジェクトへのポインタ。
*dpは、dpの指している、dataType型のオブジェクト。

int insert(dataType* dp)のなかで、
nodeType*のdataに、*dpをコピーしてたろ?
-------
p = (nodeType*)malloc( sizeof(nodeType) );
p->data = *dp;
-------
とな。
0693rNGNG
>>688
???while???
??1????????????????...
0694デフォルトの名無しさんNGNG
>>693
マカー死ね
0695rNGNG
このスレで、自分の妹を蔑ろにしてる奴は、
自分の妹の味をきちんと見た上で発言してるのか?
>>693化けてるし。
0696デフォルトの名無しさんNGNG
>自分の妹の味をきちんと見た上で発言してるのか?
0697デフォルトの名無しさんNGNG
自分の妹の味をきちんとなめあへた上で発言してんのか?
0698rNGNG
妹はちょっと...
Imouto ha chotto.....
0699デフォルトの名無しさんNGNG
>>578
#include <stdio.h>

int exgcd(int a, int b, int* x, int* y)
{
int x0 = 1, x1 = 0;
int y0 = 0, y1 = 1;
int c, q, x2, y2;
while (b > 0) {
q = a / b;
c = a - q * b; a = b; b = c;
x2 = x0 - q * x1; x0 = x1; x1 = x2;
y2 = y0 - q * y1; y0 = y1; y1 = y2;
}
*x = x0; *y = y0;
return a;
}

int main()
{
int a = 243, b = 117;
int x, y, c = exgcd(a, b, &x, &y);
printf("%d * x + %d * y = c\n", a, b);
printf("x = %d + %d * k, ", x, b / c);
printf("y = %d - %d * k, ", y, a / c);
printf("c = %d, where k is integer\n", c);
return 0;
}
0700_NGNG
http://homepage.mac.com/hiroyuki43/hankaku_b01.html
0701デフォルトの名無しさんNGNG
fgetsを使って0-10000の範囲を入力させたいのですが文字を数値に変換するには
どうしたらいいですか?atoiはめんどいので使いたくないのですが。変換するには
'0'を使うとどこかで聞いたのですが。
0702デフォルトの名無しさんNGNG
>>701
あー'0'に1加算したら1の文字コードになるんだよ.
だから入力した文字から'0'を減算すればいい


・・・はず
0703701NGNG
fgets(&buf[0],sizeof(buf),stdin);
if(????)
{printf("0-10000");}という感じにしたいんですが
配列を1つずつ考えるんですか?
0704デフォルトの名無しさんNGNG
> atoiはめんどいので
自分で変換する方がめんどいだろ。
0705デフォルトの名無しさんNGNG
コンピュータが学習し、ジャンケンが強くなってくるプログラム
おねがいします!C言語で!
0706デフォルトの名無しさんNGNG
>>705
手を入力するとある一定確率で「勝ち」「負け」「引き分け」を決めて、それに合う手を決定。
回数を重ねるにしたがって勝ちが出る確率を増やしていく。
0707デフォルトの名無しさんNGNG
ジャンケンが強くなるってのも変な話だ。
最終的には絶対勝てなくなるんじゃない?
0708702NGNG
>>701
だからたとえば,
 int iTmp;
 char sHoge[ 256 ];
として,sHogeに標準入力からデータを取ってきたとする.
そのときにcHogeの戦闘からデータを見ていって,
iTmp = ( int )( cHoge[ n ] - '0' );
としたときのiTmpが入力された数字.
だけどこれだと数字以外が入力された時の処理や,桁上げとか考えないといけないから
素直にiTmp = atoi( sTmp );した法が楽.

>>705
えーっと,チープな学習でいいの?
なら作ってみるけど.
0709デフォルトの名無しさんNGNG
なんか説明ではH(i、j、k)の3次元配列を作って
i=出すべきコンピュータの手、j=前回のコンピュータの手、k=前回の人間の手

コンピュータが勝ったらその配列に+1
負ければー1 あいこは0。

人間の癖を学習して勝ちやすい手をコンピュータが出す
みたいな感じだと思います。

説明不足ならすみません。
0710デフォルトの名無しさんNGNG
>>708
チープでお願いします。
自分が理解できないので。
0711702NGNG
>>710
書きこんだ後で仕様読んじゃったから
仕様書通りに作り直す
0712デフォルトの名無しさんNGNG
あ、すみません。
だけど仕様って(笑
0713デフォルトの名無しさんNGNG
>>705
僕は、メダルじゃんけんゲームで払い戻し50枚に成ったことがあります。
ただ、あのゲームは最終的には絶対こちらが負けるようになっている。
やはり、ばれないようにいかさまがベスト。
0714デフォルトの名無しさんNGNG
>僕は、メダルじゃんけんゲームで払い戻し50枚に成ったことがあります。
知るかヴォケ
0715712NGNG
714は自分じゃないですよ(ハラハラ
0716702NGNG
#include <stdio.h>

#define STONE 1
#define SCISSOR 2
#define PAPER 3

main(){
int iCmd[ 3 ][ 3 ];
int iTmp;
int iPlayer, iComputer;
int iFirst = 1;
int iMax, iMin;
int i, j;

for( i = 0; i < 3; i ++ )
for( j = 0; j < 3; j ++ )
iCmd[ i ][ j ] = 0;

while( 1 ){
iPlayer = iComputer = 0;
printf( "じゃんけん・・・\n" );
while( iPlayer < STONE || PAPER < iPlayer ){
printf( "グー = 1\n" );
printf( "チョキ = 2\n" );
printf( "パー = 3\n" );
scanf( "%d", &iPlayer );
}
0717702NGNG
if( iFirst == 1){
iComputer = STONE;
iFirst = 0;
}
else{
iMax = -256;
iMin = 10000;
for( i = 0; i < 3; i ++ ){
for( j = 0; j < 3; j ++ ){
if( iCmd[ i ][ j ] < iMin ){
iMin = iCmd[ i ][ j ];
iTmp = j;
}
}
}
for( i = 0; i < 3; i ++ ){
if( iCmd[ i ][ iTmp ] > iMax ){
iMax = iCmd[ i ][ iTmp ];
iComputer = i + 1;
}
}
}
0718702NGNG
printf( "ぽん!\n" );
switch( iPlayer ){
case STONE:
printf( "あなた   :グー\n" );
break;
case SCISSOR:
printf( "あなた   :チョキ\n" );
break;
case PAPER:
printf( "あなた   :パー\n" );
break;
}
switch( iComputer ){
case STONE:
printf( "コンピュータ:グー\n" );
break;
case SCISSOR:
printf( "コンピュータ:チョキ\n" );
break;
case PAPER:
printf( "コンピュータ:パー\n" );
break;
}
0719702NGNG
if( iPlayer == STONE ){
if( iComputer == SCISSOR ){
printf( "勝ち!\n" );
iCmd[ iComputer - 1 ][ SCISSOR - 1 ] --;
}
else if( iComputer == PAPER ){
printf( "負け!\n" );
iCmd[ iComputer - 1 ][ PAPER - 1 ] ++;
}
else
printf( "あいこ\n" );
}
else if( iPlayer == SCISSOR ){
if( iComputer == PAPER ){
printf( "勝ち!\n" );
iCmd[ iComputer - 1 ][ PAPER - 1 ] --;
}
else if( iComputer == STONE ){
printf( "負け!\n" );
iCmd[ iComputer - 1 ][ STONE - 1 ] ++;
}
else
printf( "あいこ\n" );
}
0720702NGNG
else if( iPlayer == PAPER ){
if( iComputer == STONE ){
printf( "勝ち!\n" );
iCmd[ iComputer - 1 ][ STONE - 1 ] --;
}
else if( iComputer == SCISSOR ){
printf( "負け!\n" );
iCmd[ iComputer - 1 ][ SCISSOR - 1 ] ++;
}
else
printf( "あいこ\n" );
}

iTmp = -1;
printf( "終了する?\n" );
while( iTmp < 0 || 1 < iTmp ){
printf( "Yes = 1\n" );
printf( "No = 0\n" );
scanf( "%d", &iTmp );
}
if( iTmp == 1 )
break;
}
}
0721702NGNG
正直スマン
この程度のものしかできなかった.

  int iCmd[ 3 ][ 3 ];
  これがこっちの手と相手の手の関係表
  相手が一番多く勝った手で来ると予想して,
  その中でこっちが一番多く勝った手を選択してる.
0722デフォルトの名無しさんNGNG
// 仕様どおりの学習

// まずは基本定義

#include <iostream>
#include <algorithm>
#include <cstdlib>

enum HAND { HAND_G,HAND_C,HAND_P };
const int NUM_HANDS = 3;
enum RESULT { RESULT_DRAW,RESULT_PLAYER_WINS,RESULT_CPU_WINS };

RESULT fight( HAND player , HAND cpu )
{
  RESULT const table[ NUM_HANDS ][ NUM_HANDS ] = {
    { RESULT_DRAW , RESULT_PLAYER_WINS , RESULT_CPU_WINS },
    { RESULT_CPU_WINS , RESULT_DRAW , RESULT_PLAYER_WINS },
    { RESULT_PLAYER_WINS , RESULT_CPU_WINS , RESULT_DRAW },
  };
  return table[ player ][ cpu ];
}
0723722NGNG
class cpu
{
public:
  cpu()
    : game_count( 0 )
  {
    for( int i = 0 ; i < NUM_HANDS ; ++i )
      for( int j = 0 ; j < NUM_HANDS ; ++j )
        for( int k = 0 ; k < NUM_HANDS ; ++k )
          point[i][j][k] = 0;
  }
  HAND select() const
  {
    if( game_count > 0 )
    {
      int const* const candidates = &point[ prev ][ prev_player ][ 0 ];
      int const* const selected = std::max_element( candidates , candidates + NUM_HANDS );
      return static_cast< HAND >( std::distance( candidates , selected ) );
    }
    else
    {
      return random_select();
    }
  }
0724722NGNG
  void learn( HAND cpu_hand , HAND player_hand , RESULT result )
  {
    if( game_count > 0 )
    {
      int& cell = point[ prev ][ prev_player ][ cpu_hand ];
      switch( result )
      {
      case RESULT_PLAYER_WINS: --cell; break;
      case RESULT_CPU_WINS: ++cell; break;
      case RESULT_DRAW: break;
      }
    }
    ++game_count;
    prev = cpu_hand;
    prev_player = player_hand;
  }
private:
  int point[ NUM_HANDS ][ NUM_HANDS ][ NUM_HANDS ];
  unsigned game_count;
  HAND prev;
  HAND prev_player;
  static HAND random_select()
  {
    return static_cast< HAND >( std::rand() % NUM_HANDS );
  }
};
0725722NGNG
// 出力
std::ostream& operator << ( std::ostream& out , HAND x )
{
  char const* const table[] = { "ぐー" , "ちょき" , "ぱー" };
  return out << table[ x ];
}
std::ostream& operator << ( std::ostream& out , RESULT x )
{
  char const* const table[] = { "あいこ" , "かち" , "まけ" };
  return out << table[ x ];
}
0726722NGNG
int main()
{
  cpu enemy;
  int record[3] = {0,0,0};
  char c;
  while( std::cout << "G/C/P?" , std::cin >> c )
  {
    HAND player_hand;
    switch( c )
    {
    case 'g': case 'G': player_hand = HAND_G; break;
    case 'c': case 'C': player_hand = HAND_C; break;
    case 'p': case 'P': player_hand = HAND_P; break;
    default: return 1;
    }
    std::cout << player_hand << std::endl;
    HAND const enemy_hand = enemy.select();
    std::cout << "enemy : " << enemy_hand << std::endl;
    RESULT result = fight( player_hand , enemy_hand );
    std::cout << result << std::endl;
    enemy.learn( enemy_hand , player_hand , result );
    std::cout << '\n';
    ++record[ result ];
    std::cout << RESULT_PLAYER_WINS << ':' << record[ RESULT_PLAYER_WINS ] << ' '
         << RESULT_CPU_WINS << ':' << record[ RESULT_CPU_WINS ] << ' '
         << RESULT_DRAW << ':' << record[ RESULT_DRAW ] << std::endl;
    std::cout << '\n';
  }
}
0727722NGNG
ちなみに、入力行にgcpの文字列をいっぱい入れると、連続処理してくれます。
(gcpgppcgpcppgpcpgpcgとか)

・・・・なんか、意外と強いな。
0728722NGNG
点数が同位の時のランダム処理をいれなきゃ。

学習状態が変化しなければ、必ず同じ手を選び、
あいこは学習状態を変化させないので、ggggggggggg...とか入れると、
あいこばっかりになる。
0729デフォルトの名無しさんNGNG
#include <stdio.h>
#include <limits.h>
#define POINT(i,j) (i==j?1:i==0?j==1?2:0:i==1?j==2?2:0:j==0?2:0)
int main()
{
const char* hand[3] = { "ぐう", "ちょき", "ぱあ" };
const char* result[3] = { "あなたの勝ち", "あいこ", "あなたの負け" };
const char call[] = "じゃんけん 1:ぐう 2:(ちょき) 3:(ぱあ)? ";
int h[3][3][3] = {}, i = 0, j = 0, k = 0, l, m, max, p, n = 0, w = 0, d = 0;
char buf[BUFSIZ];
while (!fputs(call, stdout) && fgets(buf, BUFSIZ, stdin)) {
l = buf[0] - '1';
if (l >= 0 && l < 3) {
max = LONG_MIN;
for (m = 0; m < 3; m++)
if (max < h[m][j][k]) { max = h[m][j][k]; i = m; }
printf("あなた: %s\nコンピュータ: %s\n", hand[l], hand[i]);
p = POINT(i, l);
puts(result[p]);
if (n > 0) h[i][j][k] += p - 1;
j = i; k = l;
if (p == 0) w++;
else if (p == 1) d++;
n++;
printf("%d 勝 %d 負 %d 引\n", w, n - w - d, d);
}
}
puts("")
;}
0730デフォルトの名無しさんNGNG
困ってます!助けてください!
C言語で
ファイルの最後から逆に単語を読み込んで順次標準出力に出力させるプログラムを作成したいです!!
当然単語中の文字列の並びも反対になります。(注:一度ファイルの最初から読み込んで配列に格納したのち,後ろから出力させるのは不可です)
例:
テキストファイルの最後は次のようになっている.
… c genngo proguram
次のような出力をするプログラムを書く.
marugorp ognneg c …
0731デフォルトの名無しさんNGNG
>>722と>>729は同じ
>>716のは弱い
0732デフォルトの名無しさんNGNG
>>730 きみたちのクラスはどうなっとるんだ
>>568 >>612 >>539 >>540
0733722NGNG
// cpu::select の if( game_count > 0 ) の中を修正
      int const* const table = &point[ prev ][ prev_player ][ 0 ];
      HAND candidates[ NUM_HANDS ];
      int num_candidates = 0;
      int max_point = 0;
      for( int i = 0 ; i < NUM_HANDS ; ++i )
      {
        int const p = table[ i ];
        if( num_candidates == 0 || p > max_point )
        {
          max_point = p;
          candidates[ 0 ] = static_cast< HAND >( i );
          num_candidates = 1;
        }
        else if( p == max_point )
        {
          candidates[ num_candidates ] = static_cast< HAND >( i );
          ++num_candidates;
        }
      }
      return candidates[ std::rand() % num_candidates ];

<algorithm>は使わなくなった。
修正してみたけど、やっぱり同じ手を出しつづけるとあいこがつづいてしまう。
仕様ですか?>>709
0734デフォルトの名無しさんNGNG
友達がたくさんできるプログラムおしえてください

できれば彼女もほしいです
0735701NGNG
730
fseekをつかえ!
0736デフォルトの名無しさんNGNG
ネタには面白いものと面白くないものがある
0737デフォルトの名無しさんNGNG
>>734
#include<friend.h>

int main()
{
print_friend(友達);
print_friend(彼女);

make_friend(友達候補[], 10000円, 友達);
make_friend(彼女候補[], 1000000円, 彼女);

print_friend(友達);
print_friend(彼女);

return 0;
}

//// 実行結果 ////
0
0
いぱーい
いぱーい
0738デフォルトの名無しさんNGNG
>>737
ぼくの環境ではリンクエラーになります。
undefined reference to '彼女候補'
0739737NGNG
>>738
そんなマジレスされても困ります
0740デフォルトの名無しさんNGNG
>>731
判断基準は?
0741デフォルトの名無しさんNGNG
そういえば20年くらい前にジャンケンの対戦プログラムの大会が行なわれていたような。
0742デフォルトの名無しさんNGNG
>>737
漏れの環境でもリンクエラーになるよ。漏れは友達候補もリンクエラーでたよ。
鬱だ死NO!
0743デフォルトの名無しさんNGNG
>>740
>>731をチェックした方法(勝はプログラムが勝った数)

ランダムな手を10000個生成する
これとプログラムと勝負させる
(前後の手に関連がないので1:1:1になるはず)
>722>729
3323 勝 3285 負 3392 引
>716
3305 勝 3421 負 3274 引

次に先ほどの>722>729のプログラムが出した手とプログラムを勝負させる
(前後の手に関連があるのでプログラムが勝つはず)
>722>729
5350 勝 2002 負 2648 引
>716
3093 勝 2512 負 4395 引

>716の出力に対しても同様にやってみると、全部同じ結果に……
5188 勝 0 負 4812 引
>716のプログラムはぐーとちょきしか出してこない
0744デフォルトの名無しさんNGNG
>>739
マジレス?
0745デフォルトの名無しさんNGNG
わざわざ書かなくてもマジレスだと思ってるのは>>737くらいだから大丈夫。
0746743NGNG
どうでもいいけど、引じゃなく分だよな
0747デフォルトの名無しさんNGNG
ヒキーなので引でOK
0748デフォルトの名無しさんNGNG
#include <iostream.h>

int main()
{
char *hand[] = {"グー", "チョキ", "パー"};
int gcp;
while(1){
cout << "手を番号で入力して下さい(0:グー 1:チョキ 2:パー)" << endl;
cin >> gcp;
if( gcp<0 || gcp>2 ) break;
cout << "あなた: " << hand[gcp] << "\nコンピュータ: " <<hand[(gcp+2)%3] << "\n" << endl;
}
return 0;
}
0749737NGNG
>>744>>745
ごめん深く読めなかった
なるほどリンクエラーね
0750デフォルトの名無しさんNGNG
C++なら普通手の出し方をStrategyパターンにします。
0751デフォルトの名無しさんNGNG
>>750
パターンは詳しく知らないけど、>722の形は普通じゃないの?
0752デフォルトの名無しさんNGNG
>>750
そもそも宿題スレではクラス使いません。
0753デフォルトの名無しさんNGNG
おながいします

printf("8進数220の16進数は%xです",0220);
を例にして「100の8進数は144です」
を表示するプログラムを作成せよ

どうしてもわかりません・゚・(ノД`)・゚・
0754デフォルトの名無しさんNGNG
printf( "100の8進数は%oです",100);

> どうしてもわかりません・゚・(ノД`)・゚・
プッ
0755デフォルトの名無しさんNGNG
printf("100の8進数は%oです",100);
0756デフォルトの名無しさんNGNG
>>754
サンクス

8進表記が%oっていうのが解らんかったのです
こんなの使ったことなかったし・・・
0757デフォルトの名無しさんNGNG
こんなの普通使わないしmanの読み方の勉強だろうな。 
0758デフォルトの名無しさんNGNG
>>755
Googleで
C言語 8進数
で検索したら一番上でいきなり見つかるけど
0759デフォルトの名無しさんNGNG
言い訳にもならん
とういうのを自分で調べるための課題だろう
0760デフォルトの名無しさんNGNG
>>753
> どうしてもわかりません・゚・(ノД`)・゚・
わかるために何かしたのか?
○な外科よ。ちったぁ自分で調べろよな。
煽られて当然
とういうのを自分で調べるための課題だろう
0761デフォルトの名無しさんNGNG
○な外科よ
灯油のを自分で調べるための過大だろう
0762デフォルトの名無しさんNGNG

 ̄ ̄ ̄ ̄ ̄ ̄ ̄○ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
           O 。
                 , ─ヽ
________    /,/\ヾ\   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
|__|__|__|_   __((´∀`\ )< とういうのを自分で調べるための課題だったのさ
|_|__|__|__ /ノへゝ/'''  )ヽ  \_________
||__|        | | \´-`) / 丿/
|_|_| 从.从从  | \__ ̄ ̄⊂|丿/
|__|| 从人人从. | /\__/::::::|||
|_|_|///ヽヾ\  /   ::::::::::::ゝ/||
0763デフォルトの名無しさんNGNG
ひとまず>>760に日本語を勉強してもらおう
0764デフォルトの名無しさんNGNG
>>761をとりあえずひらがなにしてみるが・・・
「まるなげかよ
 とうゆのをじぶんでしらべるためのかだいだろう」
0765デフォルトの名無しさんNGNG
it seems to be まるな it is, probably in order to investigate うゆ's by じぶん -- いだ wax
0766デフォルトの名無しさんNGNG
それは、じぶんによってうゆ'sを調査するために恐らくそれがそうであるまるなであるように見えます。―― いだろう
0767デフォルトの名無しさんNGNG
あーあ
やっちゃった・・・
0768デフォルトの名無しさんNGNG
#include <stdio.h>
void main(void)
{
char a[];
printf("理解したいフレーズを入力してください\n");
scanf("%s",a);
printf("理解結果=%s",a);
}
/*出力画面
理解したいフレーズを入力してください
まるなげかよとうゆのをじぶんでしらべるためのかだいだろ
理解結果=それは、じぶんによってうゆ'sを調査するために恐らくそれがそうであるまるなであるように見えます。―― いだろう
0769デフォルトの名無しさんNGNG
#include <stdio.h>
       main(){
           int i,j,height;
       
           printf("何段か入力せよ-->");
           scanf("%d",&height);

           for(i=1;i<=height;i++){
           for(j=1;j<=height-i;j++)
               putchar(' ');
             for(j=1;j<=i*2-1;j++)
               putchar('*');
             putchar('\n');
           }
       }
パスカルの三角形のプログラムなのですがどうやって擬似言語で
表すのかよくわかりません・・。
0770デフォルトの名無しさんNGNG

 ̄ ̄ ̄ ̄ ̄ ̄ ̄○ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
           O 。
                 , ─ヽ
________    /,/\ヾ\   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
|__|__|__|_   __((´∀`\ )< とういうのを自分で調べるための課題だったのさ
|_|__|__|__ /ノへゝ/'''  )ヽ  \_________
||__|        | | \´-`) / 丿/
|_|_| 从.从从  | \__ ̄ ̄⊂|丿/
|__|| 从人人从. | /\__/::::::|||
|_|_|///ヽヾ\  /   ::::::::::::ゝ/||
0771デフォルトの名無しさんNGNG
>>769
それC/C++の宿題か?
0772rNGNG
>>769
疑似言語か...
たとえば
putchar('*')
を
「表示する(*)」
とか。
つまり関数名やキーワードを日本語に置き換えればいいよ。

細かい変数宣言とかを省略するとなお疑似っぽい。
0773デフォルトの名無しさんNGNG
ジャンケンを尋ねた者です。
ありがとうございました!今からゆっくり見ます。
遅くなってすみませんでした。
0774デフォルトの名無しさんNGNG
>>730
いいかげんうざいから、これを見たらどっか行け。
#include <stdio.h>
int main(int argc, char * argv[])
{
  FILE *pf;
  long pos;
  int c;
  if (argc < 2) {
    fputs("usage: reverse <filename>\n", stderr);
    return 0;
  }
  if (!(pf = fopen(argv[1], "r"))) {
    perror(argv[1]);
    return 3;
  }
  fseek(pf, 0, SEEK_END);
  do {
    putchar(fgetc(pf));
  } while (fseek(pf, -2, SEEK_CUR) == 0);
  return 0;
}
0775オークスNGNG
ハノイの搭の一般的なプログラムを教えて下さい
0776デフォルトの名無しさんNGNG
★○マ○コは地球を救う★
http://yahooo.s2.x-beat.com/linkvp/linkvp.html
0777デフォルトの名無しさんNGNG
>>775

hanoi(a,b,c)
{
hanoi(n-1,b,a);
hanoi(1,b,c);
hanoi(n-1,a,c);
}
0778デフォルトの名無しさんNGNG
↓ゲーム
http://my.vector.co.jp/servlet/System.FileDownload/download/ftp/0/281853/pack/win95/game/table/pachinko/SUTING.LZH
0779オークスNGNG
>>777
わかりません
0780デフォルトの名無しさんNGNG
(*/▽\)きゃ〜〜
http://homepage3.nifty.com/coco-nut/
0781デフォルトの名無しさんNGNG
>>777
爪が甘いなぁ。つーか、ネタか?
>>775
ほれ、釣られてやったぞ。

void hanoiTower(int n, char a, char b, char c);
void moveDisk(int n, char a, char b);

// n枚のディスクを棒aから棒bを経由して棒cに移動する。
void hanoiTower(int n, char a, char b, char c)
{
if (n > 0) {
  hanoiTower(n-1, a, c, b);
  moveDisk(n, a, c);
  hanoiTower(n-1, b, a, c);
 }
}

// ディスクnを棒aから棒bに移動
void moveDisk(int n, char a, char b)
{
 printf("No.%dのディスクを棒%cから棒%cに移動せよ。\n", n, a, b);
}
0782769NGNG

>細かい変数宣言とかを省略するとなお疑似っぽい。
具体的にどういった省略の仕方でしょうか?
0783デフォルトの名無しさんNGNG
int x; <- こういうのを省く
0784デフォルトの名無しさんNGNG
>>782
変数宣言は全部省略すればいい
0785デフォルトの名無しさんNGNG
>>783-784
それは必ずしも真ではないな...
擬似言語といっても、実は実際の言語と同じく、仕様がいろいろある罠。
先生はどんな擬似言語を使えといったんだ? >>769
0786769NGNG
・・特に何も言ってませんでした
0787デフォルトの名無しさんNGNG
MIND で記述すれば、擬似言語に見える。
0788デフォルトの名無しさんNGNG
>>786
Cの文法と同じ俺擬似言語ですって、
関数(printf,scanf,putchar)のとこだけ機能説明にしてそのまま出しとけ。
0789デフォルトの名無しさんNGNG
入門書1冊終わったので、1ヶ月かかるプログラムのお題をください。
0790デフォルトの名無しさんNGNG
>>789
マウスを動かすと音が変化するプログラムつくって
0791デフォルトの名無しさんNGNG
>>789
このあたりに参加してこれば?

FE風オンラインゲームツクローウヨ( ´@`_ゝ`) 第8章
http://ex.2ch.net/test/read.cgi/entrance/1053693365/
0792デフォルトの名無しさんNGNG
>>790
「マウスが動く」という判断をどうプログラミングすればいいんですか?
超初心者なので。
あと言い忘れてましたが、Cでお願いします。
0793デフォルトの名無しさんNGNG
>>792
全部どうすればいいか聞くつもりですか?

> あと言い忘れてましたが、Cでお願いします。

好きなようにすれば良いんじゃね-の。
0794デフォルトの名無しさんNGNG
>>793
ねらいどおりの反応ありがとうございます。
0795デフォルトの名無しさんNGNG
#include <windows.h>
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
MessageBox(NULL,"HelloWorld","HelloWorld",MB_OK);
return 0;
}
0796701NGNG
fgetsを使って0-10000の範囲を入力させたいのですが文字を数値に変換するには
どうしたらいいですか?

すいません、例えばasdfとかが入力されたときはエラー処理をしたいのですがそういう
場合もatoiで大丈夫なんでしょうか?
0797デフォルトの名無しさんNGNG
2進数同士の論理積求めるプログラムを教えてくださいませんか?
0798デフォルトの名無しさんNGNG
2進でも10進でも16進でも論理積って同じじゃねーの?
0799デフォルトの名無しさんNGNG
|じゃなかった?
0800デフォルトの名無しさんNGNG
>>799
和
0801デフォルトの名無しさんNGNG
search,insert,delete関数のプログラムなんですが、

#include <stdio.h>
#include <stdlib.h>

#include "list_appli_header.h"
#include "liststructure.h"

int init( void )
{
head = NULL ;
return 1 ;
}

nodeType* search(keyType a_key)
{
nodeType* p = head;
while (p != NULL)
{
if (p->data.key == a_key) break;
p = p->next;
}
return p;
}
0802デフォルトの名無しさんNGNG
前にいた構造体が分からなかった人か?
今度は何が分からんの?
0803デフォルトの名無しさんNGNG
上の続き
int insert(dataType *dp)
{
nodeType* node;
if ((node = (nodeType*)malloc(sizeof(nodeType))) == NULL) return 0;
node->data = *dp;
node->next = NULL;
if (head == NULL)
{
head = node;
}
else
{
nodeType* p = head;
while (p->next != NULL) p = p->next;
p->next = node;
}
return 1;
}
0804デフォルトの名無しさんNGNG
上の続き、

int delete(keyType a_key)
{
nodeType* node;
if (head->data.key == a_key)
{
node = head;
head = node->next;
free(node);
return 1;
}
else
{
nodeType* p = head;
while (p->next != NULL)
{
if (p->next->data.key == a_key)
{
node = p->next;
p->next = node->next;
free(node);
return 1;
}
p = p->next;
}

}
return 0;
}

0805デフォルトの名無しさんNGNG
上の続き、

void printAllData(void)
{
nodeType *p = head ;

while (p != NULL)
{
printKey(p) ;
printf(",") ;
p = p->next ;
}
printf("\n") ;
}

これでコンパイルすると

外部シンボル"_printKey"は未解決です。
外部参照1が未解決です。

とエラーが出るのですが、
どこがエラーなのか教えて下さい。
0806デフォルトの名無しさんNGNG
printKeyが定義されてない。
0807デフォルトの名無しさんNGNG
具体的にどこをどう直せばいいんですか?
0808C言語は好きなんだけど・・・NGNG
すみません、教えてください。

問題:キーボードから生まれた年(元号)を入力して、満年齢と
西暦年の計算をして、実行例を示すように出力しなさい。
なお、元号区分と西暦元年の対応は次のとおりです。
m:明治(1868) t:大正(1912) s:昭和(1926) h:平成(1989)

<実行例>  今年が平成15年(2003)の場合

元号年>>s23 ←
s23: 1948年生まれですね。
誕生日に満55歳になります。

とやりたいです。
m、t、s、h、はgetcheでやって、それでその後の数が
1868〜1911だったら明治で1910+入力された数で・・・。
うぁあああんわからないです。
教えてくださいお願いします。
0809デフォルトの名無しさんNGNG
printKeyを作る。
0810デフォルトの名無しさんNGNG
switch文使え。
0811デフォルトの名無しさんNGNG
int hoge(char a, int b) {
if (a == 'm') return 1910 + b;
...
}
0812デフォルトの名無しさんNGNG
using namespace std;

main()
{
char c;
int gyear, syear;
cin >> c >> gyear;
switch(c)
{
case: 'm': syear = gyear + 1868; break;
case 't': syear = gyear + 1912; break;
case 's': syear = gyear + 1926; break;
case 'h': syear = gyear + 1989; break;
}

cout << c << gyear << ": " << syear << "産まれですね。\n誕生日に" << 2003-syear << "歳になります。" << endl;


}
0813デフォルトの名無しさんNGNG
>>808
アレだ
連想配列
m1〜h99ぐらいまで全部登録しとく
0814C言語は好きなんだけど・・・NGNG
>>813
本気でそれ、考えてます。
講義じゃまともに教えてもらってないのに、
いきなりこんな課題がでるんですもの。
先々週までprintfでhalloって表示させてただけなのに・・・。
0815デフォルトの名無しさんNGNG
using namespace std;
main()
{
char c;
int gyear, syear;
cin >> c >> gyear;

map<char, int> gmap;
gmap['m'] = 1868;
gmap['t'] = 1912;
gmap['s'] = 1926;
gmap['h'] = 1989;

syear = gyear + gmap[c];
cout << c << gyear << ": " << syear << "産まれですね。\n誕生日に" << 2003-syear << "歳になります。" << endl;
}
0816C言語は好きなんだけど・・・NGNG
>>815さん
レス、ありがとうございます。
質問していいですか?
1行目のusing namespace()ってどういう意味なんですか?
あと、gmapてのもわかんないです・・・。
0817デフォルトの名無しさんNGNG
c版

main()
{
<<前略>>

int gmap[CHAR_MAX];
gmap['m'] = 1868;
gmap['t'] = 1912;
gmap['s'] = 1926;
gmap['h'] = 1989;

syear = gyear + gmap[c];

<<後略>>

}

0818デフォルトの名無しさんNGNG
>>816
C++なんでC言語じゃなきゃ駄目なら無視して>>817の方見て
0819C言語は好きなんだけど・・・NGNG
>>818さん
はーいみてます。
でもC言語でもgmapが出てくるんですね。
gmapってどういう意味で使ってるんだろう?
0820デフォルトの名無しさんNGNG
>>817はcharが64bitだったら終わってるな。
0821デフォルトの名無しさんNGNG
>>803
前スレだかに書き込まれていたlist_appli_header.hの中身はこうだった。

typedef int keyType ;

typedef struct {
  keyType key ;
} dataType ;

typedef struct node {
  dataType data ;
  struct node *next ;
} nodeType ;

int less(keyType, keyType) ;
int equal(keyType, keyType) ;
keyType key(dataType *p) ;
keyType key2(nodeType *p) ;

void printKey(nodeType *p);

printKey以外にもless、equal、key、key2もあるはずなのだが…
list_appli_header.hを作った人が作っているんじゃないかと思うけど。
search,insert,delete関数を作ったときも当然同様のエラーが出たんで、
printKeyを適当に作って対処した。
0822821NGNG
一応そのとき作ったprintKeyを貼っとく。

void printKey(nodeType* p)
{
  printf("%d", p->data.key);
}

次はmainかな。
0823デフォルトの名無しさんNGNG
月曜日、学校に精子を持って行かなきゃなんないんです。
でも、精子の出し方が判んないんです。
お姉ちゃんに聞くと「ちんちんを握れば出るんじゃない?」
と応えが帰ってきましたが、チンチンを握ってみても何も出てきません。
どうすれば精子を出すことができるんでしょうか。
2ccでいいんです!!!
0824デフォルトの名無しさんNGNG
板違いです
0825デフォルトの名無しさんNGNG
>>808 満年齢は、誕生日に年をとらない。
0826デフォルトの名無しさんNGNG
>>825
え?
0827C言語は好きなんだけど・・・NGNG
>>825さん
教科書に書いてあるプログラムのソースを見るとなるほどねと
思うんですけど、こういうヒントだけの問題ってどういうものを
どう使えばいいのかさっぱりわからないです・・・。
ハァ、困りました。
0828デフォルトの名無しさんNGNG
>>825
なんか法学で学んだ気がする
誕生日の前の日に歳をとるって。
そのこと言ってるの?
0829デフォルトの名無しさんNGNG
年齢計算ニ関スル法律
0830デフォルトの名無しさんNGNG
へい、お待ち!!
ベテランには「なんだこのプログラム?」と思うかも知れないけど
C言語1ヶ月だから許してね。
あとaとかbとかも。
自分の歳でやったら昭和が合わなかったんで
そこだけ数字変えちゃった。
他の年号も違かったら直しといて。

#include <stdio.h>
#include <conio.h>

int main(void)
{
char nengou;
int a,b;

printf("元号年>>");
nengou=getche();
scanf("%d",&b);

if(nengou=='m') a=1868;
else if(nengou=='t') a=1912;
else if(nengou=='s') a=1925;
else if(nengou=='h') a=1989;

printf("%c",nengou);
printf("%d: %d年生まれですね。\n",b,a+b);
printf("誕生日に満%d歳になります。\n",2003-(a+b));

return 0;
}
0831デフォルトの名無しさんNGNG
下記のコードをコンパイルして実行すると、
"セグメントエラー"と出て動作しません。
コンパイラはgcc、osはLinuxです。
なお、コンパイルは -ansi -pedantic -Wall でおこなっていますが、
ワーニング等はでていません。

void HogeTest(char* s) { *s = *s;}
int main(void){
char* Hoge="a";
HogeTest(Hoge);
return 0;
}
0832830NGNG
2004にすればよかったのかな?
他の元号のことがわからんかったからなー。
0833デフォルトの名無しさんNGNG
>>831
ここはエラー報告スレではありません。
0834デフォルトの名無しさんNGNG
>>830
それぞれが元年の西暦なら+1するのは当然では?

>>831
char Hoge[] = "a";
0835C言語は好きなんだけど・・・NGNG
>>830さん
ありがとうございます!
実行できました。
#include <conio.h>
これ、まだ習ってないんで今から教科書で調べてみます。
0836サンプルですNGNG
☆オススメ! カワイイ女の子満載のHサイト☆ 〜二日間だけ無料です〜
http://yahooo.s2.x-beat.com/linkvp/linkvp.html
0837830NGNG
>>834 いやーあんま難しいことわからんから(笑 こんなこと言うと叩かれる!?)

っていうか上にも答えてる人いるの忘れてた!!
へい、お待ち! なんて威勢良く言う場じゃなかったな。

初心者には初心者のプログラムのほうがわかりやすいと思ってさ。
自分もgmapってわからから。

あ、できたみたいでよかったね。
合ってるの昭和だけかも知れないから気をつけて(笑
0838C言語は好きなんだけど・・・NGNG
>>830さん
getcharでもできるみたいなんで書きかえてみたんですけど、
それでも動いてくれました。
今からじっくり解析してみます!
0839831NGNG
>>834
これでうまくいきました。どうも有難う。
0840デフォルトの名無しさんNGNG
>>828
明日から二十歳だと調子こいて軽い犯罪をおかしたやしが、実名公開されて慌てふためく、
なんていうニュースがありましたねぇ。
選挙も、誕生日前日から投票できます(誕生日前日=投票日ならば)。
0841デフォルトの名無しさんNGNG
>>840
そういえば4月1日生まれは、4月2日生まれよりもひとつ上の学年になるらしい。
誰か、その真偽をここで教えてくんなまし。
0842デフォルトの名無しさんNGNG
>>830
>>834じゃないけど一言。
明治元年が1868年なら、1868-1で1867足すのは自明だろ。
難しいどころか小学生でもわかることだ。
0843デフォルトの名無しさんNGNG
>>841
その通り。
尤も、不憫に思って1年ずらすことも多いそうだが。
0844デフォルトの名無しさんNGNG
sin(x)をもとめるプログラムでxに0から2πまでπ/8きざみで入れていきたい
のですが例えば3π/8を入力したいときはどうすれば(・∀・)イイ!!ですか?

3π/8は3.14÷8の値を入力するしかないですか?
0845デフォルトの名無しさんNGNG
M_PI*3/8
0846830NGNG
>>842 うぅーがんばって5分ぐらい考えたよー。
明治元年=明治1年か明治0年かわからなかったらしい。
まぁ許して。
0847C言語は好きなんだけど・・・NGNG
>>830さんのプログラムはバッチリだと思うんですけど、
なにか不都合があるんですか?
親戚縁者みんなの生年をにゅうりょくしてみましたけど
どれもちゃんと表示してくれました。
ありがとうございます。
0848844NGNG
scanf("%lf",&x);
のxに1/8って入力できますか?
0849デフォルトの名無しさんNGNG
M_PIって標準じゃないよね。
0850830NGNG
不都合あったよー。
親戚縁者はおろか、自分の歳すら忘れそうに
なる俺には平成15年生まれを調べるしか方法がなかった。

結果は「生まれた年2004、満1歳」

a=xxxx の部分を昭和以外-1してくれればオッケー。
0851デフォルトの名無しさんNGNG
>>847
>>830は昭和だけ元年の西暦が違う。
年齢=2003-(元年の西暦)-((元号年)-(元年=1))
  =2004-(元年の西暦)-(元号年)
0852デフォルトの名無しさんNGNG
>>848
1.0/8
0853830NGNG
結果は 満ー1だったわ
ってどうでもいいか(笑
0854デフォルトの名無しさんNGNG
>>849
#include <math.h>
0855デフォルトの名無しさんNGNG
>>844
式を入力したいなら、解析ロジックを作る必要あり。
1/8程度なら、.125ですむから計算させればいいんじゃないのか?
0856デフォルトの名無しさんNGNG
>>854
-ansi
0857844NGNG
解析ロジック??
7/8はどうすればいいですか・
0858デフォルトの名無しさんNGNG
0.875
0859844NGNG
あ!!1から7は全部8で割り切れますね。
0860C言語は好きなんだけど・・・NGNG
これでオッケですか?

#include <stdio.h>

int main(void)
{
char nengou;
int a,b;

printf("生まれた年を元号で入力してください。\n");
printf("明治ならm、大正ならt、昭和ならs、平成ならhです。\n");
printf("元号年>>");
nengou=getchar();
scanf("%d",&b);

if(nengou=='m') a=1867;
else if(nengou=='t') a=1911;
else if(nengou=='s') a=1925;
else if(nengou=='h') a=1988;
printf("%c",nengou);
printf("%d: %d年生まれですね。\n",b,a+b);
printf("誕生日に満%d歳になります。\n",2003-(a+b));

return 0;
}
0861デフォルトの名無しさんNGNG
>>860
元年の前の年という不自然な定数を並べるのはどうかと
0862775NGNG
下のプログラムのmain関数はどうなりますか?
void hanoiTower(int n, char a, char b, char c);
void moveDisk(int n, char a, char b);

// n枚のディスクを棒aから棒bを経由して棒cに移動する。
void hanoiTower(int n, char a, char b, char c)
{
if (n > 0) {
  hanoiTower(n-1, a, c, b);
  moveDisk(n, a, c);
  hanoiTower(n-1, b, a, c);
 }
}

// ディスクnを棒aから棒bに移動
void moveDisk(int n, char a, char b)
{
 printf("No.%dのディスクを棒%cから棒%cに移動せよ。\n", n, a, b);
}


0863C言語は好きなんだけど・・・NGNG
>>861さん
じゃこうしますね。

if(gengou=='m') a=1868-1;/* もしmだったらaは1867 */
else if(gengou=='t') a=1912-1;/* もしtだったらaは1911 */
else if(gengou=='s') a=1926-1;/* もしsだったらaは1925 */
else if(gengou=='h') a=1989-1;/* もしhだったらaは1988 */
0864830NGNG
>>861 グッド。

printf("%c",nengou);
printf("%d: %d年生まれですね。\n",b,a+b);

自分で書いといてナンだけど、合体させろよって感じだね

printf("%c%d: %d年生まれですね。\n,nengou,b,a+b);
0865デフォルトの名無しさんNGNG
>>863
ふつー
printf("%d: %d年生まれですね。\n",b,a+(b-1));
こっち直すんじゃねーの?
0866830NGNG
\n"
ちっちゃなミス多いなー自分
0867C言語は好きなんだけど・・・NGNG
>>864の830さん
いえ、最初の方がわかりやすかったです。
%cがなんなのかよくわかったし。
ありがとうございます。
ホント助かりました。
0868デフォルトの名無しさんNGNG
>>862
main() {
hanoiTower(64, 'A', 'B', 'C');
}
0869デフォルトの名無しさんNGNG
>822
レスありがとうございます。
さきほどのを付け足して、実行できたのですが、
1,3,5,9を挿入しようとすると、、1,3,9,5と挿入されてしまうんです。
どこのプログラムが違うのでしょうか?
0870822NGNG
>>869
> 1,3,5,9を挿入しようとすると、、1,3,9,5と挿入されてしまうんです。

この部分のプログラムまだ書き込みされてなかったと思うけど、
どう調べろと…
0871デフォルトの名無しさんNGNG
みなさんは初心者のときハノイの塔とかの再帰の問題
出されてサクッとプログラムが浮かびましたか?
俺は一度はソースを見ないと駄目です。
難しすぎて再起不能になりそうでつ。
0872デフォルトの名無しさんNGNG
>>869
このinsertで期待通りに動くか試してみてくれ。
int insert(dataType *dp) {
  nodeType* node;
  if ((node = (nodeType*)malloc(sizeof(nodeType))) == NULL) return 0;
  node->data = *dp;
  if (head == NULL || node->data.key < head->data.key) {
    node->next = head;
    head = node;
  } else {
    nodeType* p = head;
    while (p->next != NULL) {
      if (node->data.key < p->next->data.key) break;
      p = p->next;
    }
    node->next = p->next;
    p->next = node;
  }
  return 1;
}
0873デフォルトの名無しさんNGNG
見てわかればそれでいいんじゃない?
0874デフォルトの名無しさんNGNG
>>871
再帰呼び出しと再起不能がかかっているわけね。
0875クロスNGNG
↓のものは10までの階乗を表示するものですが
15まで表示するにはどうしたらいいですか?

#include<stdio.h>

int factorial (int) ;

int main ()
{
int i;

for (i = 1; i <= 15; i++) {
printf("%d! = %ld\n", i, factorial(i));

}

return 0 ;

}



int factorial ( int number )
{
if (number <= 1) {
return 1;
}
else{
return ( number * factorial (number - 1) ) ;

}
0876デフォルトの名無しさんNGNG
すでに15まで出力してる気がするのは俺の気のせい?
for (i = 1; i <= 15; i++)
↑
この命令でiをどこまで増やすかで階乗の計算をどこまでやるか
決めてんじゃないの?
0877デフォルトの名無しさんNGNG
>>875
int → long long int
%ld → %lld
C99に対応したコンパイラを使う
0878クロスNGNG
>>876
15までの正常な値が出ないんですよ
0879876NGNG
>>877
オーバーフローまで考慮に入ってなかった、おたくやるねぇ
0880クロスNGNG
>>875
なんかうまく出来ないみたいです。
0881876NGNG
じゃあ int じゃなくて double でも使って見れば?
俺も昔フィボナッチ数列のN番目の値求める時にオーバーフローしまくったけど
変数の型イジクリマワシまくってたらなんかいい値が出るようになったよ。


って回答になってないね、ごめん
0882クロスNGNG
>>881
成功しました。
ありがとうございました。
0883クロスNGNG
追加質問なんですけど875を
ローカル変数と再帰呼び出しパラメータをプリント
するように出来ますか?
0884デフォルトの名無しさんNGNG
>>883
こうしたいってこと?
int factorial ( int number )
{
  printf("%d\n", number); // ← こう?
  if (number <= 1) {
    return 1;
  }
  else{
    return ( number * factorial (number - 1) ) ;
  }
}
0885デフォルトの名無しさんNGNG
doubleで15の階乗が正しく計算出来るかどうかはきちんと検討すべきことだと思うな。
0886クロスNGNG
>>884
それでいいのか僕にはよくわからりません。
でもいろいろ表示できたみたいです。
ありがとうございました。
>>885
計算してみたらあってましたよ。
0887デフォルトの名無しさんNGNG
>804のプログラムなんですが、
三行目 構造体を指すポインタ変数を確保する。
四行目 headのdataメンバーのキーと、削除したキーが等しいならば、
六行目 headの先頭アドレスをnodeにコピーする。(直感的にnodeはheadを指している)

ここまでの解釈で間違ってる所ありますか?
そして七行目のnodeのnextメンバーをheadに代入という所がわからないんです。
nodeはただのポインタ変数なのにメンバーが出てくるのがわからなくて。

八行目 nodeを削除。
九行目 削除成功
十一行目 そうでないならば、
十三行目 構造体を指すポインタ変数pを確保し、そこにheadの先頭アドレスを代入。

そして十四行目の、pのnextメンバーがNULLが等しくないならば、という所なんですが、
ここもpはただのポインタ変数なのになんでメンバーが出てくるのかわかりません。

解釈で間違えてる所を教えて下さい。


十五行目 
0888デフォルトの名無しさんNGNG
double factorial(unsigned n)
{
double result = 1;
for (; n > 1; n--) {
result *= n;
if (log10(result) > DBL_MANT_DIG * log10(2)) {
result = 0;
break;
}
}
return result;
}
0889デフォルトの名無しさんNGNG
>872
一つエラーが出てしまいました。
0890888NGNG
ヘッダ追加。コンパイルする時は -lm 付けること。

#include <float.h>
#include <math.h>

double factorial(unsigned n)
{
double result = 1;
for (; n > 1; n--) {
result *= n;
if (log10(result) > DBL_MANT_DIG * log10(2)) {
result = 0;
break;
}
}
return result;
}
0891デフォルトの名無しさんNGNG
>>887
node が head を指しているというのは、node に操作すると head の中身を操作できるということ。
すなわち node->next は、head->next に等しい。
したがって、
head = node->next;
は、次のノードに head を進める。char*a; a = a + 1; という操作に近い。

p についても同じ。p = head とすることで、p で head の中身を操作できる。
0892872NGNG
>>889
どういうエラーが出たの?
コンパイラがエラーを出したのなら、それを貼り付けてくれ。

やり取りを円滑に進ませるために、情報を小出しにしないで
十分な情報を書き込んで欲しいんだけど…
0893デフォルトの名無しさんNGNG
cjzfdvqnxokfkpbpt
0894デフォルトの名無しさんNGNG
>891
説明どうもありがとうございます。
>887の続きなんですが、

十四行目 pのnextメンバーとNULLが等しくないならば、(さらに潜り)、
そして十六行目のp->next->data.keyとは何を意味してるんですか?
a_keyは削除しようとしているキーですよね。

p->next->data.keyと削除しようとしているキーが等しいならば、(さらに潜り)、

十八行目 pのnextメンバーをnodeにコピーする。
十九行目 nodeのnextメンバーをpのnextメンバーにコピーする。
二十行目 nodeを削除する。
二十一行目 削除成功。
そして二十三行目の(if文で偽ならば)pのnextメンバーをpにコピーする、なんですが、
直感的にどういう事を意味してるんですか?
二十七行目 削除失敗。

解釈で間違えている所を教えて下さい。
0895デフォルトの名無しさんNGNG
>892
もう一度コンパイルしたらエラー出ませんでした。
私の間違えだったようです。
すみませんでした。
今度はちゃんと挿入できました。
0896872NGNG
>>895
最初に作ったinsertがリストの最後に挿入するもの。
次に作ったのが、keyが昇順になるように挿入するもの。
前者はinsertではなくaddとか名前がつくのが普通で、そのことを忘れてました。

>>869 の書き込みを↓のように書いてくれれば直ぐにわかったのに…
1,3,9,5という順番でを挿入しようとする(insertを呼ぶ)と、1,3,5,9となって欲しいのですが、
1,3,9,5となってしまいます。
0897デフォルトの名無しさんNGNG
1ステップ毎にリスト構造の図書いてみ
0898デフォルトの名無しさんNGNG
1 -> 3 -> 9 -> 5 から
1 -> 3 -> 5 にする処理。
(9を削るなら)
0899デフォルトの名無しさんNGNG
>897
はい。
私もそう思って、何度も書こうとしているのですが、、
プログラムの解釈で混乱して上手くステップを踏めなくて。
図はアップローダーじゃなきゃ無理ですしね・・・。
どう解釈すればいいか教えて下さい!
0900デフォルトの名無しさんNGNG
>>886
> 計算してみたらあってましたよ。

それじゃいかんだろう。
例えば30の階乗は正しく計算できないわけで、
どういう場合に正しく計算できてどういう場合に
そうでないのかを理解していなければ、
恐くて使えないと思うんだが。
0901デフォルトの名無しさんNGNG
>>900
べつに886は「15までの階乗」と指定して質問してるんだからいいんじゃない?
それ以上のことが必要になったらまた質問するなり自分で調べるなりするでしょ。
0902578NGNG
>>699
超亀レスですが、激謝です。
おうちではコンパイルできないので学校行ってから試してみます。
C激初心者なんで、分からないとこが少々ありますが、これを使って勉強します。
ありがとうございましたっ。
0903デフォルトの名無しさんNGNG
>898
p->next->data.keyとはpのnextメンバーのdataキーということですよね?
これが削除するってことなんですか?
0904デフォルトの名無しさんNGNG
始めは何もないところにデータを挿入するわけですが、
直感的なイメージではどんなイメージをすれば良いのでしょうか?
0905デフォルトの名無しさんNGNG
>>903
delete関数は引数で渡したa_keyと等しいkeyを持つ要素をリスト中から削除するというように作った。
機能としては2つに分かれて、1つはa_keyと等しいkeyを持つ要素をリスト中から探す。
もう1つは、探し出した要素をリストから削除する。
この部分が探すところ。
  if (head->data.key == a_key) {
    /* ここに削除処理が入る */
    return 1;
  } else {
    nodeType* p = head;
    while (p->next != NULL) {
      if (p->next->data.key == a_key) {
        /* ここに削除処理が入る */
        return 1;
      }
      p = p->next;
    }
  }
  return 0;
最初のifは探している要素がリストの先頭にあるかという判定をしていて、
削除するときにheadをいじらなければならないので、特別な扱いにしている。
本来ならheadがNULLかをチェックした方がいいのだが入れ忘れた。
単方向リストの削除の場合、削除する要素の1つ前の要素のnextをいじらなければならない。
そのため、elseで定義しているpは1つ前の要素を指すようにしている。
p->next->data.key == a_key の部分は、pの次の要素のkeyがa_keyと等しいか判定する。
等しければ削除、等しくなければpを更新して、次(次の次?)の要素を調べられるようにする。
リストの終端(p->nextがNULL)まで辿り着いたら、削除できませんでしたとなる。
0906905NGNG
この2つが削除するところ
  node = head;
  head = node->next;
  free(node);

  node = p->next;
  p->next = node->next;
  free(node);
headとp->nextが違うだけで形は同じ。上の方を解説すると、
削除する要素を指すのはheadだけ。headを書き換えるので、その前にnodeも指すようにして
要素を見失わないようにする。
次にheadを書き換える。headを次の要素を指すことで短絡させ、要素をリスト中からはずしている。
ここはheadとnodeは同じものを指しているのでhead = head->next;と書いても同じ意味。
最後に削除する要素を実際に削除する。
0907デフォルトの名無しさんNGNG
>>904
構造体を箱で描く。
ポインタ変数は点にラベルを書いて表し、線を引く(矢印がよい)。
next とかは、箱の中の変数から、(自分自身を含む)箱への線が結ばれる状態。
0908デフォルトの名無しさんNGNG
英語、数学、国語の得点を入力して3科目の成績により、
判定結果を表示するプログラムを作成しなさい。
3科目とも60点以上のとき、 “あなたは優秀です。”
3科目中2科目が60点以上のとき、“あなたは合格です。”
3科目中1科目だけが60点以上のとき、"あなたは保留です。再度試験を受けて下さい。“
3科目とも60点未満のとき、"あなたは不合格です。来年がんばりましょう。"

と出るように作れという問題なのですが初心者な物で躓いてます。
教えて下さい。よろしくお願いします。if文をうまく使うようですが。
0909デフォルトの名無しさんNGNG
>>908
#include <stdio.h>

int main(void)
{
int e, m, j;
int flags = 0;

scanf("%d", &e);
scanf("%d", &m);
scanf("%d", &j);

if(e >= 60) flags |= 0x00000001;
if(m >= 60) flags |= 0x00000002;
if(j >= 60) flags |= 0x00000004;

switch(flags)
{
case 0x00000000: puts("あなたは不合格です。来年がんばりましょう。"); break;
case 0x00000007: puts("あなたは優秀です。"); break;
case 0x00000001:
case 0x00000002:
case 0x00000004: puts("あなたは保留です。再度試験を受けてください。"); break;
case 0x00000003:
case 0x00000006:
case 0x00000005: puts("あなたは合格です。"); break;
}

return(0);
}
0910デフォルトの名無しさんNGNG
>>908
#include <stdio.h>

int main(int argc, char *argv[])
{
const int BORDER = 60;
const char *text[] = {"あなたは不合格です。来年がんばりましょう。\n","あなたは保留です。再度試験を受けて下さい。\n","あなたは合格です。\n","あなたは優秀です。\n"};
int check=0;
int e,m,j;

printf("英語 数学 国語>");
scanf("%d %d %d",&e,&m,&j);
if(e >= BORDER) check++;
if(m >= BORDER) check++;
if(j >= BORDER) check++;

printf(text[check]);

return 0;
}
0911デフォルトの名無しさんNGNG
>>909

すいません。わざわざやって貰ったのに申し訳ないんですが
本当に教科書の最初の方の知識だけ使って解く問題なので
int x y z

printf("英語="); scan("%d",$x);
printf("国語="); scan("%d",$y);
printf("数学=") ;scan("%d",$z);

if....って続くように作るようなんです。
だからflagとかcaseとか使わないしわからないんです。使うのは
あとはelse ifとかelse位なんです。
0912デフォルトの名無しさんNGNG
>>910
上にも書いたんですが本当に基本のだけ使うのでBORDERとか check++
とかは使わないで出来ませんか?ホントifとelseだけで。
最終的には8パターンの実行結果が出るように作るんですけど。
�@3科目とも60点以上のとき �A英語および数学が60点以上のとき �B英語および国語が60点以上のとき
�C数学および国語が60点以上のとき �D英語のみが60点以上のとき
�E数学のみが60点以上のとき �F国語のみが60点以上のとき �G3科目とも60点未満のとき
こんな感じに。
0913デフォルトの名無しさんNGNG
>>910
const char * は static const char *const の方がいいんでないかな。
scanf("%d %d %d", はscanf("%d%d%d", でいいね。

>>908
定数くらい使わせろ。
const int BORDER = 60;
if (e >= BORDER && m >= BORDER && j >= BORDER) {
printf("優秀(以下略)\n");
} else if (e >= BORDER && m >= BORDER && j < BORDER ||
e >= BORDER && m < BORDER && j >= BORDER ||
e < BORDER && m >= BORDER && j >= BORDER) {
printf("合格\n");
} else if (e >= BORDER && m < BORDER && j < BORDER ||
e < BORDER && m >= BORDER && j < BORDER ||
e < BORDER && m < BORDER && j >= BORDER) {
printf("保留\n");
} else {
printf("不合格\n");
}
0914デフォルトの名無しさんNGNG
>>913
いや、使わせろといわれましても。。
学校の宿題なので習っていない物を使うわけには行かないんです。。すいません。
なんか8パターンあるからどうとかって言われたんですけどわからなくて。
どうかよろしくお願いします。ifとelseで。。
0915デフォルトの名無しさんNGNG
>>914
だから後は勝手に自分で書き換えろ。
>>909も>>910も>>913もきちんと8パターンについて処理している。
0916デフォルトの名無しさんNGNG
>>914
ここは宿題をやってもらうスレじゃないぞ。
宿題を勝手にやるスレだからな。
0917デフォルトの名無しさんNGNG
>>913
出力結果は4パターンでしょ?
8パターンの実行結果言われても

>>916
ワラタ
0918デフォルトの名無しさんNGNG
>>917
間違えた。 >>914へのレスです
0919デフォルトの名無しさんNGNG
うなんですけど。出来ませんかね。ホントわかんないんですよ。
枝分かれさせていく図までは書けたんですがこの先どうしていいのか。
皆さんが書いてくださったプログラムは見たことのない物が使われていてわからないんです。
0920デフォルトの名無しさんNGNG
優秀
�@英語数学国語が60点以上のとき

合格
�A英語数学が60点以上のとき
�B英語国語が60点以上のとき
�C数学国語が60点以上のとき

保留
�D英語が60点以上のとき
�E数学が60点以上のとき
�F国語が60点以上のとき

不合格
�G英語数学国語が60点未満のとき
0921デフォルトの名無しさんNGNG
なんとなく>>913さんのはelse if使ってくれて60とB〜を置き換えてるっぽいので
大分同じ感じがする気がします。でも文の間にある縦棒二本とかどうすればいいのか
さっぱり。。教えて下さい。
0922デフォルトの名無しさんNGNG
#include <stdio.h>

int main(void)
{
int e, m, j;

scanf("%d", &e);
scanf("%d", &m);
scanf("%d", &j);

if((e >= 60) && (m >= 60) && (j >= 60)) //1
puts("あなたは優秀です。");

else if((e >= 60) && (m >= 60) || //2
(e >= 60) && (j >= 60) || //3
(m >= 60) && (j >= 60)) //4
puts("あなたは合格です。");
else if((e >= 60) || (m >= 60) || (j >= 60)) //5, 6, 7
puts("あなたは保留です。再度試験を受けて下さい。");
else //8
puts("あなたは不合格です。来年がんばりましょう。");

return(0);
}
0923デフォルトの名無しさんNGNG
>>921
じゃあ縦棒二本を){}elseif(で置き換えろ
0924デフォルトの名無しさんNGNG
>>921
if (x >= 60 && y >= 60 && z >= 60)
  printf("優秀(以下略)\n");
elsx if (x >= 60 && y >= 60 && z < 60)
  printf("合格\n");
elsx if (x >= 60 && y < 60 && z >= 60)
  printf("合格\n");
elsx if (x < 60 && y >= 60 && z >= 60)
  printf("合格\n");
elsx if (x >= 60 && y < 60 && z < 60)
  printf("保留\n");
elsx if (x < 60 && y >= 60 && z < 60)
  printf("保留\n");
elsx if (x < 60 && y < 60 && z >= 60)
  printf("保留\n");
else
  printf("不合格\n");
0925デフォルトの名無しさんNGNG
>>922
ご親切に番号までふっていただいてありがとうございます。

>>924
おおっ!
なんかもう見てわからない記号は「&&」だけになりました!
一個一個を区切る場合はこのダブルアンドを使うしかないんですね?
なんか教科書にも載って無いし習ってもなかったから
どうすればいいのかわからなかったんです。
0926デフォルトの名無しさんNGNG
縦棒二本っていうのは922さんと924さんとの違いを見る限りelseif一回にまとめてその
条件に当てはまる物をかけるかどうかなんですかね?
あと913さんのは60をB〜に変えていると。
かなりの長時間皆さんありがとうございました。
きっとこれからも来ると思うんでどうかよろしくお願いいたします。
0927デフォルトの名無しさんNGNG
>なんか教科書にも載って無いし
そんな教科書捨てちまえ。
0928デフォルトの名無しさんNGNG
int i = (x<60)?0:1 + (y<60)?0:1 (z<60)?0:1;
switch (i) ...
0929デフォルトの名無しさんNGNG
>905
>906
とても細かい説明どうもありがとうございます。
そのような感じで>872のinsertの説明もして頂けないでしょうか?
お願いします!
0930デフォルトの名無しさんNGNG
最後に入れるんだろ?
0931デフォルトの名無しさんNGNG
>>925>>926
&&はand。||はor。

>>928
int i = (x<60?0:1) + (y<60?0:1) + (z<60?0:1);
0932デフォルトの名無しさんNGNG
#include<stdio.h>
#include<string.h>

#define BUFSIZE 1000

main()
{
int i=0;
char filename[100];
char buf[BUFSIZE];
FILE *fp;

puts("ファイル名を入力");
gets(filename);

fp=fopen(filename,"r");

fgets(buf,BUFSIZE,fp);

for (i=strlen(buf)-2 ; i>=0; i--)
printf("%c",buf[i]);

fclose(fp);
}

これを元に、半角英数字のみの何行もあるテキストファイルを読み込んで
各行の文字列を逆に表示するプログラムを書くという問題です。
よろしくお願いします。
0933932NGNG
訂正
fgetsのところはfscanfなどのほかの関数でもいいです。
0934デフォルトの名無しさんNGNG
何度めだ?
0935デフォルトの名無しさんNGNG
ナウシカ
0936デフォルトの名無しさんNGNG
>>932
それでいいんじゃない?
(ちょっとバグってるけど)
0937デフォルトの名無しさんNGNG
>>936
何行もあるテキストファイル
0938デフォルトの名無しさんNGNG
while (fgets(buf,BUFSIZE,fp)) {
for (i=strlen(buf)-2 ; i>=0; i--)
printf("%c",buf[i]);
putchar('\n');
}
0939デフォルトの名無しさんNGNG
>>938
1行がBUFSIZEを超えたときは?
0940デフォルトの名無しさんNGNG
二つの整数値を読み込んで、
小さい方の数以上で大きい方の数以下の偶数を
すべて加えた値を表示するプログラムを作成せよ。

おせーて下さい。
0941デフォルトの名無しさんNGNG
>>940

#include <stdio.h>
#include <stdlib.h>
int
main(int argc, char **argv)
{
  int a,b;
  if (argc<3) return 1;
  a = atoi(argv[1]);
  b = atoi(argv[2]);
  a = a < b ? b : a;
  printf("%d\n", a<2 ? 0 : a/2*(a/2+1));
  return 0;
}
0942デフォルトの名無しさんNGNG
#include <stdio.h>

int main(void)
{
int sum=0;
int min,max;
int i;
scanf("%d%d",&min,&max);
if(max < min){
i=min;min=max;max=i;
}
for(i=(min+1)/2*2;i<=max;i+=2)
sum+=i;
printf("%d\n",sum);
return 0;
}
0943デフォルトの名無しさんNGNG
for(i=min; i<=max; i++)
if (i%2==0) sum += i;
0944941NGNG
>>941>>942>>943
ありがとうございます!
本当に助かりますた
0945デフォルトの名無しさんNGNG
和が一定となるような自然数の列を列挙するプログラムを作成せよ
0946デフォルトの名無しさんNGNG
ネットのバイト見つけた。バナー収入登録したら1000円くれるってさ。
http://members.goo.ne.jp/home/madcap0  
 
0947デフォルトの名無しさんNGNG
#include <stdio.h>

int main(void) {
 int n, i;

 printf("Input a Number:");
 scanf("%d", &n);
 for (i = 1; i <= n / 2; i++) {
  printf("%d, %d\n", i, n - i);
 }
 return 0;
}
0948デフォルトの名無しさんNGNG
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef char* ET;
struct node
{ET x;struct node *next;};
insertafter(struct node *p , ET x)
{struct node *new;
new = (struct node *)malloc( sizeof(struct node) );
new->x = x;
new->next = p->next;
p->next = new;}
0949948NGNG
deletenext( struct node *p)
{struct node *tmp;
if( (tmp = p->next) != NULL )
{p->next = tmp->next;free(tmp);}
}
struct node * initlist()
{struct node *new;
new = (struct node *)malloc( sizeof(struct node) );
new->next = NULL;
return(new);}
main()
{char buf[1000];
struct node *head;
head = initlist();
while ( fgets(buf,1000,stdin) != NULL )
insertafter( head,strdup(buf) );
while ( head->next != NULL )
{printf("%s",head->next->x);
deletenext(head);}
}
このプログラムのリストの最後尾のノードを返す関数を作れという問題です。
よろしくお願いします。
0950デフォルトの名無しさんNGNG
http://pc2.2ch.net/test/read.cgi/tech/1053963794/l50

新スレできました
0951905NGNG
>>929
insert関数は引数で渡したdpをkeyが昇順になるようにリストに挿入するように作った。
機能としては、リストから挿入場所を探す、dpをリストに挿入する。
リストへの挿入は更にリストの要素(node)の作成、実際の挿入とに分かれる。
この部分が要素を作成しているところ。
if ((node = (nodeType*)malloc(sizeof(nodeType))) == NULL) return 0;
node->data = *dp;
mallocで要素分の領域を確保しているが、できなかったら挿入失敗となる。
次に*dpを代入して、挿入する要素を作っている。
nextメンバは、実際に挿入するときに書き換えるのでここではなにもしない。
この部分が挿入しているところ。
node->next = p->next;
p->next = node;
他にもp->nextをheadにした部分がある。
pの指す要素の次に挿入することなる。pの次の要素はp->nextだけが指しいるため、
まずpの次の要素を挿入する要素の次に入れる。そして、pの次に挿入する要素を入れる。

その他の部分が探しているところ。
リストに何も要素がないとき先頭に挿入。
先頭要素のkeyが挿入するkeyよりも小さいときも昇順にするため、先頭に挿入。
deleteと同じく、挿入する箇所の1つ前?の要素のnextをいじらなければならないので
そのためpは1つ前の要素を指すようにしている。
pの次の要素のkeyが挿入するkeyよりも小さいとき昇順にするため、そこに挿入する。
挿入する箇所が見つかったのでループを抜ける。
リストの終端に辿り着いた時(p->nextがNULL)は終端に挿入することになるので、同じくループを抜ける。
mallocが失敗する以外は挿入できましたとなる。
0952デフォルトの名無しさんNGNG
>>948
struct node * gettail(struct node *p) {
  while (p->next != NULL) p = p->next;
  return p;
}

何でinsertnextじゃないんだろ…
0953デフォルトの名無しさんNGNG
>>945
拘束条件は?
「自然数の列」だから個数は自由として、重複は認めるの?
0954デフォルトの名無しさんNGNG
あ新スレに移ってた。自爆!!
0955デフォルトの名無しさんNGNG
 
0956山崎渉NGNG
     ∧_∧
ピュ.ー (  ^^ ) <これからも僕を応援して下さいね(^^)。
  =〔~∪ ̄ ̄〕
  = ◎――◎                      山崎渉
0957デフォルトの名無しさんNGNG
梅
0958デフォルトの名無しさんNGNG
こっそり
0959デフォルトの名無しさんNGNG
こっそり
0960デフォルトの名無しさんNGNG
ぬるぽ
0961デフォルトの名無しさんNGNG
  ( ・∀・) | | ガッ!
 と    ) | |
   Y /ノ | |
    / ) .人
  _/し' <  >_Λ ∩
 (_フ彡 V`Д´)/
            / ←>>960
0962デフォルトの名無しさんNGNG
このスレは終了しています。次スレはこれー。

C/C++の宿題やらせてください。7代目。
http://pc2.2ch.net/test/read.cgi/tech/1053963794/
0963デフォルトの名無しさんNGNG
void *nullpo = 0;
0964デフォルトの名無しさんNGNG
>>962
もうそれも終了しかかってるわけだが...。
0965デフォルトの名無しさんNGNG
null は英語では「なる」というふうに読むにも関わらず、
なぜドイツ語風に「ぬる」と読むのか。
0966デフォルトの名無しさんNGNG
>>965
実際の発音聞いてみればいいんじゃない。

http://dictionary.goo.ne.jp/search.php?MT=null&kind=&mode=0&ej.x=37&ej.y=10
0967デフォルトの名無しさんNGNG
一番下まで落ちてたぞこのスレ。
のこり34取ってやってくれ
0968デフォルトの名無しさんNGNG
晒しage
0969水先案内人NGNG
http://life.fam.cx/a001/






0970デフォルトの名無しさんNGNG
次スレ http://pc2.2ch.net/test/read.cgi/tech/1055056940/l50
0971970NGNG
しまった。6代目の方だった。逝って来ます。
0972デフォルトの名無しさんNGNG
>>970
ともあれ、おつかれさま
0973デフォルトの名無しさんNGNG
しかしなんでscanfを最初の方で教えるのかねえ。
最初は fgets と fputs で次は fgets と sscanf と fprintf の方がいいと思うんだが。
0974デフォルトの名無しさんNGNG
std::cinを教えればscanfの問題は解決
0975デフォルトの名無しさんNGNG
>>974
うわー、絶対いっしょに仕事したくないタイプ。
0976デフォルトの名無しさんNGNG
7代目の方が先に終るとわ
0977デフォルトの名無しさんNGNG
>>977
うわー、絶対いっしょに仕事したくないタイプ。
0978デフォルトの名無しさんNGNG
>>977
うわー、絶対いっしょに仕事したくないタイプ。
0979デフォルトの名無しさんNGNG
>>978
自己完結してるんだからちょっかいだすなよ…
0980デフォルトの名無しさんNGNG
>>979
うわー、絶対いっしょに仕事したくないタイプ。
0981デフォルトの名無しさんNGNG
何いってる? お前ら仕事無いだろ
0982デフォルトの名無しさんNGNG
>>981
うわー、絶対いっしょに仕事したくないタイプ。
0983デフォルトの名無しさんNGNG
>>1001
うわー、絶対いっしょに仕事したくないタイプ。
0984デフォルトの名無しさんNGNG
おれはお前らと一緒に仕事がしたいよーーーーーーーーーー!!!

ウワーーーーーーン!!
レス数が950を超えています。1000を超えると書き込みができなくなります。