おまいら!今日からC言語を学んでいくぞー!

このエントリーをはてなブックマークに追加
1ポポ素 ◆Qgm8RFT0/.
あたいのスペックは
26歳フリーター、パソコン歴インターネット歴は6年
しかしそれ以外の事は何もできにゃーい…
というわけで今日から参考書を買ってがんばります!
今まさに私みたいに、これからCを勉強するぞって人いたら
よろしくね
2デフォルトの名無しさん:2005/09/24(土) 03:55:01
ガンガレ
3デフォルトの名無しさん:2005/09/24(土) 03:59:06
何か定期的にこういうスレ建つよな
4デフォルトの名無しさん:2005/09/24(土) 04:37:44
立ったスレ全部相手にしてたらゲ製作でノイローゼになった奴みたいになるぞ
5ポポ素 ◆Qgm8RFT0/. :2005/09/24(土) 04:52:17
そんなこといわずに
よろしくお願いします☆
6デフォルトの名無しさん:2005/09/24(土) 04:54:04
悪くない
7 ◆2GoFr2QJSw :2005/09/24(土) 08:58:01
よし、オレも初心者なんで参加する!
8デフォルトの名無しさん:2005/09/24(土) 09:02:53
とりあえず、やめるときはやめる宣言しろ。
9デフォルトの名無しさん:2005/09/24(土) 09:21:22
俺も初心者だけど参加
目票は処理系つくること
10 ◆KXFDiRX4jE :2005/09/24(土) 09:31:38
俺も参加するよ
11デフォルトの名無しさん:2005/09/24(土) 09:44:08
なかなか面白そうだな〜参加希望
12デフォルトの名無しさん:2005/09/24(土) 09:48:16
じゃ俺、非常勤講師やるよ
13デフォルトの名無しさん:2005/09/24(土) 09:52:12
じゃあ俺も参加するよ
コンパイラはどれがいいの?
14デフォルトの名無しさん:2005/09/24(土) 11:28:31
学生なら
http://www.microsoft.com/japan/msdn/student/premium/

無料がいいなら
http://www.borland.co.jp/cppbuilder/freecompiler/ と http://www.hi-ho.ne.jp/jun_miura/bccdev.htm のセット

その他の方は
Visual C++か、Visual studio.NETでいいんじゃない
15デフォルトの名無しさん:2005/09/24(土) 11:58:13
■■■■■■■■■■■■■■■■
■                      ■  違う板にコピペすると、四角の枠の中に
■       _,,..,,,,_             ■  メッセージとURLが現れる不思議な絵。
■      / ,' 3  `ヽーっ          ■
■.     l   ⊃ ⌒_つ           ■
■      `'ー---‐'''''"             ■
■                      ■
■                      ■
16デフォルトの名無しさん:2005/09/24(土) 12:02:47
で?
17デフォルトの名無しさん:2005/09/24(土) 12:06:24
んで、C言語で何のアプリをつくるのさ?
18デフォルトの名無しさん:2005/09/24(土) 12:15:39
>>1
Cなんかじゃなくjavaにしよーぜ!!
19デフォルトの名無しさん:2005/09/24(土) 12:17:02
ほんとにやる気があるなら質問位には答えてやろう。
っつっても職業プログラマじゃなくてアマチュアだがなw
20デフォルトの名無しさん:2005/09/24(土) 13:00:47
もう「単独スレ勃てんな脳足りん。帰れ。」とか言うのも疲れた。
21デフォルトの名無しさん:2005/09/24(土) 13:07:04
>>19
質問です!
なんでそんなに偉そうなんですか?
22デフォルトの名無しさん:2005/09/24(土) 13:09:01
えらそうってか、気軽に質問オッケーよ!みたいなノリに見えるが。
2319:2005/09/24(土) 13:09:59
>>21
そんなの決まってるじゃないか。気分だw
特に意味はない。
24デフォルトの名無しさん:2005/09/24(土) 13:11:39
>>23
ありがとうございました!
25デフォルトの名無しさん:2005/09/24(土) 13:44:13
「わたしが教官のグレン団長である  
 話しかけられたとき以外は口を開くな
 口でクソたれる前と後に“サー”と言え
 分かったか、ウジ虫ども!」

「サー!イエッサー!」

この方式で教えよう。
26デフォルトの名無しさん:2005/09/24(土) 13:51:11
サーアイアイサー
27デフォルトの名無しさん:2005/09/24(土) 14:07:57 BE:73258324-
俺も参加するよ。とりあえず>>14の無料のやつをダウソ中
28 ◆/VtxCG/TnI :2005/09/24(土) 14:10:11
俺漏れも
29デフォルトの名無しさん:2005/09/24(土) 14:14:13
麻呂も麻呂も
30デフォルトの名無しさん:2005/09/24(土) 14:31:15 BE:512803687-
ふー、なんとかインストールできた・・・
31デフォルトの名無しさん:2005/09/24(土) 14:52:16 BE:219773838-
つーかみんなどの解説サイト見てんの?
俺はttp://www.sgnet.co.jp/c/ ここを参考にしてるけど
32デフォルトの名無しさん:2005/09/24(土) 14:57:35
C覚えるなら猫でしょ。書き方がおっさんくさいけど内容は優秀。
ttp://www.kumei.ne.jp/c_lang/
3319 ◆i386l.xq6k :2005/09/24(土) 15:07:21
>>31
定番だけど猫は見とくべき。

猫で基礎を固めて、基礎以上のことは何か
作りたいものを作りながら学ぶといいかも。
例えばゲーム作るなら Win32 API、DirectX、WinMM とかを
"実際に利用することで" 学ぶ。この辺は「使い方」を知ってれば十分だから。

それと平行して STL とか boost も使っていけば
ほぼ作れないものはなくなる。
こっちはあると綺麗なコード、バグの少ないコードが書けるようになる。
34デフォルトの名無しさん:2005/09/24(土) 15:24:38
なにげに良スレになってきた予感
35デフォルトの名無しさん:2005/09/24(土) 15:26:18
漏れも参加しまっす
36デフォルトの名無しさん:2005/09/24(土) 15:30:53
まず人の書いたプログラムを読めるようになれ
書き方も大事だが、そっちが先だ
37デフォルトの名無しさん:2005/09/24(土) 15:45:05 BE:82415333-
>>32 >>33
おお、ありがとうございます。早速お気に入りに追加しますた。

しかし読めば読むほど自分の無知が露見してくるorz
C言語の前にPCの基本用語から勉強しなきゃなぁ('A`)
38デフォルトの名無しさん:2005/09/24(土) 16:18:51
>人の書いたプログラムを読めるようになれ
めんどくさいよなあこれ
39デフォルトの名無しさん:2005/09/24(土) 16:20:07
コメント無しで
void *org;
org = *(void **)(*(DWORD *)target + offset);
*(void **)(*(DWORD *)target + offset) = proc;
return org;
こんなの書かれてたら泣く。
40デフォルトの名無しさん:2005/09/24(土) 16:23:59
ttp://www.nmn.jp/~hidai/c/
本稿の目標としては、大学の簡単な課題がこなせる程度になることとしましょう。
(言語は道具であり、目的ではありません。C言語のすべての機能を網羅するよりC言語を学習するものにとって何が必要かを考えて編集しました。)


量が適切でいいかも
41デフォルトの名無しさん:2005/09/24(土) 17:05:55
42デフォルトの名無しさん:2005/09/24(土) 17:06:14
わかったから初心者どもはまず”HelloWorld!”を画面に出すプログラムを作りやがれ
43デフォルトの名無しさん:2005/09/24(土) 17:11:44
>>41
DXLIBは本来のDirectXプログラミングが出来なくなるくらい
言語仕様が簡単になるらしいけどそのへんどうなんすか
44デフォルトの名無しさん:2005/09/24(土) 17:13:37
画面に出すプログラム

もっとプログラムが必要な"1から50までの和を計算して表示"とかの方がいいぞ
4519 ◆i386l.xq6k :2005/09/24(土) 17:14:12
>>42
Hello World は、プログラムを書くことよりも、
ソースを書く→コンパイルする→実行する
っていう流れを学ぶ目的が大きいんじゃないかと思う。
つまりは開発環境の使い方だな。
プログラムの書き方を学ぶなら○×ゲームでも作ったほうがよっぽど良い。
46デフォルトの名無しさん:2005/09/24(土) 17:20:19
>>45
そんな事は分かりきっているから説明するな

>>42が出来たらファイルから数字を読み込み大きい数から順に並べて画面に表示するプログラムを書け
条件
1.ファイルには数字が文字形式(テキストエディタで読める形式)で保存されている
2.1行に1つ数字が入っている
3.数字の範囲は(0〜65535)
4.数字は最大100個
5.ライブラリ関数qsortは使用しないこと
47デフォルトの名無しさん:2005/09/24(土) 17:21:31
>>46はとても偉そうで従う気がしないな。
48デフォルトの名無しさん:2005/09/24(土) 17:31:52
Hello, WorldからいきなりIOと配列とソートアルゴリズム覚えさせるのってどうよ
49デフォルトの名無しさん:2005/09/24(土) 17:32:43
>>43
本来のDirectXプログラミングをしたことが無いのでわかりません。
50デフォルトの名無しさん:2005/09/24(土) 17:35:29
>>48
IOと繰り返し、分岐の組み合わせで出来ている上にアルゴリズム自体高校生でも考え付くレベルなのでちょうど良い
ifでの分岐はこれ、whileでの分岐はこれなんて感じで覚える必要もないだろ
51デフォルトの名無しさん:2005/09/24(土) 17:38:16
じゃあ俺は寝る役ね!
52デフォルトの名無しさん:2005/09/24(土) 17:40:01
>>51
もう終ったのか?じゃあ、次だ

100×100(単位は気にするな)の壁に囲まれた領域がある、そこの(50,0)から(50,50)に壁がある
(0,0)から適当な角度で物体を打ち出した時に物体が通る軌跡を求めろ

条件
1.物理法則に従ってもいいし、従わなくても良い
2.物体が壁にぶつかったときは反射する(これも厳密でなくて良い)
3.暇があったら図示しろ
53デフォルトの名無しさん:2005/09/24(土) 17:42:31
誰かこの一人で爆走してるバカを止めてくれ
54デフォルトの名無しさん:2005/09/24(土) 17:43:12
>>52
55デフォルトの名無しさん:2005/09/24(土) 17:44:04
別に止めんでもいいだろ
誰もついていかないから
56デフォルトの名無しさん:2005/09/24(土) 17:44:53
初心者向きでプログラム作る時のネタってどんなのがいいかな?

やっぱゲームかな?
簡単なところから行くと数当てとか...
57デフォルトの名無しさん:2005/09/24(土) 17:48:32
>>54
じゃあ、応用だ

とりあえず、3Dになっていて壁に囲まれた通路をイメージしてくれ
その壁の中をやっぱりなんか物体を飛ばした時の軌跡を求めろ


58デフォルトの名無しさん:2005/09/24(土) 17:51:19
求め方がわからん
59デフォルトの名無しさん:2005/09/24(土) 18:09:41
>>58
>>52に戻ろう
まず、物体の座標を(x、y)であらわす所は理解できてるか?

(0,0)から物体を速度v、角度θで打ち出すと時間をtとして描く軌跡はx=(v×cosθ)×t、y=(v×sinθ)×tになる
※めんどくさいので以後はv×cosθをvx、v×sinθをvyとする
時間tと時間(t+1)の間に(x,y)の描く位置に壁があったらぶつかったと判断できる

ここまで解ったか?
60デフォルトの名無しさん:2005/09/24(土) 18:24:34
ここID無いんだな。NG登録効かんのか
61デフォルトの名無しさん:2005/09/24(土) 18:26:47
そうか、もうやめるよ
62デフォルトの名無しさん:2005/09/24(土) 18:34:35
プログラミングを独習するには10年かかる
http://www.yamdas.org/column/technique/21-daysj.html

> 研究者 (Hayes, Bloom) によると、チェス、作曲、絵描、ピアノ演奏、水泳、テニス、そして神経心理学や
> 位相幾何学の研究を含む、広範な分野のいずれについても、専門技術を身につけるにはおよそ十年か
> かるそうだ。近道など実在しないようなのだ。4歳にして音楽の神童だったモーツァルトでさえ、世界的な
> 楽曲を作り出すまでに13年以上の時間を要したのだ。サミュエル・ジョンソン[訳注2]は、「どんな分野に
> おいても、生涯にわたる努力なくして優れたものには達し得ない。それよりも安い代償で手に入れること
> はできないのだ」と、それには十年以上かかると考えた。
6319 ◆i386l.xq6k :2005/09/24(土) 18:40:15
>>62
そんなにかからないと思うぞ。
私の場合 C++ やり始めて3年でほぼやりたいことは
一通り出来るくらいにはなれたから。

ただ、何度挫折しても挫けないほどの根気と、
何かが作りたいっていう意思がないとキツイかもな。
64デフォルトの名無しさん:2005/09/24(土) 18:56:14
C++自体を一通りできるようになるには数年もあれば十分だと思うけど、
使いこなすには経験をためる必要があって、それにはやっぱり10年くらいかかると思う。

とプログラミング始めて2年の俺が言ってみる。
65デフォルトの名無しさん:2005/09/24(土) 19:00:59
>>63
そこまでどうやって辿り着いたのか、軽く書いてもらえると、
後進としては助かる。
66デフォルトの名無しさん:2005/09/24(土) 19:02:23
課題まとめ
>>42 HelloWorld!を出しやがれ
>>44 1から50までの和
>>46 ファイルから読み込み大きい数から並べて
>>52 物体が通る軌跡を求めろ
67デフォルトの名無しさん:2005/09/24(土) 19:02:27
>>65
書いてあるじゃん
68デフォルトの名無しさん:2005/09/24(土) 19:08:02
>>42
#include <iostream>

int main()
{
    using namespace std;
    cout << "hello, world" <<endl;
    return EXIT_SUCCESS;
}
69デフォルトの名無しさん:2005/09/24(土) 19:17:59
>>44
#include <iostream>

int sum(int num)
{
    if (num==0)
        return 0;
    return num+sum(num-1);
}

int main()
{
    using namespace std;
    cout << sum(50) <<endl;
    return EXIT_SUCCESS;
}
70デフォルトの名無しさん:2005/09/24(土) 19:19:06
まずアセンブラやらないと分からないんだけどな
71デフォルトの名無しさん:2005/09/24(土) 19:20:35
>>44
#include <iostream>

int main()
{
using namespace std;
int i,no = 0;
for(i=1;i<51;i++) no+=i;
cout << "1から50までの和 = " << no <<endl;
return EXIT_SUCCESS;
}
72デフォルトの名無しさん:2005/09/24(土) 19:33:03
今日はシェルソート見た。感動した。
73デフォルトの名無しさん:2005/09/24(土) 19:40:06
>>71
forの中、i <= 50にしようよ。
7419 ◆i386l.xq6k :2005/09/24(土) 19:55:42
>>65
まぁ、>>33 に書いたのとほぼ同じ感じ。
ふと何か作ろうと思い立って、必要なライブラリを使いこなすため
いろいろ調べて、試行錯誤しながら製作。そして途中で挫折。
そんなことを何度も繰り返してた。

MMORPGを作ろう!とかWinnyもどきを作ろう!とか今思えば無茶だったけど…
まぁ、なんかやるたびに新しいことが身についたと思う。

>>70
アセンブラは決して "必須" じゃないからだいじょぶ。
アセンブラが使えると、デバッグや高速化が楽になるだけで。
まぁ、MMX とか SSE とか使うにはアセンブラ必須だけどね。
75デフォルトの名無しさん:2005/09/24(土) 19:56:46
ここはあえてコードを難しくするのが暗黙の了解なのか?
76デフォルトの名無しさん:2005/09/24(土) 19:58:36
>>74
アセンブラは考え方として重要じゃないか?
ポインタにはまったらアセンブラの勉強するとすぐ理解できる
7765(後進):2005/09/24(土) 20:08:40
>>67
>>19=>>74
ありがとう。間が抜けていました。
7865(後進):2005/09/24(土) 20:12:10
ぶっちゃけた話、P2Pが普及している現在、ある程度IDEは持ってます。
これからはそれらを破棄します。

文法を覚えたら、自分の金で買います。当然ですね。
頑張ろう。
79デフォルトの名無しさん:2005/09/24(土) 20:12:43
>>75
どの辺が難しい?
8019 ◆i386l.xq6k :2005/09/24(土) 20:21:38
>>76
確かにそのとおり。だけど、
だからといって必須ってわけではない、ってことを言いたかった。
81デフォルトの名無しさん:2005/09/24(土) 20:49:00
>>78
割れ使った時点で落第、通報しますた。
8279:2005/09/24(土) 21:00:30
>>75>>69>>71の違いをいってるのか?
総和の定義を知ってると>>69のコードになっても不思議はないよ
83デフォルトの名無しさん:2005/09/24(土) 21:04:42
>>73
漏れは、for文の判定は'<'だけと決めている。
が、他の人はどうでもいい。
8465(後進):2005/09/24(土) 21:13:01
>>81
使ってないよ、集めただけ。
懺悔したんだから赦してよ。
85デフォルトの名無しさん:2005/09/24(土) 21:15:47
ウーン、コ
86デフォルトの名無しさん:2005/09/24(土) 21:19:38
C は難しい。
もう挫折しそうだ....
87デフォルトの名無しさん:2005/09/24(土) 21:23:33
>>86
分からない所は、分かっているか?
88デフォルトの名無しさん:2005/09/24(土) 21:38:10
おまいらプログラムにツッコミ入れるのはいいんだが理由ぐらい書こうぜ
理由もわからず書き方変えたって何にもならないぞ
素人ギャラリーもたくさん見てるんだから意識しろ
89デフォルトの名無しさん:2005/09/24(土) 22:14:03
>>46
#include <iostream>
#include <fstream>
#include <cstdlib>

using namespace std;
const char *filename="number.txt";
int iNumber[100], NumMax=0;

void CreateNumberFile()
{
    int articles=rand()%100+1;
    ofstream fout(filename);
    for (int i=0 ; i<articles ; i++)
        fout << rand()%65535 << endl;
    fout.close();
}

void ReadNumberFile()
{
    char tmp[80];
    int i=0;
    ifstream fin(filename);
    while (!fin.eof())
    {
        fin >> tmp;
        sscanf(tmp, "%d", &iNumber[NumMax++]);
    }
    NumMax--;
    fin.close();
}
90デフォルトの名無しさん:2005/09/24(土) 22:15:42
>>89の続き
void swap(int *tmp1, int *tmp2)
{
    int tmp=*tmp1;
    *tmp1=*tmp2;
    *tmp2=tmp;
}
void Sort()
{
    for (int i=0 ; i<(NumMax-1) ; i++)
    {
        for (int j=i+1 ; j<NumMax ; j++)
        {
            if (iNumber[i] < iNumber[j])
                swap(&iNumber[i], &iNumber[j]);
        }
    }
}
void DisplayNumbers()
{
    for (int i=0 ; i<NumMax ; i++)
        cout << iNumber[i] << endl;
}
int main()
{
    CreateNumberFile();
    ReadNumberFile();
    Sort();
    DisplayNumbers();
    return EXIT_SUCCESS;
}
91デフォルトの名無しさん:2005/09/24(土) 22:21:41
VIPのGWにC言語を覚えるスレの残党ですが同じ奴いる?
92デフォルトの名無しさん:2005/09/24(土) 22:25:54
>>91
上から見てたけど
時間の無駄だと思ったから見るのやめたぜ
93デフォルトの名無しさん:2005/09/24(土) 22:33:37
問題以外みてなかったから状況把握してなかったorz
新たな先生降臨待ち
94デフォルトの名無しさん:2005/09/24(土) 23:28:25
突然スマンが、Amazonのカスタマーレビューにホームページ関連
って書いてあったんだけど、ホームページ作れるって事?
95デフォルトの名無しさん:2005/09/24(土) 23:45:58
先生はなぁ
他スレ周りに忙しいんだぞぉ
生徒のほうから来てくれないと
教えきれないんだぞぉ
96デフォルトの名無しさん:2005/09/24(土) 23:54:36
やっぱり、なんか強烈に作りたいものがあるほうが上達も早いんかなぁ。
今のところ、単に知りたいだけだもんなぁ。。。
プログラミングってオサレでカコイイって程度の。
97デフォルトの名無しさん:2005/09/25(日) 00:00:37
コンパイラやインタプリタを作りたい
教えろ
98デフォルトの名無しさん:2005/09/25(日) 00:03:18
>>97
まず、ドラゴンブックかなんかその辺の本を1冊仕入れて来い
99デフォルトの名無しさん:2005/09/25(日) 00:03:54
>>97
何を教えて欲しいんだ
100デフォルトの名無しさん:2005/09/25(日) 00:05:05
またプログラムやろうよ
http://ex11.2ch.net/test/read.cgi/news4vip/1127536695/
101デフォルトの名無しさん:2005/09/25(日) 00:16:29
徐々に簡単な問題から出していっていつの間にかコンパイラ作れるようになってるって感じで頼む
102デフォルトの名無しさん:2005/09/25(日) 00:21:15
>>101
なにその楽して世界最強
103デフォルトの名無しさん:2005/09/25(日) 00:22:23
ちょっとワロタ
104デフォルトの名無しさん:2005/09/25(日) 00:28:19
入力と処理と出力だ
105デフォルトの名無しさん:2005/09/25(日) 00:34:10
スレタイがC言語と書いてあるのに
C++のコードばかり出てくる所はスルーなの?
++房勘弁してほしい、いやまじで。
106デフォルトの名無しさん:2005/09/25(日) 00:35:32
>>101
コンパイラでいいな
まずは字句解析と行こうか
これはLexとかでも良いんだけど自分で作ったほうが勉強になる

ソースリストの中の英字の単語、数字、記号を識別し<種別、名称(数値)>の形で出力していくプログラムを作る
種別は以下の通り
・予約語(種別1):if else while const var procedure
・名前(種別2):予約語以外の英字で始まる英数字
・定数(種別3):数字
・演算子(種別4): = + - * /
・区切り符号(種別5):{ } ( ) ;
107デフォルトの名無しさん:2005/09/25(日) 00:39:45

       /"lヽ
      ( ,人)
       (・д・) チンコー
     \ノ  ノ/
    〜(__人_) 〜
     ノ  (
10819 ◆i386l.xq6k :2005/09/25(日) 00:43:06
>>96
なにか作りたいものが決まってれば、
「それに必要なこと」が決まるから、
漠然としてるよりは実践的に学べると思う。

プログラミングの技術って、どこで差がつくかっていうと
「〜がしたい」→「こうすればいい」 の連想をどれだけ知ってるか。
こういう連想をたくさん知ってれば知ってるほどいわゆる上級なプログラマ。
基礎的なことやコーディング規約なんてのは誰も大差ない。
109ポポ素 ◆Qgm8RFT0/. :2005/09/25(日) 02:05:13
あたいが知らない間にここ盛り上がってるし!w
参考書かってきたよー
C言語の絵本っての、
いろいろ探してみて最初だし絵がかいてるしこれがいいかなっておもって
他にも何かいい本あったら教えてね♪
早速読んでみたんだけどもういきなり挫折しそうな内容
でもあたいがんばるけんね!
みんなもがんばろう!
110デフォルトの名無しさん:2005/09/25(日) 02:47:25
はじめてでつまづきそうな時に、
役に立ちそうな本なら「ポインタの極意」がオススメ。
ポインタ以外のところも分かりやすい。
少し慣れてきたら「新・ANSI C言語辞典」を見るといい。
ヘタな解説書であいまいな知識を得るより、
正確な知識を早めに蓄えておくことが肝心。

みんな、がんばろうぜ! おれもがんばるぜ!
111 ◆ReQBwuiv5U :2005/09/25(日) 04:54:59
CのCGIの書き方教えて欲しいです。

HelloWorld!の表示の仕方はどうやるんですか?
112ポポ素 ◆Qgm8RFT0/. :2005/09/25(日) 08:30:50
>>109さんありがとう!
参考にさせてもらうね♪
前レスでC++とか私の知らないのがたくさんあるね
ほんと今わたしは扉のノブを触ったくらいのところだね…

>>111さんCGIって何?
ごめん、初歩的な質問で…
一応調べたんだけど
コンピュータによって作成される画像 ((CGおよび実写とCGの合成映像のこと));
とかでてきたけど意味がわからないし…
113デフォルトの名無しさん:2005/09/25(日) 09:51:19
>>111
puts("HelloWorld!");
単に標準出力へ書き出せばいいだけ。printfももちろん使える。

>>112
http://e-words.jp/w/cgi.html
http://www.google.co.jp/search?num=50&hl=ja&inlang=ja&newwindow=1&q=cgi%E3%81%A8%E3%81%AF&lr=lang_ja
11419 ◆i386l.xq6k :2005/09/25(日) 10:16:40
>>113
Perl の時と同じく、Content-type ヘッダが必要。
特に Perl と変わる点はないから普通に書けばいい。
環境変数とかバッファサイズとかセキュリティに関わる部分は十分注意。

ex.
#include <stdio.h>

int main( int argc, char** argv )
{
 printf("Content-type: text/html\n\n");
 printf("Hello World.\n");
 return 0;
}
115デフォルトの名無しさん:2005/09/25(日) 10:35:24
ヘッダを省略するとtext/plainとして扱われるんだっけ
文字列を出力するだけならなくてもいいんじゃねーかな
116デフォルトの名無しさん:2005/09/25(日) 10:45:29
Content-Typeなしだと500エラーでした。
117デフォルトの名無しさん:2005/09/25(日) 10:45:51
■■■■■■■■■■■■■■■■
■                      ■  違う板にコピペすると、四角の枠の中に
■       _,,..,,,,_             ■  メッセージとURLが現れる不思議な絵。
■      / ,' 3  `ヽーっ          ■
■.     l   ⊃ ⌒_つ           ■
■      `'ー---‐'''''"             ■
■                      ■
■                      ■
118デフォルトの名無しさん:2005/09/25(日) 10:53:35
>>115
text/plainとして扱うのはブラウザの仕様であって
HTTP的にはcontent-typeは省略すべきではない(SHOULD)みたい
省略されたら"application/octet-stream"だね
11919 ◆i386l.xq6k :2005/09/25(日) 11:05:28
>>118
Content-type は省略できないこともないけど、
\n\n は省略不可。

HTTP のレスポンスは、レスポンスヘッダ+空行+Body の形をとるけど、
\n\n がないと、レスポンスヘッダだけになり、
HTTP として不正なデータになる。

…Apache の場合はね。もしかするとこの辺適宜解決してくれる
Web サーバもあるかもしれない。
120デフォルトの名無しさん:2005/09/25(日) 11:52:14
C言語の勉強にCGIを使うというのもいいな。特にPerlやPHPから始めた人には。
121デフォルトの名無しさん:2005/09/25(日) 13:56:23
>>120
PerlやPHPから始めた人はね
初心者じゃApacheとかでCGIの実行環境作るのが大変だろ
122デフォルトの名無しさん:2005/09/25(日) 14:05:12
WinならAnHTTPD使えないの?
123デフォルトの名無しさん:2005/09/25(日) 14:17:05
>>122
そういう事じゃないって
ApcaheとAnHTTPDの設定じゃ俺はApacheのが楽な位だよ
124デフォルトの名無しさん:2005/09/25(日) 16:24:53
初心者向きでプログラム作る時のネタってどんなのがいいかな?

やっぱゲームかな?


トランプゲームが理解しやすい
一番簡単(と思われるのが)神経衰弱
あとブラックジャックとか

ポーカーは役判定とかが結構難しい
125デフォルトの名無しさん:2005/09/25(日) 16:33:48
ぷよぷよ
126デフォルトの名無しさん:2005/09/25(日) 16:34:40
ブロック崩しとかインベーダ
127デフォルトの名無しさん:2005/09/25(日) 17:33:45
○×ゲームが作りたいな
128デフォルトの名無しさん:2005/09/25(日) 17:54:59
俺が始めて作ったゲームはジャンケンゲームだったな…
129デフォルトの名無しさん:2005/09/25(日) 18:23:43
>128
それだ!
1.人間:石/鋏/紙の指定入力
2.CPU:乱数を使って石/鋏/紙の指定
3.勝敗判定

まさに初心者向け
130デフォルトの名無しさん:2005/09/25(日) 18:46:30
>>129
おおっ!それいいなあ!!ちょっとがんばるよ。
131デフォルトの名無しさん:2005/09/25(日) 18:57:09
int n;
char *te[] = { "ぐー","ちょき","ぱー"};
printf("ぐー...0 ちょき...1 ぱー...2\n");
scanf("%d",&n);
printf("あなた : %s\n",te[n]);
printf("CPU: %s\n",te[n == 0 ? 2 : n-1]);
printf("あなたのまけです。");
132デフォルトの名無しさん:2005/09/25(日) 19:12:28
>>131
絶対勝てない
相手の手は乱数で決めないとね
133デフォルトの名無しさん:2005/09/25(日) 19:15:39
統計データ取ると人間は絶対勝てなくなるよ
134デフォルトの名無しさん:2005/09/25(日) 19:27:52
http://www7.plala.or.jp/keny01/c/c_3.html
ここにのってたから作ったw
135デフォルトの名無しさん:2005/09/25(日) 19:30:21
以下怒涛のscanf叩きが始まります↓
136デフォルトの名無しさん:2005/09/25(日) 19:32:31
ってかscanf以外に知らないよ
137デフォルトの名無しさん:2005/09/25(日) 19:33:05
scanfは入力文字をストリームとして解釈するからなあ(ry
138デフォルトの名無しさん:2005/09/25(日) 19:36:08
char buf[256];
int num;

fgets(buf,sizeof(buf),stdin);
sscanf(buf,"%d",&num);

こっちのがいいんじゃね
139デフォルトの名無しさん:2005/09/25(日) 19:40:01
なるほど。やってみる。
bufって何かの略?
140デフォルトの名無しさん:2005/09/25(日) 19:43:43
buffer
141デフォルトの名無しさん:2005/09/25(日) 19:46:26
>>139
オレのネーミングセンスに聞いてくれ。
142デフォルトの名無しさん:2005/09/25(日) 19:53:37
わかった、bufferか。
ネーミングセンスはいいと思う。少なくとも俺より。
143デフォルトの名無しさん:2005/09/25(日) 20:24:37
132が釣りなのかだいぶ悩む
144デフォルトの名無しさん:2005/09/26(月) 03:04:04
乱数:取り出したい値 = rand() % n;
 これで 0 〜 n-1 の値が取り出せる (※)

ちなみに srand(time(NULL)); しないといつも同じ乱数列になってしまうので
rand()を使う前にどこかでやっとく事。

※:C-FAQとかググルともちっと違うやり方で取り出した方が良いよ、となっている
145デフォルトの名無しさん:2005/09/26(月) 04:51:57
>>106
先生!出来ました!!次、お願いします!
http://gamdev.org/up/img/3422.phps
146デフォルトの名無しさん:2005/09/26(月) 06:07:54
>>145
106じゃないけど一カ所ツッコミを。
その実装だと
"abc123" は名前と認識される。これは正しいけど、
"123abc" が定数と認識されちゃうね。これは間違い。
この場合は定数でも名前でもないと判断する。
147デフォルトの名無しさん:2005/09/26(月) 07:55:26
>>146
ご指摘ありがとうございます!
早速修正しました
http://gamdev.org/up/img/3423.phps

先頭の文字だけチェックしていたのをやめて、全体をチェックするようにしました。
bool isnumber(char *buf)は数字でない文字があればfalseを返します。
148デフォルトの名無しさん:2005/09/26(月) 11:34:06
>>145,>>147
悪くはないのだが、後の事を考えると出力は直接printfするのでなく一旦データ構造に保持して、
それを最後にまとめて出力する様に改良してみてくれ
以後の出題もコード生成(出力)以外の時以外は出来る限り内部にデータ構造を作ってからにしよう
149デフォルトの名無しさん:2005/09/26(月) 13:42:40
#include<stdio.h>
int main(void)
{
printf("HELLO\n");
return(0);
}
できた〜!!(゜ー゜;Aアセアセ
150デフォルトの名無しさん:2005/09/26(月) 13:59:07
>>149
returnに括弧は要らない。
151デフォルトの名無しさん:2005/09/26(月) 14:18:26
>>150
ガ━━━━━━(゚д゚lll)━━━━━━ン!!!
そうでしたか…
勉強してきます…
152デフォルトの名無しさん:2005/09/26(月) 14:27:50
誰かC言語でオリジナルデスノート対決しようぜ!!
153デフォルトの名無しさん:2005/09/26(月) 16:05:36
>>150
・・・?
別にコンパイルエラー起きないはずだし、正しい記述じゃね?
154デフォルト名無しさん:2005/09/26(月) 16:14:30
>>150
嘘教えてどうすんだよ・・・
155デフォルトの名無しさん:2005/09/26(月) 16:23:46
>150はあってるよ。
括弧は要らない。
ただし、つけても害はない。
でも、見難い。
156デフォルトの名無しさん:2005/09/26(月) 16:29:44
>>1はどうした?
157デフォルトの名無しさん:2005/09/26(月) 17:27:12
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void)
{
158デフォルトの名無しさん:2005/09/26(月) 17:48:54
>>155
では括弧はあってもなくてもいいんだけれども
ない方が見やすいプログラムと言う事ですかね?
159デフォルトの名無しさん:2005/09/26(月) 18:00:15
>>158
returnという関数の呼び出しに見えてしまうから気持ち悪いと言う説が濃厚
その他Lispとは違うんだから括弧は少なくしろと言う説もある
160デフォルトの名無しさん:2005/09/26(月) 18:01:08
括弧は無いのが多数派のような気がするけど、
全部につける人も普通にいるし。

return (a + b);

みたいな計算結果返すんだったらつけたくなるなな
べつにあんま気にしなくてもいいと思うよー。
161デフォルトの名無しさん:2005/09/26(月) 18:03:05
括弧の有無がそんなに重要か?
162デフォルトの名無しさん:2005/09/26(月) 18:04:06
マメ知識

retarn 0; //構文エラー
retarn(0); //リンクエラー
163デフォルトの名無しさん:2005/09/26(月) 18:05:33
>>159>>160
良い意見有難う御座います。
すごく参考になってやる気でますよ(^^;
164デフォルトの名無しさん:2005/09/26(月) 18:07:10
>>162
参考にさせて頂きますよ(`・ω・´)
165デフォルトの名無しさん:2005/09/26(月) 18:15:33
#include<stdio.h>
int main(void)
{
int i,goukei,heikin;
goukei=0;
heikin=0;
for(i=1;i<=50;i++){
goukei=goukei+i;
heikin=goukei/i;
}
printf("1〜50までの和は%dです\n",goukei);
printf("平均は%dです\n",heikin);
return0;
}
できた〜(゜ー゜;Aアセアセ
今度は完璧だぜ!( ´ー`)
166デフォルトの名無しさん:2005/09/26(月) 18:19:16
>return0;

空白をいれましょう。
でないと、コンパイラが[retun]と[0]なのか、
[return0]という変数などなのか、迷います。
167デフォルトの名無しさん:2005/09/26(月) 18:20:37
heikin=goukei/i;
をループのそと(うしろ)に
168デフォルトの名無しさん:2005/09/26(月) 18:22:03
>>166
もともとタブが入ってて書き込んだ段階で消えただけじゃね?
169167:2005/09/26(月) 18:22:50
ああすまん。外に出しただけでは駄目だ
heikin=goukei/50;
ね。
平均は整数値でいいの?
170デフォルトの名無しさん:2005/09/26(月) 18:22:56
平均の求め方は、合計を最後に50で割ればいいんでないかい?
for文からは出すんだ!
171デフォルトの名無しさん:2005/09/26(月) 18:24:03
寝起きで
hentai=gouki/i;
に見えた
172デフォルトの名無しさん:2005/09/26(月) 18:24:08
>>165
ガウスの法則って知ってる?
1から100000000でも真面目に足すの?
それに平均を毎回求める必要ないんじゃ?最後の一回だけで。
173デフォルトの名無しさん:2005/09/26(月) 18:25:01
ああ…遅レスすまん
174デフォルトの名無しさん:2005/09/26(月) 18:25:23
>>166
そうでしたか…難しい('A`)

>>167
そうした方が処理回数が減るからという事だからですか?

>>168
自分のミスですた…orz
175デフォルトの名無しさん:2005/09/26(月) 18:25:31
>>165
goukei = goukei + iはgoukei += iとするべき

おそらく作成者の意図はgoukeiにiを加算したいのであってgoukei+iをgoukeiに代入したい訳ではないから
あと、左辺値に副作用があったり、マクロだった場合にどんな動作するか考えるの面倒だからこの記述になれるほうが良い
176デフォルトの名無しさん:2005/09/26(月) 18:33:12
>>169
平均はdobleかflotのがいいんですね!!
 
>>170
for文難しいですよ…

>>171
ワラタw

>>172
応用力というものが足りない事にきずきましたよ('A`)

>>175
高度な意見なので分からない事がありますが、加算するときは
そのようにするのですね!!有難う御座います
177デフォルトの名無しさん:2005/09/26(月) 18:33:13
>>174
処理回数が減るってのはもちろんだけど、
“計算しなくてもいいものは計算しない”は基本中の基本だからね。

平均なんて最後にまとめて計算すればいい話であって
50回計算する意味はないでしょ?

毎回表示したいとか、そういう理由があれば別だけど。
178デフォルトの名無しさん:2005/09/26(月) 18:35:20
>>177
なるほどそういう事ですか!
短く分かりやすいプログラムにしろという訳ですね
勉強してきます(゚∀゚)
179デフォルトの名無しさん:2005/09/26(月) 18:38:11
>>178
という事で、もう一度作り直してください
180デフォルトの名無しさん:2005/09/26(月) 18:43:14
>>179
予想外のフリが…Σ(゚д゚;) ヌオォ!?
ですがプログラムのコピーになってしまうので、
また新しい関数で何か作ってみるので判定して下さい!!
よろしくお願いします<(_ _*)>
では勉強してきまつ
181デフォルトの名無しさん:2005/09/26(月) 18:44:37
>>180
じゃぁ、1+3-5+7-9+11-13+・・・
を50回計算した合計を出力するプログラムを。
182デフォルトの名無しさん:2005/09/26(月) 18:46:45
>>181
やってみます!!
が…む、難しい予感が…
数学苦手だった〜('A`)
183デフォルトの名無しさん:2005/09/26(月) 18:49:32
>>182
じゃあ、ヒントだ
1 3 5 7 9 11 13...これは+2づつ増えている
a=1の時a *= -1を繰り返し実行すると1,-1,1,-1となる


184デフォルトの名無しさん:2005/09/26(月) 18:51:29
>>183
なんとなく分かってきましたよ(`・ω・´)
185デフォルトの名無しさん:2005/09/26(月) 19:13:45
いい感じの流れになってきたな
みんなガンガレ!
186デフォルトの名無しさん:2005/09/26(月) 19:15:56
#include <stdio.h>
int main(void)
{
int i,goukei;
goukei=0;

for(i=1;i<=50;i++)
{
if(goukei==4*i){
goukei+=goukei+i;
}
else if{
i=i*(-1);
goukei+=goukei+i;
}
printf("%d\n",goukei);

return 0;
}
うおぉぉぉ〜むちゃくちゃ怪しいプログラムになってしまた
見にくいですが判定をお願いします…('A`)
187186:2005/09/26(月) 19:18:31
まずい!!やっぱりみないで下さい!!
なんつ〜もん晒してんだ漏れは…_| ̄|○
188デフォルトの名無しさん:2005/09/26(月) 19:44:57
>>183
#include <stdio.h>
int main(void)
{
int i,goukei;
goukei=0;

for(i=1;i<=50;i++)
{
if(goukei==4*i+1){
i=i*(-1);
goukei+=goukei+i;
}
else{
goukei+=goukei+i;
}
printf("%d\n",goukei);

return 0;
}
できたかも!!(`∀´)
189デフォルトの名無しさん:2005/09/26(月) 19:58:57
>>181
最初の1と3が共に正の数だからうまく交互に行いにくいな。

>>188
エラーが出た。中カッコがいくつか足りない。
190デフォルトの名無しさん:2005/09/26(月) 20:04:08
>>189
エラーですか…そうなんですよ符号を考えるのが
難しいんですよ。
191190:2005/09/26(月) 20:06:35
for文の終了の中括弧がないですね
192デフォルトの名無しさん:2005/09/26(月) 20:18:11
もうひとつヒント
合計に加える値とループのカウンタは別にしても良い

ちなみに元のままだとelse以下がおかしい
193デフォルトの名無しさん:2005/09/26(月) 20:21:20
>>189
えっ 1を入れないで50回じゃないの?
194189:2005/09/26(月) 20:22:23
とりあえず俺もやってみた。最初の1はtotalに代入してあるから繰り返し回数は49回。
変数aのトレース付き。

#include <stdio.h>
void main()
{
int a=1, i, total=1;
for(i=0; i<49; i++){
if(a >= 0){
a += 2;
printf("%d ", a);
total += a;
a *= -1;
}
else{
a -= 2;
printf("%d ", a);
total += a;
a *= -1;
}
}
printf("合計=%d\n", total);
}
195190:2005/09/26(月) 20:23:25
>>192
>合計に加える値とループのカウンタは別にしても良い
この見極めが難しいですね!(´・ω・)

>ちなみに元のままだとelse以下がおかしい
これはやはりfor文の括弧を付けていないせいですよね?
196190:2005/09/26(月) 20:27:01
>>194
天才じゃないっすか(゚д゚lll)
何だったんだ!?漏れのへぼいプログラムは…orz
197デフォルトの名無しさん:2005/09/26(月) 20:32:09
プログラミングはじめてみようと思うのだけど
まず、どんなことから始めれば?
198デフォルトの名無しさん:2005/09/26(月) 20:33:44
>>194
#include <stdio.h>
int main()
{
  int i, total=1, n=3, f=1;
  for (i=0; i<49; i++) {
    total += n*f;
    n+=2;
    f*=-1;
  }
  printf("%d\n", total);
  return 0;
}

これだけでいいよふな
199デフォルトの名無しさん:2005/09/26(月) 20:35:28
>>195
よく見ると他にも間違ってるな、意図を推察して直してやるとこんな感じか?
else以下が違うんじゃなくて条件自体がまずいな

7:if(goukei==4*i+1){ → if((i & 1)==1) {
8:i=i*(-1); → 要らない
9:goukei+=goukei+i; → goukei += 2 * i;
12:goukei+=goukei+i; → goukei -= 2 * i;
200デフォルトの名無しさん:2005/09/26(月) 20:39:16
>>197
まずなんの言語を学びたいかじゃないかな…
あ、ここに書き込んでるってことはCかな?
201190:2005/09/26(月) 20:39:49
>>199
・・・・・結局はほとんど違いますね
goukeiの初期化=1にすれば簡単なんですよね
202189:2005/09/26(月) 20:45:51
>>196
プログラムの打ち方なんて人それぞれだって。
藻前の個性的なコードとてちゃんと動作すれば何ら問題ないし。むしろ、処理追ってみて少し楽(ry

>>198
3からは計算で求めたかったんで。といっても1を代入してる時点でもう駄目だなorz
203190:2005/09/26(月) 20:54:03
>>202
動作するようにガンバリます!
いろいろ見てくださってありがとう御座いました
C言語は意外と面白いと思えただけでもとてもよかったです。
204デフォルトの名無しさん:2005/09/26(月) 20:56:26
#include <stdio.h>

int main()
{
  int i, total=1;
  for (i=1; i<50; i++) {
    total += (i*2+1) * ((i%2) ? 1 : -1);
  }
  printf("%d\n", total);
  return 0;
}

符号も絶対値も i から求めたい…
205189:2005/09/26(月) 21:06:24
>>203
コツとしてはTabキーで字下げをすること。{}のペアや範囲が分かりやすくなって全体的に読みやすくなる。(2chに書く時はスペースに直す必要有
メモ帳なんかは改行すると字下げが解除されるから、他のエディタを使うことをお勧めする。
206190:2005/09/26(月) 21:17:16
>>205
スペース使うんですか?なぜか整ってしまっておかしいなとは
思っていたんですよ。{}の使い分けをしっかりしてみます。
207189:2005/09/26(月) 21:47:49
互いに問題出し合って解いていくのも結構いいかも。参考書開いて黙々とやってるより全然面白い。

という訳で俺から一つ。
整数を5つ入力し、それを数値の多い順にソートするプログラムを作成。
ヒント:3重ネスト
208デフォルトの名無しさん:2005/09/26(月) 22:02:44
>>181
#include <stdio.h>

int main()
{
    printf("%d\n", (1-2*25));
    return 0;
}
209デフォルトの名無しさん:2005/09/26(月) 22:08:57
>>208
2*25=50
1-50=-49
210デフォルトの名無しさん:2005/09/26(月) 22:15:11
■出題まとめ
>>42 HelloWorld!を出しやがれ
>>44 1から50までの和
>>46 ファイルから読み込み大きい数から並べて
>>52 物体が通る軌跡を求めろ
>>106 まずは字句解析と行こうか
>>181 じゃぁ、1+3-5+7-9+11-13+・・・を50回
>>207 ソートするプログラム

■インデントする方法
・メモ帖・秀丸・VSなどの、エディタの置換機能を使います
・& nbsp; (←&とnの間スペースを削ってくれ)を書き込むとスペースに変換されます
・タブやスペースを& nbsp;に置換して書き込むとインデントが整います
▼コツ
・タブを置換したい場合はエディタ上のタブをコピーして検索窓でペーストします
・スペースを置換したい場合はインデントに利用している単位(2,4,8個など)をまとめて
 置換すると最小限で済みます。
 2ちゃんねるの文字数制限にひっかかる場合は試してみてください。
211デフォルトの名無しさん:2005/09/26(月) 22:16:46
>>209
違うのか?
212デフォルトの名無しさん:2005/09/26(月) 22:22:05
1
+3 1回目
-5 2回目
+7 3回目
-9 4回目
+11 5回目
-13 6回目

1回目と2回目を足したら-2
3回目と4回目を足したら-2
というふうに奇数回目とその次の数を足せば-2になる

全部で50回計算するので奇数回目と偶数回目を足したものが25個ある
つまり-2が25個ある

よって-2*25

もともと1があるので
1+(-2*25)
=1-2*25
213デフォルトの名無しさん:2005/09/26(月) 22:22:59
スペースを
  自動変換
    ギコナビかな
       
214デフォルトの名無しさん:2005/09/26(月) 22:38:32
スペースを に変換するプログラムを作ったらどうだw
215デフォルトの名無しさん:2005/09/26(月) 22:40:32
ミスった
スペース・タブを&nbsp;に変換するプログラムを作ったらどうだ
216デフォルトの名無しさん:2005/09/26(月) 22:43:07
>>214-215
&amp;を使えばいい。
217デフォルトの名無しさん:2005/09/26(月) 23:31:24
確かに、
char[] nbsp;
pchar = &nbsp;
とかだとスペースになっちまうなw
218デフォルトの名無しさん:2005/09/26(月) 23:49:58
&&&&t&e&s&t&
219デフォルトの名無しさん:2005/09/26(月) 23:51:35
&ってどういう効果?
220デフォルトの名無しさん:2005/09/27(火) 00:11:44
ポインタ、論理和
221デフォルトの名無しさん:2005/09/27(火) 00:19:24
あ、ごめんなさい&のことです
222デフォルトの名無しさん:2005/09/27(火) 00:26:29
>>214
先生、それは課題でしょうか?
もう少し詳しくお願いします
223デフォルトの名無しさん:2005/09/27(火) 01:26:00
>222

>スペース・タブを&nbsp;に変換するプログラム
" "
224デフォルトの名無しさん:2005/09/27(火) 01:26:55
>>147
遅くなってしまったが、次は構文解析だな

以下のBNF生成規則にそった代入文のパーサを作る

<代入文> := 名前 = <式>
<式> := <式> + <項> | <式> + <項> | <項>
<項> := <項> * <要素> | <項> / <要素> | <要素>
<要素> := ( <式> ) | 名前 | 定数

解析結果は<代入文>をルートとする木構造とし、<演算子, 被演算子1, 被演算子2>のノードで出力する
被演算子がノードになる場合はN(ノード番号)を出力する
225デフォルトの名無しさん:2005/09/27(火) 01:28:13
ごめんなさい
うまく書けなかったのでもう一度書きます
 & a m p ; ってどういう効果ですか?
226デフォルトの名無しさん:2005/09/27(火) 01:28:54
>210
ゲームとかもっとあがってないか? 出題
227デフォルトの名無しさん:2005/09/27(火) 01:29:57
&amp;→&
228デフォルトの名無しさん:2005/09/27(火) 01:31:47
>225
アンド
229デフォルトの名無しさん:2005/09/27(火) 01:42:06
214じゃないけど、課題っぽくしてみた。
いきなりファイル関係をいじるのは難しいかもしれない。ファイルの読み込みは必須だけど、書き出す処理はやめて画面に出力でもかまわない。
猫でもわかる(ryのC++講座にprintfやputsでファイルに出力する方法が書いてある。

ソースファイル中のHTML特殊文字をエスケープするプログラムを作成する。
・起動したらファイル名を入力
・&はamp、<はlt、>はgt、[半角スペース]はnbsp。タブ(\t)は4文字の半角スペースとする。
 例 <→&lt;
・出力するファイル名は、ソースファイル名+".txt"。
参考
・ソースを丸ごとメモリに読み込まない。長いソースでは問題が起こる。1文字ずつ読み込んで書き出す。読み出した文字はchar型の値に代入する。
余裕があれば
・Windows環境だと2バイト文字に問題がある。2バイト文字の上位8ビット(=1バイト)が0x90より大きいなら下位8ビットはエスケープしないこと。
 ちなみにchar型やbyte型の大きさは1バイト。つまり、次に読み出す文字のエスケープ判定をしなければOK。
・入力されたファイル名が正しいか(ファイル名に使えない文字がないか)調べる。
・出力するファイル名がすでに存在しないか調べる。
・上書きするか中断するか選ばせるのも手。yなら上書き、nなら中断、それ以外ならループ。
・"や'もエスケープする。
・エスケープした文字数をカウントしたり、出力したバイト数を計算したりして、出力後結果を表示。

ヒント
fopen fclose fgetc(要キャスト) fputc fprintf
230デフォルトの名無しさん:2005/09/27(火) 01:47:02
だぁーミスった
×0x90より大きい
〇0x80から0x9F、0xE0から0xFF
231デフォルトの名無しさん:2005/09/27(火) 01:54:02
案外奥が深いなw
ここを参考にするといい
ttp://www9.plala.or.jp/sgwr-t/lib/fgetc.html
232デフォルトの名無しさん:2005/09/27(火) 01:55:04
そーいえば、○×ゲームって作るの難しいの?
人vs人のやつ。
233デフォルトの名無しさん:2005/09/27(火) 02:03:40
>232
そんな難しくない方

たてよこななめに並んでいるかどうかを判定する、ってのがこのプログラムのキモ
234デフォルトの名無しさん:2005/09/27(火) 02:16:52
>>233
それが問題かー。どうやって判定するべきか・・・。
235デフォルトの名無しさん:2005/09/27(火) 02:22:58
深く考えなくていいとオモ。
碁やオセロならまだしも、TicTacToeぐらいなら力業でif分並べたって8回の判定で済むんだし。
ループを使って横判定、縦判定、で最後に手動で斜め判定が一番楽かな?
236デフォルトの名無しさん:2005/09/27(火) 02:24:30
全体的な流れは

・3×3の配列を作る --- 例) int tbl[3][3];
・○は1、×は2、何も置いてない所は0 とかってする

・指定した場所に置く時に0かどうか判断して、置けるなら置く
・たてよこななめのどれかで3つ並んだかどうかチェック
・まだ空きが有るかつどちらも3つ並んでなければ、場所指定に置く所から繰り返し

って感じ
237デフォルトの名無しさん:2005/09/27(火) 04:48:28
http://gamdev.org/up/img/3427.phps

○×ゲームつくりました
238まとめ:2005/09/27(火) 05:29:49
■参加方法
解きたい→うp
出したい→うp
■今までに出された問題
>42 HelloWorld!を出しやがれ
>44 1から50までの和
>46 ファイルから読み込み大きい数から並べて
>52 物体が通る軌跡を求めろ
>106 まずは字句解析と行こうか
>124 神経衰弱、ブラックジャック
>125 ぷよぷよ
>126 ブロック崩し、インベーダ
>129 ジャンケンゲーム
>181 じゃぁ、1+3-5+7-9+11-13+・・・を50回
>207 ソートするプログラム
>215 スペース・タブを&nbsp;に変換
>224 次は構文解析だな
>229 HTML特殊文字をエスケープ
>236 ○×ゲームをつくれ
■インデントする方法
・&nbsp;を書き込むとスペースに変換されます
・タブやスペースを&nbsp;に置換して書き込むとインデントが整います
・メモ帖・秀丸・VSなどの、エディタの置換機能を使います
▼コツ
・タブを置換したい場合はエディタ上のタブをコピーして検索窓でペーストします
・スペースはインデント単位(2,4,8個など)でまとめて置換すると単独のスペースを無視できます
・ギコナビなら自動変換機能があります。
239デフォルトの名無しさん:2005/09/27(火) 05:38:19
トランプ系ならまずカードをどうやって表現すっかだな
ジョーカー除いて台札は4×13=52枚
&sp; 種類が4(スペード,ハート,ダイヤ,クラブ)
&sp; 数字が13(A,2,3,...,10,J,Q,K)
240デフォルトの名無しさん:2005/09/27(火) 05:39:51
↑ & n b s p ; ってしないとダメなのか orz
241デフォルトの名無しさん:2005/09/27(火) 05:44:00
すいません
私も入門書を読み終わったところなのですが
http://www.loses.org/software/xaav.htm
このソースが全然読めません
読めないというか意味すら分かりません
ここで始めてる皆さんは分かるのでしょうか?
242デフォルトの名無しさん:2005/09/27(火) 05:51:05
ttp://www.loses.org/download/xaaview.c
の事かな?

> X Window System
> MonaFont

こーゆー環境で動かすもんだ、って以外に特に難しいプログラムでは無いと思うが
初心者にはきついな

243241:2005/09/27(火) 05:53:58
すいません
http://www.loses.org/download/xaav-0002.tgz
こっちです
244デフォルトの名無しさん:2005/09/27(火) 05:57:06
>>243
読めないと言われてもなぁ。
とりあえずプログラミング言語ってのは英語や日本語のような自然言語と同じで
文法が分かったって単語が分からなきゃ読めないわけよ。
入門書っていうのは、いわゆる基礎単語と文法の基礎をやっているようなもんで
終わったからといっても、実用アプリのソースを読むには両方不足してるからな。

そのソースはそこまで煩雑な文法は使ってないから、初心者でもXのAPIマニュアル片手に
順番に追っていけば読めると思うよ。時間はかかるかもしれんけど。
245デフォルトの名無しさん:2005/09/27(火) 06:26:54
問題: >>243のコードを言葉で表せ
246241:2005/09/27(火) 06:34:50
>>545
難しい
247デフォルトの名無しさん:2005/09/27(火) 06:43:23
>>241がどのレベルで読めないのかが分からないけど
とりあえずいくつか指針を。

・どこから読めばいいか分からない→とりあえずmain関数から
・関数やパラメータの意味が分からない→APIリファレンスを読むか、ユーザ定義関数なら関数を読む
・プログラムそのものが読めない(whileって何だよ、char*って何、etc...)→入門書を読み直す
248デフォルトの名無しさん:2005/09/27(火) 07:21:01
おまいら難易度上がりすぎじゃね?
昨日今日はじめた人間のレベルじゃねえぞ
249デフォルトの名無しさん:2005/09/27(火) 07:34:13
寧ろ、初心者の基準がわからないのだ
250デフォルトの名無しさん:2005/09/27(火) 08:12:06
>243のコードのポイントを挙げるとこんな感じ。
・XWindow/XLibの知識がないとちんぷんかんぷん。
・getopt()という過去の癖のある解析関数を使っている辺りがこれまた馴れを要する。
・コードの使い回しなのか、明らかに手の違うコードが混在している。
・malloc()に対するfree()がない場合があるなど資源の管理が無頓着。
・fprintf()/puts()を連続して使うような手抜きも。つーか、統一しろや。
・'0'と書かずに48と書くようなアナクロコードも。

まぁ素人が参考にするようなコードじゃないね。
251デフォルトの名無しさん:2005/09/27(火) 08:27:18
ポインタ多用してるので読めませんってことじゃねーの?
252デフォルトの名無しさん:2005/09/27(火) 09:47:50
データ構造って、いくつくらいあるんですか?
253デフォルトの名無しさん:2005/09/27(火) 11:12:02
16777215種類くらい
254デフォルトの名無しさん:2005/09/27(火) 11:24:52
アレフゼロくらい
255デフォルトの名無しさん:2005/09/27(火) 11:41:35
>>248
ヨクワカル、ソノキモチ
256デフォルトの名無しさん:2005/09/27(火) 11:47:49
難易度があがればその難易度にふさわしい人間が引き寄せられるのサ
257デフォルトの名無しさん:2005/09/27(火) 12:33:01
うぬ。
焦らずマターリ。
意味不明でも本をボーッと眺めていると、数か月もすれは自然に分かるよ。
258デフォルトの名無しさん:2005/09/27(火) 12:34:27
土曜からはじめたとしたら、
今if文終わってfor文行くとこぐらいじゃね?
259デフォルトの名無しさん:2005/09/27(火) 13:04:42
1日目 インスコ
2日目 Hello World
3日目 変数の概念
4日目 変数
5日目 基本的な演算子
6日目 制御構造if、else、else if、swich
7日目 制御構造for、while、do while、break、continue、GOTO
260デフォルトの名無しさん:2005/09/27(火) 13:05:28
>>258
人にもよるが、そんなにマターリやるとすぐあきる
鉄は熱い内に打て

それに対面でやってるわけじゃないんだ
このスレの内容どっかに保存しといて後でゆっくり見てもいい
261デフォルトの名無しさん:2005/09/27(火) 13:34:44
>>248
うむ、分かったからおぬしもどれか課題をやってみなされ
262デフォルトの名無しさん:2005/09/27(火) 13:49:14
>>250
>・XWindow/XLibの知識がないとちんぷんかんぷん。
それなりには読めるだろ
>・getopt()という過去の癖のある解析関数を使っている辺りがこれまた馴れを要する。
俺も普通に使ってるが・・・
>・コードの使い回しなのか、明らかに手の違うコードが混在している。
癖が統一されてると思うけど
>・malloc()に対するfree()がない場合があるなど資源の管理が無頓着。
一個は途中で不要になるから開放してて、もう一つは最後まで使われるからしてねーんじゃねーの?
>・fprintf()/puts()を連続して使うような手抜きも。つーか、統一しろや。
適切だと思うけど、int, short, charをかなり使い分けてるからスピードを大切にしてるんだと思うけど
>・'0'と書かずに48と書くようなアナクロコードも。
それは個人の趣味。

>>251
>ポインタ多用してるので読めませんってことじゃねーの?
この場合、必要だから使ってるだけで無駄には使ってない
ポインタのポインタがいい味出してるな
263デフォルトの名無しさん:2005/09/27(火) 13:56:27
getoptの何が悪いんだ?
この場合longにする必要もないし

過去とか古いってなんでもいうのはWindowsユーザぐらいだぞ
264デフォルトの名無しさん:2005/09/27(火) 14:05:30
>>263
いや、単に「CUIが使えないユーザー」かと
265デフォルトの名無しさん:2005/09/27(火) 14:41:34
option.separate_value = 'x';
option -> window_size = 1;
option -> window_coordinate = 1;

この3つは#define するか値をそのまま書いた方が読みやすい
というかseparate_arg()の引数が5個もあるけど
最初の2つ引数はまるで無駄になってる。
266デフォルトの名無しさん:2005/09/27(火) 16:14:58
ボインタってやつの使い方を教えて下さい
267デフォルトの名無しさん:2005/09/27(火) 17:58:50
268デフォルトの名無しさん:2005/09/27(火) 18:10:32
>>266
・関数で引き渡し元の変数の中身を変更したい場合に使用する
・動的に確保したメモリーがどこにあるのか保持する
269デフォルトの名無しさん:2005/09/27(火) 19:02:46
php で言う参照渡しと同じか
270デフォルトの名無しさん:2005/09/27(火) 19:53:25
>>237
Warning : function has no prototype
3427.c line 5 {
と出たけど。
271デフォルトの名無しさん:2005/09/27(火) 19:57:51
おかしいな…C初心者スレをお気に入りに入れてたはずなんだけど…
272デフォルトの名無しさん:2005/09/27(火) 20:13:58
>>271
俺もそう思う
273デフォルトの名無しさん:2005/09/27(火) 20:16:06 0
>>268
それはポインタ
274デフォルトの名無しさん:2005/09/27(火) 20:43:19 0
>>180
こんなのはどうでしょうか?
#include<stdio.h>
main()
{
int i,a,total;

for(i=0, a=1,total=0; i< 50; i++,a+=2)
{
if(a == 1)
total += a;
else if(i % 2 == 1)
total += a;
else
total -= a;
}
printf("%d",total);
return(0);
}
亀レスだけどa*=-1はなるほどなと思いました
良スレハケーン!

275デフォルトの名無しさん:2005/09/27(火) 20:45:43 O
276デフォルトの名無しさん:2005/09/27(火) 20:47:07 0
>>274
つ公式
277デフォルトの名無しさん:2005/09/27(火) 23:32:24
>>270
c++コンパイラ使ってないんじゃね?
278180:2005/09/27(火) 23:33:54
>>274
自分も遅レスですが、for文で「,」で区切れば
初期化の数増やせるんですか!
レベル低いですね俺って…(´д`)
279デフォルトの名無しさん:2005/09/27(火) 23:39:31
>>278
つ[カンマ演算子]
280デフォルトの名無しさん:2005/09/27(火) 23:43:03
この壺はよい壺だ
281デフォルトの名無しさん:2005/09/27(火) 23:50:36
>>181って計算50回するんじゃなくて、1,3,5,7…99まで(50個)を計算しろってことなの?
282デフォルトの名無しさん:2005/09/27(火) 23:56:07
そういうことじゃねーの?
283デフォルトの名無しさん:2005/09/27(火) 23:57:51
だったら「50回計算」なんて書くなよーw
50個の数字があったら計算は49回だろwwwwwwww
284デフォルトの名無しさん:2005/09/28(水) 00:13:49
公式使って求めた答えだけ表示してても意味無いと思うんだが
…まあいいか

#include<stdio.h>
int main()
{
int i,j,a,total;

for(i=1,j=1,a=3,total=1;i<50;i++,a+=2)
{
total+=a*j;
j*=-1;
}
printf("%d",total);
return 0;
}
285デフォルトの名無しさん:2005/09/28(水) 00:21:59
>>284
最初からこうしろ

for(i=1,j=1,a=3,total=1;i<50;i++,a+=2,j*=-1,total+=a*j){}
286まとめ:2005/09/28(水) 00:33:32
■参加方法
問題を解きたい→どんどん解け
問題を出したい→どんどん出せ
■今までに出された問題
>42 HelloWorld!を出しやがれ
>44 1から50までの和
>46 ファイルから読み込み大きい数から並べて
>52 物体が通る軌跡を求めろ
>106 まずは字句解析と行こうか
>124 神経衰弱、ブラックジャック
>125 ぷよぷよ
>126 ブロック崩し、インベーダ
>129 ジャンケンゲーム
>181 じゃぁ、1+3-5+7-9+11-13+・・・を50回
>207 ソートするプログラム
>215 スペース・タブを&nbsp;に変換
>224 次は構文解析だな
>229 HTML特殊文字をエスケープ
>236 ○×ゲームをつくれ
■インデントする方法
・&nbsp;を書き込むとスペースに変換されます
・タブやスペースを&nbsp;に置換して書き込むとインデントが整います
・メモ帖・秀丸・VSなどの、エディタの置換機能を使います
▼コツ
・タブを置換したい場合はエディタ上のタブをコピーして検索窓でペーストします
・スペースはインデント単位(2,4,8個など)でまとめて置換すると単独のスペースを無視できます
・ギコナビなら自動変換機能があります。
287デフォルトの名無しさん:2005/09/28(水) 01:37:58
こんなもんか

void sort(int a[],int b){
  if(b>1){
    int c,i,j,m,n,x;
    
    x=(a[0]+a[b/2]+a[b-1])/3;
    
    i=0;
    j=b-1;
    m=0;
    n=b-1;
    
    while(1){
      while(a[i]<x)
        i++;
      while(a[j]>x)
        j--;
      if(i>=j)
        break;
      c=a[i];
      a[i]=a[j];
      a[j]=c;
    }
    
    sort(a,i);
    sort(&a[i],b-i);
  }
  return;
}
288デフォルトの名無しさん:2005/09/28(水) 01:39:55
あ、mn消し忘れた
289ポポ素 ◆Qgm8RFT0/. :2005/09/28(水) 02:41:42
わぁー!ついていけないー!(;;)
'A'と"A"の違いって何?
ごめん、一人レベルの低い質問して…
290デフォルトの名無しさん:2005/09/28(水) 02:44:31
''は文字
""は文字列
"a" == {'a', '\0'}
291MIMIC ◆HJRLalaTdM :2005/09/28(水) 02:55:31
>>289
>>290は嘘だからね
292デフォルトの名無しさん:2005/09/28(水) 03:22:28
ウソっていうかまぎらわしいだけ
293ポポ素 ◆Qgm8RFT0/. :2005/09/28(水) 03:23:53
>>291え?違うの?

return(0);ってどういう意味なんですか?先生型ヘボい質問よろしく☆
あたいがつかってる参考書にはどこにものってなくて
なくてもいけるんだけど、コンパイルしたとき
関数を返してくださいみたいな表示がでてくる。
例えば
#include (studil.h)
main() {
printf("プギャ〜!");
{

でreturn(0); がなくてもプギャーは表示されるんだけど
return(0); があるのと無いのって具体的に何が違うのかな…
やっぱりあった方がいいんですか?
ハァ…細かい疑問だらけだよー
294ちぁ ◆7YYts5tb9s :2005/09/28(水) 03:31:52
>>293
簡単にいえば
mainでreturn 0;するとmain関数に0を返す。 これは普通は通常終了を意味する。
他の関数でreturnした値はその関数の返す値となる
295デフォルトの名無しさん:2005/09/28(水) 03:34:38
>>293
本来ならmainは値を返さないといけないんだけど(返値の型はintだし)
C++ではmain関数に限り、何も書かなければコンパイラが勝手にreturn 0;があるものとしてコンパイルしてくれる。
C言語ではダメだから、C++コンパイラで勉強する場合でも一応書く癖をつけておいた方がいいけど。
296デフォルトの名無しさん:2005/09/28(水) 03:38:32
スペースを 、タブを 4つに変換するコード

http://up.isp.2ch.net/up/21ed13e34ef4.zip

どうか一つよろ。
手元のCデスクトップリファレンス見ながら打ってるんだが、
コマンドライン引数の取得の仕方が載ってなくて困った困った。
297デフォルトの名無しさん:2005/09/28(水) 03:39:53
>293
マジレスしようと思ったが突っ込むところが多すぎて面倒なんでやめた。
mainの前にvoidって書いとけ。
何も書かないか、 intって書いたときはreturn 0;しとけ。

>294
>295
不十分。
298デフォルトの名無しさん:2005/09/28(水) 03:44:01
>>297
処理系定義のmainは使うなや
299デフォルトの名無しさん:2005/09/28(水) 03:47:03
>>243のプロフィールのキャッシュ
> プログラミングは高校の授業で数回ポケコンでやったことがある程度です
> その授業はprintfで簡単な計算結果を表示するだけでした
>>
> XAAVは以上のプログラミング経験の中で作ったものです
> printfとscanfしか知らなかった中で作ったので、大多数の時間をC言語の理解に費やしました
> C言語を調べながら3日程で作りましたのでそこら中に間違った箇所があるかもしれません
> バグを見付けられたかたは指摘の程をお願いします

これをほぼ0の知識の中で三日間で作れるものなのか?
神なのか?
300デフォルトの名無しさん:2005/09/28(水) 03:49:17
XAAVって何なの?
301デフォルトの名無しさん:2005/09/28(水) 03:50:10
>298
正直すまんかった。
処理系の話まで説明する元気はなかった。
302ちぁ ◆7YYts5tb9s :2005/09/28(水) 03:50:54
>>297
簡単にって書いたつもりだけどそれでもダメなのか?
int main( void)
{
printf("プギャ〜!");

return 0;
}
って訂正してから言わなきゃダメだった?
しかもLCもしなきゃだめだった?
環境書いてないからどうしようもないんだけど…

303デフォルトの名無しさん:2005/09/28(水) 03:56:34
>302
型の話からすべきだと思っただけ。
たぶんそれでは理解できないと思ったから。
ていうか俺もちゃんと説明してないんだから不十分とかいえんわな、悪かった。
304デフォルトの名無しさん:2005/09/28(水) 04:00:00
>>296
いいんじゃないでつか?
タブをスペース4つに変換するコード、だよね。
ちょっと欲を出して、タブを4の倍数列の位置になるように調整するようにしてみては。
普通のエディタではタブ1個も、スペース1個+タブ1個も同じ列に揃うよね。
前後のスペースを考慮して変換するスペースの個数を変えてみるとか。
305デフォルトの名無しさん:2005/09/28(水) 04:38:58
はじめたころってささいなことが気になって先に進めなくなるんだよな
306ポポ素 ◆Qgm8RFT0/. :2005/09/28(水) 05:32:57
>>294 >>295
どうもありがとうございました!
そういう意味があったんですね

>>303 型って?
307ちぁ ◆7YYts5tb9s :2005/09/28(水) 05:37:00
intとか知ってるだろ?
308ポポ素 ◆Qgm8RFT0/. :2005/09/28(水) 05:49:16
>>307
うん、変数ってのだよね、
整数型だっけ、
309ちぁ ◆7YYts5tb9s :2005/09/28(水) 05:52:59
型じゃん
310ポポ素 ◆Qgm8RFT0/. :2005/09/28(水) 05:58:16
型…わかんね…
一度出直してきます…
311ちぁ ◆7YYts5tb9s :2005/09/28(水) 06:05:33
なにがわからないの??
おぃちゃんに分からないこといってみ??
できる限りの説明ならするよ
312デフォルトの名無しさん:2005/09/28(水) 06:07:51
↓これがどういう仕組みなのかわかんない。
誰か和訳してください。

unsigned pop(unsigned x){
//受け取った整数の立っているbitの数を返す関数
x -= x >> 1 & 0x55555555;
x = (x&0x33333333) + (x>>2 & 0x33333333);
x = x + (x>>4) & 0x0f0f0f0f;
x = x + (x>>8);
x = x + (x>>16);
return x & 0x3F;
}
313デフォルトの名無しさん:2005/09/28(水) 06:24:29
『ハッカーのたのしみ』って本読んでみれ
314デフォルトの名無しさん:2005/09/28(水) 06:31:28
>>313
ありがとございます。
注文しました。
315ポポ素 ◆Qgm8RFT0/. :2005/09/28(水) 06:31:52
>>311
おいちゃーーーん!!!!!!!
型、、型って何?…
型自体の意味がわからないよ。
316ちぁ ◆7YYts5tb9s :2005/09/28(水) 06:43:14
>>315
型っていうのは>>308でいってる通り
整数型(int), 短整数型(short int), 長整数型(long int)とかそういうの
例えば
int atai;
としたら、整数型のataiが確保される。
これはわかるでしょ?

>>303は多分
int main( void)
の型の話をしてると思うんだけど、mainがintだからreturnで返す値もint(整数)型の値を返す必要があるの
普通はmainが返す値はプログラムの終了コードになって、終了コードが0なら通常終了, 1ならエラー終了みたいになってる

これでもなんかわからないかな?
317ちぁ ◆7YYts5tb9s :2005/09/28(水) 06:48:06
追記
なんでmainがintかっていうとmainも関数だから値を返す必要があるの
基本的にmainの呼出し元はOSだから、0が通常終了0以外がエラー終了とかが約束的になってるの
318デフォルトの名無しさん:2005/09/28(水) 07:39:09
>>316 >>317
おいちゃんむずーーーい(><)
とりあえず、
最後にリターン0で返せば
そのプログラムが通常終了になるってことでいいのかな?
でそれをしないと終了しないとか?
で、C++のコンパイラだと、最後にそれ書かなくても
かってに書いてることにしてくれるとか(前レス参照で)
319ポポ素 ◆Qgm8RFT0/. :2005/09/28(水) 07:39:42
>>318
これ、あたいね
320デフォルトの名無しさん:2005/09/28(水) 08:07:02
>mainがintだから
誤解生み捲くりそうな表現だな。
321デフォルトの名無しさん:2005/09/28(水) 09:12:39
>>318
今はあんま深く考えずに
int main()
と書いたら、最後にreturn 0;と書く物だと覚えておけばいいよ。
322デフォルトの名無しさん:2005/09/28(水) 12:36:39
>>148
連結リストにデータを格納してから表示しました
http://gamdev.org/up/img/3437.phps
次は>>224にとりかかります!
323デフォルトの名無しさん:2005/09/28(水) 15:34:52
>>320
どんな誤解を生むんだ?
324デフォルトの名無しさん:2005/09/28(水) 16:08:39
>>323
int main;
325デフォルトの名無しさん:2005/09/28(水) 16:15:19
>>323
mainと言う関数の戻り値がintであっても、mainと言う識別子の評価結果はintではないですね
型は int(*)() 辺りでしょうか?

○int x = main();
×int x = main;
326デフォルトの名無しさん:2005/09/28(水) 17:12:26
( * )
327デフォルトの名無しさん:2005/09/28(水) 18:07:10
>>325の意味が分かる人詳しく説明しれ
328デフォルトの名無しさん:2005/09/28(水) 18:15:24
上: int型変数xを、関数mainの戻り値で初期化する。
下: int型変数xを、変数mainの値で初期化する。
329デフォルトの名無しさん:2005/09/28(水) 18:55:22
>>325
変数mainは危ない様な気が。

それと個人的意見だが、勉強中の香具師はノート(テキスト)を取っといた方がいいと思う。一度見て覚えても忘れる事なんてざらにあるし。
先頭にはまとめ(>>286)を貼っとくといいかも。
330デフォルトの名無しさん:2005/09/28(水) 19:31:18
int (*s)() = main;
なら通った
331デフォルトの名無しさん:2005/09/28(水) 20:04:15
初心者用の問題
1:キーボードから「Nullpoint」を入力したら「ッガ!!」を返すプログラムを作ってください
  「Nullpoint???」や「???Nullpoint」などでは「ッガ!!」をしなくてもかまいません

2:上記のプログラムに「Nullpoint」以外を入力したら「フーン、で?」を返すプログラムを作ってください
  
3:上記のプログラムの挙動を「return」と入力するまで繰り返すプログラムを作ってください

4:「Nullpoint???」や「???Nullpoint」などでも「ッガ!!」を返すように改良してください

この問題のポイントはキーボードからの入力をどう判定するかにあります。
1ができれば2は難しくないはずですが、
文字列の桁あふれや'\n'の扱いに慣れていない人は、3でつまずくかもしれません。
分からない時は、堂々と質問しましょう。
332デフォルトの名無しさん:2005/09/28(水) 20:09:08
( ´D`)<ハーイ
333デフォルトの名無しさん:2005/09/28(水) 20:12:13
>>322
typeにはマクロかenumで
#define TOKEN_KEYWORD 0
type = TOKEN_KEYWORD;
みたいに後でめんどくさくならないようにした方がいいよ。
334デフォルトの名無しさん:2005/09/28(水) 20:15:56
解答はソース丸貼りか↓にうp
ttp://gamdev.org/up/
335デフォルトの名無しさん:2005/09/28(水) 20:32:39

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

int main(){
char str[100], ans[] = "Nullpoint";
int i;
printf("入力して下さい\n");
scanf("%s", str);
for (i = 0; str[i] != '\0'; i++)
if (str[i] != ans[i]) exit(0);
printf("ッガ!!\n");
return 0;
}
336デフォルトの名無しさん:2005/09/28(水) 20:35:12

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

int main(){
char str[100], ans[] = "Nullpoint";
int i;
printf("入力して下さい\n");
scanf("%s", str);
for (i = 0; str[i] != '\0'; i++)
if (str[i] != ans[i]){
printf("( ´_ゝ`)フーン\n");
exit(0);
}
printf("ッガ!!\n");
return 0;
}
337デフォルトの名無しさん:2005/09/28(水) 20:42:04
>>335
文字列リテラルの仕組みが良く分かっているようですね
次回はぜひ標準ライブラリの関数を使ってみてください

>>335の関数を自作できる人ならば
strcmp()関数も自作できることでしょう
338デフォルトの名無しさん:2005/09/28(水) 20:59:32
>>335
strがデカイとansが変なところに行くんじゃ?
339デフォルトの名無しさん:2005/09/28(水) 21:00:42
んなわけないね。すまそ。
340デフォルトの名無しさん:2005/09/28(水) 21:01:30
>>322
110行目でコンパイルエラー。
×plist=(list*)malloc(sizeof list);
○plist=(list*)malloc(sizeof(list));
341デフォルトの名無しさん:2005/09/28(水) 21:13:28
strがansに関係している所は
>if (str[i] != ans[i]) exit(0);
の部分だけですね?
ここでは、両方に共通の変数[i]が使われています。
[i]はその前の文の
>for (i = 0; str[i] != '\0'; i++)
によって i = 0 に初期化されているので、
strとansの1文字目から判定を始めることが補償されています。
このとき、strが極端に長い文字列リテラルになっていたとしても、
ansは最初の宣言時の
>char str[100], ans[] = "Nullpoint";
の初期化によって、'N''u''l''l''p''o''i''n''t''\0'という、
十文字分の文字列リテラルであることが補償されています。
もしもstrが極端に長い文字列リテラルであったとすると、
[i]の値が9になった時、ans[9]は'\0'を示しますが、
STR[9]が文字の終端である'\0'になることはありません。
つまり、
>if (str[i] != ans[i]) exit(0);
は真となり、 exit(0); が実行されるので、
ansを超えてヘンな所に行く前に、プログラムは終了します。
ですから、>>335でも問題はありません。

しいていうならば、
この関数を他のプログラムのmain関数から呼び出す部品として使う時に、
exit を使っていると、呼び出しもとの main関数に戻れないので、
return を使うようにしたほうがいいかもしれません。

……と、書いているうちに、自己解決されたようですね。遅レススマン
342デフォルトの名無しさん:2005/09/28(水) 21:23:29
3はなんとか出来たけど、おいらの力じゃ4は苦労しそう・・・

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

int strcmp(char s1[], char s2[])
{
int i;
for (i = 0; s1[i] != '\0'; i++)
if (s1[i] != s2[i]) return 1;
return 2;
}

int main(){
char str[100];
int ans;
343デフォルトの名無しさん:2005/09/28(水) 21:24:10

while(1){
printf("入力してください\n");
scanf("%s", str);

ans = strcmp(str, "return");
if (ans == 2) break;

ans = strcmp(str, "Nullpoint");
if (ans == 2) printf("ッガ!!\n\n");
if (ans == 1) printf("( ´_ゝ`)フーン\n\n");
}
return 0;
}
344デフォルトの名無しさん:2005/09/28(水) 21:28:38
先生出来ましたyo
1)
#include<stdio.h>
main()
{
char buf[256];
char str[10]="Nullpoint";
int i;

gets(buf);
for(i = 0; i < 9; i++){
if(buf[i] == str[i])
continue;
else
break;
}
if(i == 9)
printf("ガッ!!");
}
345デフォルトの名無しさん:2005/09/28(水) 21:37:39
.file"test.c"
.def___main;.scl2;.type32;.endef
.section .rdata,"dr"
LC0:
.ascii "HELLO\12\0"
.text
.globl _main
.def_main;.scl2;.type32;.endef
_main:
pushl%ebp
movl%esp, %ebp
subl$8, %esp
andl$-16, %esp
movl$0, %eax
addl$15, %eax
addl$15, %eax
shrl$4, %eax
sall$4, %eax
movl%eax, -4(%ebp)
movl-4(%ebp), %eax
call__alloca
call___main
movl$LC0, (%esp)
call_printf
movl$0, %eax
leave
ret
.def_printf;.scl3;.type32;.endef
346デフォルトの名無しさん:2005/09/28(水) 22:11:21
>>342
関数による値の受渡しがよくできていますね。
ただ。strcmp()関数というのは、
標準ライブラリ<string.h>で定義されている関数の名前なので、
同じような挙動をする関数でも、別の名前に変えたほうがいいでしょう。


>>344
こちらもいいですね。continue;とbreak;の使い方が効果的です。
この関数を自作できる人なら strncmp()関数を自作できることでしょう。


>>344>>335では、
「Nullpoint???」を入力した時のプログラムの挙動が違います。
>>335では「ッガ!!」されませんが、>>344ではされます。
この違いは文字列リテラルを扱う上で意外に重要になるので、
両方のやり方を場合に応じて使い分けられるようになることが、
初心者卒業の目安になることでしょう。


>>345
誤爆やスレ違いをした時には一言詫びる余裕が持てると、
人間関係が円滑にすすむかも知れませんよ。
347デフォルトの名無しさん:2005/09/28(水) 22:12:03
おまえらは!!!!!11!!

strcmp←まず、この関数の使い方を勉強しろ
348デフォルトの名無しさん:2005/09/28(水) 22:15:02
ところで、以前他の方も指摘していましたが、
mainの関数を宣言する時に、
>main()
と宣言した上で、
retur; による返り値を返さずにプログラムが終了すると、
コンパイラによっては警告を出してきます。
これは、main関数が
int main (void)  または
int main (int argc, cha *argv[]) と定義されているためです。
この定義の意味はおおざっぱにいうと、
この関数の名称は main といい、
()の中の値を使って {}の処理を行い、
intの値を返す関数です。という意味になります。
ですから、int の値を返さないで終了しようとすると、
「値を返し忘れていませんか?」とコンパイラが心配してくれるのです。
ただし、main だけで int main と宣言していない時には、
これは値のない関数なのだろうと、納得するコンパイラもあります。
この場合は、return; による値がなくとも、
あるいは return; を使わずに終了していても、警告はされません。
また、int main ではなく void main と宣言した場合は、
void というものが「空っぽの値」という意味なので、
この main 関数は値が返って来ない関数です、という意味になり、
retur; で値を返すと、警告又はエラーになってしまいます。

ですから、main だけでの宣言は避けて、
int main と宣言して returnで値を返すか、
void main と宣言して return で値を返さないか、どちらかにするとよいでしょう。
349デフォルトの名無しさん:2005/09/28(水) 22:21:21
>>347 一理ある。

けど、問題の解決策を先ずは自分で考えてから、strcmpを知るのもありなんじゃないかな?
先に strcmp を知っていた人は、逆に問題として、自分で strcmp を作ってみてください。
他の標準ライブラリの関数も、自分でできるものがないか試してみると勉強になりますよ。
その時の参考や解答になるような本として、「新ANSI C言語辞典」をオススメしておきます。
350デフォルトの名無しさん:2005/09/28(水) 22:29:35

標準関数とやらを使ったら4もでけた ヽ(´ー`)ノ

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

int main(){
char str1[100], *p;

while(1){
printf("入力してください\n");
scanf("%s", str1);

if (strcmp(str1, "return") == 0) break;

p = strstr(str1, "Nullpoint");
if (p != NULL)
printf("ッガ!!\n\n");
else
printf("( ´_ゝ`)フーン\n\n");
}
return 0;
}
351デフォルトの名無しさん:2005/09/28(水) 22:33:22
>>349
言ってる事はもっともだが、俺ルールを続けるのはあまりよくない
仕組みを理解したら早い段階で標準ライブラリを使うようにする事

プログラムは常に誰が見ても判りやすくなる様に心掛けよう

明日の自分は他人である。
352デフォルトの名無しさん:2005/09/28(水) 22:34:21
#include <stdio.h>
int main(void)
{
  char *needle = "Nullpoint";
  char buffer[1024];
  if (fgets(buffer, sizeof buffer, stdin))
  {
    for (int i = 0; buffer[i]; i++)
    {
      int j = 0;
      while (buffer[i + j] == needle[j])
        j++;
      if (needle[j] == '\0')
      {
        puts("ガッ!!");
        return 0;
      }
    }
  }
  return 0;
}
353ちぃ ◆7YYts5tb9s :2005/09/28(水) 22:54:25
void mainはダメでしょ
354デフォルトの名無しさん:2005/09/28(水) 23:25:22
>>347
おまえはまずシフトキーの長押し練習汁w
355デフォルトの名無しさん:2005/09/28(水) 23:34:20
>>348
ちなみにC++とC99ではreturnがないままmain()を抜けるとreturn 0;を行うとなっている。
356344:2005/09/29(木) 00:11:08
>>346
実行してくれたんですね。ありがとうございます☆
あとstrncmp()関数のことをもう少し詳しく教えてください
357デフォルトの名無しさん:2005/09/29(木) 00:28:25
4問目。
ttp://gamdev.org/up/img/3440.phps

これらの解答って採点基準とかあるの?
358デフォルトの名無しさん:2005/09/29(木) 00:45:26
>>357
基本は自己採点
偶に出題者か関係の無い他人が採点してくれる
359デフォルトの名無しさん:2005/09/29(木) 01:58:40
■参加方法
問題解きたい→どんどん解け
問題出したい→どんどん出せ
採点したい→どんどんしろ
■今までに出された問題
>42 HelloWorld!を出しやがれ
>44 1から50までの和
>46 ファイルから読み込み大きい数から並べて
>52 物体が通る軌跡を求めろ
>106 まずは字句解析と行こうか
>124 神経衰弱、ブラックジャック
>125 ぷよぷよ
>126 ブロック崩し、インベーダ
>129 ジャンケンゲーム
>181 じゃぁ、1+3-5+7-9+11-13+・・・を50回
>207 ソートするプログラム
>215 スペース・タブを&nbsp;に変換
>224 次は構文解析だな
>229 HTML特殊文字をエスケープ
>236 ○×ゲームをつくれ
>331「Nullpoint」を入力したら「ッガ!!」
■インデントする方法
・&nbsp;を書き込むとスペースに変換されます
・タブやスペースを&nbsp;に置換して書き込むとインデントが整います
・メモ帖・秀丸・VSなどの、エディタの置換機能を使います
▼コツ
・タブを置換したい場合はエディタ上のタブをコピーして検索窓でペーストします
・スペースはインデント単位(2,4,8個など)でまとめて置換すると単独のスペースを無視できます
・ギコナビなら自動変換機能があります。
■解答はソース丸貼りか↓にうp
ttp://gamdev.org/up/
360デフォルトの名無しさん:2005/09/29(木) 04:08:39
>>357
そこでgotoを使うのはちょっとなぁ・・・
その程度ならループ内で処理できるでしょうに
361デフォルトの名無しさん:2005/09/29(木) 04:09:14
362デフォルトの名無しさん:2005/09/29(木) 05:27:19
このスレはム板の勢いオブジイヤーですね
363デフォルトの名無しさん:2005/09/29(木) 06:01:25
>>299
まさに神
俺は専門学校で目茶苦茶覚えが早いっていわれて褒めちぎられたけど
三日目だとやっと関数覚えたくらいだな
ポインタのポインタなんて理解すらできないと思う
364デフォルトの名無しさん:2005/09/29(木) 07:07:24
sizeofの括弧って必須だったっけ?
365デフォルトの名無しさん:2005/09/29(木) 07:28:47
>>364
int var; として、
size(int)  ○
size int  ○
size(var)  ○
size var  ×
366デフォルトの名無しさん:2005/09/29(木) 09:01:21
付けといた方が良さそうだな
367デフォルトの名無しさん:2005/09/29(木) 09:21:23
出題:コードブレーカー(ゲーム)を作りやがれ
難易度★★☆☆☆

コンピュータがランダムに3桁の数(以後、コード)を生成
プレイヤーはコンピュータの出すヒントを元にコードを推理していく

・コードは同じ数字を使用していない
・プレイヤーが3桁の数字を入力すると、コンピュータはヒントをひとつ出力
・ヒントの出し方は下記の通り
 数字と桁が一致していれば、『ヒット』、数字は合っているが桁が違う場合は『ブロー』
 (例)コード=135の場合
    入力   ヒント
    246・・・0ヒット 0ブロー
    012・・・0ヒット 1ブロー
    123・・・1ヒット 1ブロー
    153・・・1ヒット 2ブロー
    135・・・正解!

368デフォルトの名無しさん:2005/09/29(木) 09:32:14
作ってもいいけど何が面白いんだ?
369デフォルトの名無しさん:2005/09/29(木) 10:24:05
所謂ヒット&ブローと同じだね。
ヒット&ブローというと4桁だけど。
普通に紙と鉛筆だけでもできるからコンピュータ普及前からあるゲームだ。
ミニゲームとして謎解き系のゲームに含まれていたりするから知っている人は多いと思う。
370デフォルトの名無しさん:2005/09/29(木) 10:25:44
>>1
そろそろ飽きてきたかな?
でも君を責めはしない。
仕事や授業で締め切りに追われながら
毎日必死にCを使う状態にある人でないと、
とても身に付くものではないよ。
Cはプロ用の言語という事実を知らない人が多すぎる。
371デフォルトの名無しさん:2005/09/29(木) 10:41:02
>>368
プログラムを作るのが面白いんであって、出来た物が面白いかどうかなんて関係ないだろ
372デフォルトの名無しさん:2005/09/29(木) 10:46:21
じゃあ「プログラムを作るのが面白い」でいいじゃん
373デフォルトの名無しさん:2005/09/29(木) 10:50:50
ケンカ売っておいて開き直りかよwww
374デフォルトの名無しさん:2005/09/29(木) 11:43:20
結果さえでれば他は何でもいいんだよ
375デフォルトの名無しさん:2005/09/29(木) 11:54:57
>>367
重複しない数字3つを生成するところから分からない・・・orz
376デフォルトの名無しさん:2005/09/29(木) 11:57:45
ねぇねぇ、やっぱ数学の知識って必須よね?
俺もやってみようかと思ったけど、数学駄目ぽ
377デフォルトの名無しさん:2005/09/29(木) 12:01:47
>>375
1.変数aに0から9の乱数を作る
2.変数bに0から9の乱数を作る
3.変数b==aなら2へ戻る
4.変数cに0から9の乱数を作る
5.変数c==aなら4へ戻る
6.変数c==bなら4へ戻る
378デフォルトの名無しさん:2005/09/29(木) 12:04:21
>>375
1.0−999の乱数を作る
2.100の位、10の位、1の位を取り出す
3.100の位==10の位なら1へ
4.100の位==1の位なら1へ
5.10の位==1の位なら1へ

379デフォルトの名無しさん:2005/09/29(木) 12:06:47
>>375
1.要素数10個の配列を作る
2.配列に順に0−9を入れる
3.0−9の乱数を2つ作る
4.配列の要素2つを入れ替える
5.十分な回数繰り返す
380デフォルトの名無しさん:2005/09/29(木) 12:09:57
>>376
数学はあるに越したことはないけど
なくても何とかなることは多い。
あとは慣れ。

数学に強い人は理論的思考が得意な人が多いから、
最適化とか綺麗なコーディングとかの点で多少有利な程度。
381375:2005/09/29(木) 12:19:28
先生方サンクス!
いろんな手法があるんですね
382デフォルトの名無しさん:2005/09/29(木) 12:26:57
>>367
http://gamdev.org/up/img/3442.phps
コードブレーカーつくりますた
383デフォルトの名無しさん:2005/09/29(木) 13:13:36
>>380
数学といってもレベルによる
汎用コンピュータ言語は全般的に中学で習う数学のレベルは欲しい

まあ、高校とか大学の数学でも基本的なことは中学と変わらないんだけどね
384デフォルトの名無しさん:2005/09/29(木) 14:24:06
>>382
配列の初期化をmemsetでやってるのは、
どのレスの辺りからの流れ?
385デフォルトの名無しさん:2005/09/29(木) 14:39:06
>>384
他スレで教えてもらいますた
たぶんゲ製作
386デフォルトの名無しさん:2005/09/29(木) 15:17:56
>>382
input関数を改良してみよう
・数字を3桁一気に入力できるように
・入力に重複があった場合、再帰的に自分の関数を呼んでるので、
 どんどんネストが深くなる(入力しだいで無尽蔵)
387デフォルトの名無しさん:2005/09/29(木) 15:26:45
>>382
・乱数系列の初期化をしていないから起動直後は毎回同じ数字になる。
・乱数を10の法で得るのはランダムネスが下がるから感心しないが……まぁいいか。
・マジックナンバーの3を散りばめ過ぎ。マクロ定数にでもしておけばinput()の修正だけで>369の言うヒット&ブローになるのに。
・馴れないうちは複文化推奨。殊にdo-whileを生で使うのは読み難いと言う弊害もある。
・make_answer()はwhileよりforの方がinput()と統一が取れてよくないか? いや、嫌なら構わんが。
・input()で末尾再帰とはいえ再帰はいかがなものかと。承知でやるなら止めないが。
・scanf()は感心しないなぁ。
・配列初期化をmemset()でやるのも……わかっててやるならいいが、わかっているかな?
・標準入力とgetch()を混ぜて大丈夫かな?
・nのみで終了か。Nだと終了しないのね。
388デフォルトの名無しさん:2005/09/29(木) 15:47:41
>・配列初期化をmemset()でやるのも……わかっててやるならいいが、わかっているかな?
詳しく!
389デフォルトの名無しさん:2005/09/29(木) 15:55:05
>>388
配列のメモリイメージを即座にイメージでき、0フィルすることで何が起きるか判断できるなら使っても医院で内科医。

但し、「取り敢えず0を埋めておけば安全だろう」という考え方は間違い。
390デフォルトの名無しさん:2005/09/29(木) 17:43:52
callocでいーじゃん
391デフォルトの名無しさん:2005/09/29(木) 20:39:58
0xDEADとか0xBEEFオススメ
392デフォルトの名無しさん:2005/09/29(木) 20:48:56
1から50までの和を表示するプログラム作ってみたんだけど、これでOK?
#include <stdio.h>

int main(void)
{
int answer;
int i;
answer = 0;
for(i=1; i<=50; i++)
{
answer = answer + i;
printf("%d\n",answer);
}
return 0;
}
これやったら答え1250になったんだけど、これであってる?
確かめる方法ある?
393デフォルトの名無しさん:2005/09/29(木) 20:56:53
50(1+50)/2よって答えは1275
たぶん…
394デフォルトの名無しさん:2005/09/29(木) 20:57:11
ヒント:階差数列
395デフォルトの名無しさん:2005/09/29(木) 20:59:58
>>394
ごめん答え言っちゃった…(´・ω・`)
396デフォルトの名無しさん:2005/09/29(木) 21:02:27
>>392
俺がそのプログラムを実行すると1275になったわけだが。
397デフォルトの名無しさん:2005/09/29(木) 21:10:29
>>393
なるほど、そういう求め方があるのですね。
>>394
階差数列・・・聞いたことないです。調べてみます。
>>396
こちらでもう一度実行してみたところ、1275でした。
どうやら見間違えたようです。

教えてくださった皆さん、ありがとうございました。
398デフォルトの名無しさん:2005/09/29(木) 21:18:01
ところでanswer = answer + i;はanswer += iと書ける。
399デフォルトの名無しさん:2005/09/29(木) 21:37:40
>>397
ヒント 数Bの教科書
400デフォルトの名無しさん:2005/09/29(木) 21:50:14
>>398
なるほど!知らなかったです。
401デフォルトの名無しさん:2005/09/29(木) 22:50:19
>>398
書けるじゃない、この場合はそう書くべき
402デフォルトの名無しさん:2005/09/30(金) 00:46:53
別にどっちでもいいよ
403デフォルトの名無しさん:2005/09/30(金) 02:40:53
ヒット&ブローというと4桁だけど
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define KETA 3
int main(void){
int i,p,v,c,n,z,a[10];
for(i=0; i<10; ++i) a[i]=-1;
srand(time(NULL));
a[z=p=rand()%9+1]=0;
for(i=1;i<KETA;) if(a[p=rand()%10]<0){ a[p]=i++; z=z*10+p;}
for(c=1;c<=10;++c){
printf("\n[%2d] >> ",c); scanf("%d",&n);
for(v=0,i=KETA-1;i>=0;--i,n/=10) v+=(a[p=n%10]==i)?10:(a[p]>=0)?1:0;
if(v==10*KETA) break;
printf("%14c## %2dH %2dB",' ',v/10,v%10);
}
printf("\n\n <<%d>>\n",z);
return 0;
}
404デフォルトの名無しさん:2005/09/30(金) 02:57:40
それでもいいと思うけど、実質初心者スレなんだから
初心者にも読める形でかいたほうがいいと思うぞ
405デフォルトの名無しさん:2005/09/30(金) 03:38:39
>・標準入力とgetch()を混ぜて大丈夫かな?
なにか問題あるの?
406デフォルトの名無しさん:2005/09/30(金) 03:44:59
>387はgetch()を知らないんだよ。
407デフォルトの名無しさん:2005/09/30(金) 04:14:52
static int ans_, usedNumber_[10];
static int getAns(void){ return ans_; }
static void unUsed(void){ int i; for(i=0; i<10; ++i) usedNumber_[i]=-1; }
static int evalUsedNumber(int p, int seq){
 if(usedNumber_[p]==seq) return 10;
 if(usedNumber_[p]>=0) return 1;
 return 0;
}
static void setAns(int p, int seq){ usedNumber_[p]=seq; ans_=ans_*10+p; }
void makeAns(void){
 int i,p;
 unUsed(); setAns(rand()%9+1, 0);
 i=1; do{ p=rand()%10; if(usedNumber_[p]<0) setAns(p, i++); }while(i<KETA);
}
int isCorrect(int cnt){
 int i,p,num,eval=0;
 printf("\n[%2d] >> ",cnt); scanf("%d",&num);
 for(i=KETA-1;i>=0;--i){ p=num%10; eval+=evalUsedNumber(p,i); num/=10; }
 if(eval<10*KETA) printf("%14c## %2dH %2dB",' ',eval/10,eval%10);
 return (eval==10*KETA);
}
void dispAns(void){ printf("\n\n <<%d>>\n",getAns()); }
int main(void){
 int cnt;
 srand(time(NULL));
 makeAns();
 for(cnt=1;cnt<=10;++cnt) if(isCorrect(cnt)) break;
 dispAns();
 return 0;
}
408デフォルトの名無しさん:2005/09/30(金) 04:21:32
>407

どうせなら setAns(), setUsedNumber(), getUsedNumber() 用意しれw
409408:2005/09/30(金) 04:27:30
...って setAns() ダブっちゃうねorz
410デフォルトの名無しさん:2005/09/30(金) 06:35:16
■参加方法
問題解きたい→どんどん解け
問題出したい→どんどん出せ!最近不足気味
採点したい→どんどんしろ
■今までに出された問題
>42 HelloWorld!を出しやがれ
>44 1から50までの和
>46 ファイルから読み込み大きい数から並べて
>52 物体が通る軌跡を求めろ
>106 まずは字句解析と行こうか
>124 神経衰弱、ブラックジャック
>125 ぷよぷよ
>126 ブロック崩し、インベーダ
>129 ジャンケンゲーム
>181 じゃぁ、1+3-5+7-9+11-13+・・・を50回
>207 ソートするプログラム
>215 スペース・タブを&nbsp;に変換
>224 次は構文解析だな
>229 HTML特殊文字をエスケープ
>236 ○×ゲームをつくれ
>331「Nullpoint」を入力したら「ッガ!!」
>367 コードブレーカー
■インデントする方法
・&nbsp;を書き込むとスペースに変換されます
・タブやスペースを&nbsp;に置換して書き込むとインデントが整います
・メモ帖・秀丸・VSなどの、エディタの置換機能を使います
▼コツ
・タブを置換したい場合はエディタ上のタブをコピーして検索窓でペーストします
・スペースはインデント単位(2,4,8個など)でまとめて置換すると単独のスペースを無視できます
・ギコナビなら自動変換機能があります。
■解答はソース丸貼りか↓にうp
ttp://gamdev.org/up/
411デフォルトの名無しさん:2005/09/30(金) 07:31:51
>124 神経衰弱、ブラックジャック
>125 ぷよぷよ
>126 ブロック崩し、インベーダ

このあたりもうちょっと分解して出題してくれないかな
412デフォルトの名無しさん:2005/09/30(金) 08:51:56
>>411
分解って、どういうこと
部品に分割してくれって事でいいのか?

リアルタイムなゲーム(>>125>>126)の基本は以下の流れとなる
スタート→オブジェクト初期化→画面表示→自分を操作→敵を移動→当たり判定→終了判定→画面表示へ戻る
413デフォルトの名無しさん:2005/09/30(金) 09:36:23
P2Pソフトの作り方おしえろ
414デフォルトの名無しさん:2005/09/30(金) 10:54:58
415デフォルトの名無しさん:2005/09/30(金) 19:08:45
>>412
ふつうのぷよぷよでは、入力に迷っている間にぷよが落ちてしまうのですが、
>>412の手順だとこちらが入力に迷っている間はぷよも動かないと思うのですが、
それでもいいのでしょうか?
416デフォルトの名無しさん:2005/09/30(金) 19:12:10
>>415
入力がないという操作
417デフォルトの名無しさん:2005/09/30(金) 19:34:05
>>416
ヒントをお願いしてもいいですか?
それは標準ライブラリで実現可能ですか?
なにかのdllが必要ですか?
418デフォルトの名無しさん:2005/09/30(金) 19:57:43
やっぱスレッド使うの?
ぷよやアルルのアニメーション、入力操作を全部別々で

そのあたりを詳しく教えてくれるとありがたいのです
419デフォルトの名無しさん:2005/09/30(金) 20:21:00
お前の現在の知能では無理
420デフォルトの名無しさん:2005/09/30(金) 20:25:29
説明できねーならカエラ
421デフォルトの名無しさん:2005/09/30(金) 20:30:17
>>417
標準ライブラリでは無理。
SDLがお手軽。
422デフォルトの名無しさん:2005/09/30(金) 20:30:19
スレッド使った方が便利な箇所もあるだろうけど、必須じゃないよ
>>412にあるような流れを、短い周期で繰り返すわけ
アニメーションなら、ループが回ってくるたびに少しずつ動かしていくし
キャラの操作なら、いま入力があるかどうかを調べてキャラを動かす(入力なければ動かさない)
423デフォルトの名無しさん:2005/09/30(金) 20:43:16
中学のときに陸上部サボってはコンピュータ部に遊びにいってたな
学校にはPC-9801があって、300ページ程度のいろいろな専門書が50冊くらいあった

それを読んでぷよぷよを四ヵ月くらいかけて作ったのを覚えてる(対戦しかできないけど
グラフィックはスーパーファミコンを持って来て一ドットづつ目視でコピー
横に並べて見てもほとんど区別付かないくらい精巧にできたよ
グラフィックが大部分をしめてFDで二枚だった(2HDか2DDかは忘れた)


今でも仕事さえ無ければ二週間で程度で作れると思うな
適当にコードが書ければ難しくないと思う
424デフォルトの名無しさん:2005/09/30(金) 20:47:34
>>417

画面表示→ちょっと待つ→入力あり→自分を操作…
   └ ←入力なし ←┘
425デフォルトの名無しさん:2005/09/30(金) 20:52:46
>>423
それって天才じゃない?
俺は理解できないエラーが出たら3日は潰れる
で、質問スレで質問して袋叩きにされる
426デフォルトの名無しさん:2005/09/30(金) 20:53:05
>>423
今の奴は>>421みたく外部ライブラリに頼り切ってるからな
自分で自分に必要なライブラリも作ろうとはしない
腐り切った世の中になったもんだ
427デフォルトの名無しさん:2005/09/30(金) 20:54:01
http://donichi.wizry.com/index.php?page=list&libpage=0&libid=A0017
ゲーム製作板にぷよぷよ作ってる人いたお
428デフォルトの名無しさん:2005/09/30(金) 20:55:07
>>425
その考えがよくないだろ
理解できないのならもう一度作り直す
これが基本
他人にきくなんかもってのほか
429423:2005/09/30(金) 21:00:04
>>425
どこが?
自分で書いてるんだから理解できないエラーなんてまず起きなかった
しかも聞ける奴なんていないから(顧問ですらコード書けない)全部自分でしなければならない
今だとネットとかで人に聞けば解決できると思ってるから、自分で考えないから何もできなくなってるのかも

>>426
そうかもな
便利なライブラリがあるなら使うけど、本当にそれが自分に必要なのか考えなきゃな
自分で作ったほうが動作が早いし扱いやすいなら自分で作るべき

430デフォルトの名無しさん:2005/09/30(金) 21:02:17
ハードウェアのためにロジックを書くのは無駄だと思うのです
どこぞのゲーム会社社員が書いたライブラリとMSが定めたAPI
どちらを選ぶかで何か得るものがあるとは思えない

欠陥だらけのAPIを修復する作業を通じて、本当にあなたは何か得たのですか?
431デフォルトの名無しさん:2005/09/30(金) 21:03:43
>>430
誰にいってんの?
誤爆か?
432デフォルトの名無しさん:2005/09/30(金) 21:05:02
>>431
敗北宣言乙
有害だから根拠のない精神論やめろ
433デフォルトの名無しさん:2005/09/30(金) 21:10:24
>>431
一人言だろ
434デフォルトの名無しさん:2005/09/30(金) 21:10:51
>>431=>>433
自作自演乙
435デフォルトの名無しさん:2005/09/30(金) 21:16:18
とりあえず、リアルタイムキー入力はWindows環境なら_kbhit()と_getch()で良いんじゃない?
Unix環境はtermio辺りだけど専門外なので詳しい人どうぞ
どっちにしてもゲーム作った人がうpするときは自分の環境も記入の事
436デフォルトの名無しさん:2005/09/30(金) 21:19:44
おまえら難しい話ばっかすんなよ!
スレ違いじゃ!
437デフォルトの名無しさん:2005/09/30(金) 21:25:25
itanium2の乗っているマシンでcのプログラムをつくっています。
gccでコンパイルしているのですが、
warningが出てコンパイルができません。
以下のようなエラーです。
warning: cast to pointer from integer of different size
引っかかっている場所は、
double *ini=(double *)malloc(sizeof(double)*1000000);
という場所です。配列iniのサイズが小さいうちは以下のように
double ini[10000]
とすれば、通るのですが、大きなメモリ領域を確保しようと
mallocを使うと上のようなエラーが出て、コンパイルできません。
調べてみると、64ビット系で起こるエラーであるということは
わかったのですが、回避の仕方がわかりません。
どなたかご存じの方がいらっしゃったらお教えください。
OSはレッドハット8でカーネルは2.4.24です。
438437:2005/09/30(金) 21:28:04
スレ違いだったら、どこにポストしたらいいかご指導頂ければと思います。
439デフォルトの名無しさん:2005/09/30(金) 21:29:07
>>437
> cast to pointer from integer of different size
440デフォルトの名無しさん:2005/09/30(金) 22:03:18
結局ぷよぷよの作り方がわからない
441デフォルトの名無しさん:2005/09/30(金) 22:05:10
>>428
目の前の問題を放棄するってことか?

>>429
勝手に考えないとか決め付けるな
442デフォルトの名無しさん:2005/09/30(金) 22:13:01
>>440
真面目につくりたいなら、ゲ製作板とかで聞いた方がいいかもなー
443421:2005/09/30(金) 22:13:04
言語の標準でない他人が作ったライブラリを使うことが腐ってる、と考えてる人がいるなんて始めて知ったよ。
SDL_GetKeyState使うのも、strcmp使うのもなにも変わらないと思うけど。
444デフォルトの名無しさん:2005/09/30(金) 22:18:26
scanf_sってどうですか
ベンダー依存になりますがこれなら使ってもいい?
445デフォルトの名無しさん:2005/09/30(金) 22:22:22
>>443
>>429
>便利なライブラリがあるなら使うけど、本当にそれが自分に必要なのか考えなきゃな
>自分で作ったほうが動作が早いし扱いやすいなら自分で作るべき

429ではないけれど、
SDLが悪いというのではなく、道具を選ぶことを怠るのが悪いと言いたいのでは?
万能包丁は便利だけどリンゴノ皮をむくには果物ナイフの方がいいかもしれないし、
サシミを切るには刺身包丁の方がいいかもしれない。
この場合の万能包丁や果物ナイフや刺身包丁の比喩のうち、
どれがSDLでどれが標準ライブラリなのか、なんて議論はナンセンスなわけで。
様々な道具がある中で何を選ぶかが問題なんじゃないかな。
そして、選ぶ時の選択肢は多い方がいいと思う。
446デフォルトの名無しさん:2005/09/30(金) 22:26:01
ちょっと待て
>>423は別にライブラリについて語ってるわけでもないのに、なんでまた>>426になるんだ?
で、なんでまたおまいらライブラリの是非について語ってるわけ?
447デフォルトの名無しさん:2005/09/30(金) 22:26:48
標準ライブラリ以外認めないなら仕事にならんぞ、Javaとか特に
448デフォルトの名無しさん:2005/09/30(金) 22:27:20
問題なのはライブラリを使うことじゃなくて、
ライブラリをブラックボックスとして使ってる人が増えたことだと思う。
中身を知らずに、分かろうとせずに使う。それが低レベル化に繋がってる。
449デフォルトの名無しさん:2005/09/30(金) 22:31:49
win32apiやcライブラリもブラックボックスなんだが
450デフォルトの名無しさん:2005/09/30(金) 22:38:36
先生!状態遷移ってどうやって管理してますか?
紙に○と→でメモしても多くなってくるとややこしくなっちゃいます
451デフォルトの名無しさん:2005/09/30(金) 22:38:59
>>449
中身は隠されているけど推察はできる。
win32apiでもCライブラリでもSDLでも推察はできる。
推察をしようとしない人が多いのが問題だといいってるんだよ。
452デフォルトの名無しさん:2005/09/30(金) 22:41:16
苦しくなってきたな
453デフォルトの名無しさん:2005/09/30(金) 22:41:27
>>451
>>426からそれは読み取れない
454デフォルトの名無しさん:2005/09/30(金) 22:44:36
>>426が、>>429>>451ではないからだろう

このスレに何人いると思ってんだ?
455デフォルトの名無しさん:2005/09/30(金) 22:46:12
VRAMやワークエリアに直接アクセスできた時代がなつかしい
そこでだ!おまえら勉強用に1チップMSXを買うっていうのはどうだ?
値段も手ごろ、資料は十分、サンプルもベーマガの歴史分だけある
しかも経験者は数百万人以上いる
今回はMSX2相当になりスロットも2つ
前回の主だった要望が全て反映されてる
BASICはもちろんZ80マシン語やハードウェアハックなど実力を養ういいチャンスだぞ
456デフォルトの名無しさん:2005/09/30(金) 22:46:59
>>454
関係ない話を始めるほうが悪い
457デフォルトの名無しさん:2005/09/30(金) 22:47:23
遠慮させて頂きます
458デフォルトの名無しさん:2005/09/30(金) 23:28:34
まぁでも、実際当時のパソコンみたいに直接ポートをアクセスできるようなイメージの方が
簡単なゲームは作りやすい罠。
グラフィックも懲りようがなかったからシンプルでよかったし。
459デフォルトの名無しさん:2005/09/30(金) 23:31:01
>>455
アクセスできないのってWindowsだけじゃないの?
460デフォルトの名無しさん:2005/10/01(土) 00:13:19
>>459
XWindowも直接はできません。
461:2005/10/01(土) 00:19:28
出遅れたが今からオレも参加する
462デフォルトの名無しさん:2005/10/01(土) 00:27:53
460はなにいっちゃってんの??
我が目を疑ったよ
463ポポ素 ◆Qgm8RFT0/. :2005/10/01(土) 00:42:01
おいらが知らない間にこのスレ大分進行してるお(^^;)

>>410
とりあえずハローワールドだけかけたよ、今はここまでがあたいの限界…

#include <stdio.h>
main()
{
printf("Hello World");
return 0;
}
どうでしょうか…
464デフォルトの名無しさん:2005/10/01(土) 00:44:08
ポポ素たん結婚して〜
465デフォルトの名無しさん:2005/10/01(土) 00:48:17
・main()ではなく、int main(void)
・"Hello World"ではなく、"Hellow World\n"
466ちぁ ◆7YYts5tb9s :2005/10/01(土) 00:48:22
>>463
この前の話聞いてなかったのか・・・ orz
そのコードは規格的には間違えてるよ・・・

コンパイラが勝手に修正してくれてるだけ・・・
467デフォルトの名無しさん:2005/10/01(土) 00:48:55
>>463
文字列の最後の'!'が抜けてる
コレ些細なようで重要
468ポポ素 ◆Qgm8RFT0/. :2005/10/01(土) 01:54:08
>>465 >>466
(;。;)
469ちぁ ◆7YYts5tb9s :2005/10/01(土) 03:53:58
入門書を読んだ後の後の人のために
こういうものはどう作ればいいのかとかそういうのを書こうと思うんだけど

例えば何を書いたらいいかな?
こういうのの解説が読みたいって人もプリーズ
470デフォルトの名無しさん:2005/10/01(土) 04:00:34
教える事もわからない人間が書くなや
471デフォルトの名無しさん:2005/10/01(土) 04:03:34
聞かれたことに答えない人間が書くなや
472デフォルトの名無しさん:2005/10/01(土) 04:06:39
>>469
ネットワークの仕組み〜winny風P2Pソフトウェア開発への布石
473デフォルトの名無しさん:2005/10/01(土) 04:09:12
>>471にワロタ
474デフォルトの名無しさん:2005/10/01(土) 04:10:59
>>472
入門書読み終わった程度の奴にソケットならまだしもP2Pはおもしがきついだろ
475デフォルトの名無しさん:2005/10/01(土) 04:21:01
>>470
大体市販の入門書っていうのは
分かる奴が分からない奴は何が分からないか調べて書くと思うぞ
そいつも分からないことはかけないだろ
476デフォルトの名無しさん:2005/10/01(土) 04:26:12
頼りない船頭だと言ってるんだろ
477デフォルトの名無しさん:2005/10/01(土) 04:28:25
頼りないと思うなら乗らなければいいだけだろ
だれも強制なんかしてないんだから
478デフォルトの名無しさん:2005/10/01(土) 04:35:36
泥舟に乗る入門書を読み終わった程度の人も大変だな
479デフォルトの名無しさん:2005/10/01(土) 04:36:55
必死だなこいつ
かつあげかなんかにあってよっぽどイライラしてるんだろうな
480デフォルトの名無しさん:2005/10/01(土) 04:37:42
>>479
自己紹介乙。
481デフォルトの名無しさん:2005/10/01(土) 04:41:13
したけどされてないぞ
482デフォルトの名無しさん:2005/10/01(土) 05:27:17
なにもしない奴よりはましだとおもうけど
483デフォルトの名無しさん:2005/10/01(土) 06:23:51
なにもしないほうがましな時もあるね。
C言語のクソ本やクソサイトは存在だけで迷惑だからなぁ…
クソコード書く人間増やすなよ…
484デフォルトの名無しさん:2005/10/01(土) 06:39:39
>>44やってみたyo

#include <stdio.h>

int main(void)
{
    int i, num = 0;

    for (i = 1; i <= 50; i++)
    {
        num += i;
        if (i != 50)
            printf("%d たす\n", i);
        else
            printf("%d は\n", i);
    }
    printf("\n%d ですた\n", num);
    return 0;
}
485デフォルトの名無しさん:2005/10/01(土) 08:48:01
#include <iostream>
int main() {
  int sum = 0;
  for (int i = 1; i <= 50; i++) {
    sum += i;
  }
  cout << sum << endl;
  return 0;
}
486デフォルトの名無しさん:2005/10/01(土) 09:01:26
時々で良いから階差数列の事、思い出してあげて下さい
487デフォルトの名無しさん:2005/10/01(土) 09:06:04
時々で良いからCとC++の違いを思い出してあげてください
488デフォルトの名無しさん:2005/10/01(土) 09:27:18
藻舞いらこれからはJavaだろ?
489デフォルトの名無しさん:2005/10/01(土) 09:32:13
そこでDelphiですよ
490デフォルトの名無しさん:2005/10/01(土) 09:32:29
int main()でreturnを通らずに関数の終わりまで到達した場合
C:
何か適当な値がreturnされる。

C++とC99:
そこにreturn 0;と書いたのと同じことになる。(main以外の関数ではCと同じ)
491デフォルトの名無しさん:2005/10/01(土) 09:33:06
Java興味あるけどここと同じようなスレある?
492デフォルトの名無しさん:2005/10/01(土) 09:33:45
Delphiはないなぁ
493デフォルトの名無しさん:2005/10/01(土) 09:35:22
過去 Java
現在 PHP
未来 Python
494デフォルトの名無しさん:2005/10/01(土) 09:37:29
C#とDは?
495デフォルトの名無しさん:2005/10/01(土) 09:46:32
俺は、C、C++を使いたいのに、
強制的にJavaだよ・・・

今は、Javaばっかりでウンザリする
496デフォルトの名無しさん:2005/10/01(土) 09:52:18
>>495
Javaでいいよ。
Cはシステム記述言語。
アプリ書きには生産性が悪すぎる。
497デフォルトの名無しさん:2005/10/01(土) 10:22:11
しかしテンプレートは使ったらもうやめられない。
498デフォルトの名無しさん:2005/10/01(土) 10:39:40
>>491
無いからやりたきゃ自分で立ててください

>>492
質問には適切に答えましょう

>>493-494
個人的には色々書きたいですが、ここはそういう事を議論する場でありません、TPOをわきまえましょう

>>495-497
そういうのはマ板行ってやってください
499デフォルトの名無しさん:2005/10/01(土) 10:47:09
Perlカワイソス
500デフォルトの名無しさん:2005/10/01(土) 12:00:35
>>498
立てたら教えてくれるの?
501デフォルトの名無しさん:2005/10/01(土) 12:59:51
次の問題まだー?
502デフォルトの名無しさん:2005/10/01(土) 13:04:37
んじゃお題。○×ゲーム。
Man vs Man が出来たら Man vs Com も。
いわゆる AI なわけだが○×の AI は割と簡単。
503デフォルトの名無しさん:2005/10/01(土) 13:08:44
504デフォルトの名無しさん:2005/10/01(土) 13:16:39
我侭かもしれませんがC言語の勉強になる問題お願いします
505デフォルトの名無しさん:2005/10/01(土) 13:17:58
>>504
勉強にならない問題ってどれよ?
506デフォルトの名無しさん:2005/10/01(土) 13:32:29
507デフォルトの名無しさん:2005/10/01(土) 13:41:04
>>504
それじゃとりあえずC言語のコンパイラを書きなさい。
508デフォルトの名無しさん:2005/10/01(土) 13:46:11
何が悪いかわかってらっしゃらないようだ
509デフォルトの名無しさん:2005/10/01(土) 13:49:12
ド素人のおいらが今から挑戦します
510デフォルトの名無しさん:2005/10/01(土) 13:56:19
わかってない人にお題を与え、
プログラムを一から書かせても、
それはCの勉強にはならんだろう。
自己の乏しい知識のみで書くのだからな。

むしろ、○×ゲームの優れたソースを示し、
それを解読・改造させるべきではないのか?
教え方が間違っているような気がする。
511デフォルトの名無しさん:2005/10/01(土) 14:18:40
ぷよぷよは大体わかったからスーパーマリオ頼む
ブロックと当たり判定どうやってんの?
512デフォルトの名無しさん:2005/10/01(土) 14:24:53
>>510
乏しい知識でソースを読んでも「わかったつもりになる」だけじゃないのか?
自分で作ったバグを自分で修正してこそ得られるものもあると思うが
513デフォルトの名無しさん:2005/10/01(土) 14:49:16
>>491
java講座を一緒に受けよう!
http://pc8.2ch.net/test/read.cgi/tech/1110180044/
514デフォルトの名無しさん:2005/10/01(土) 14:54:18
>MSX2相当
>Z80マシン語

MSX2なら8bitじゃなかろーに?
515デフォルトの名無しさん:2005/10/01(土) 14:57:50
16bitはTurboRのみ
国産RISC CPUのR800を積んだ名機でした
2+まではZ80
516デフォルトの名無しさん:2005/10/01(土) 15:08:14
>>510
プログラムは書けなきゃ意味がない。
いくら読んでも書けなきゃ何もしないのと同じ。
517デフォルトの名無しさん:2005/10/01(土) 15:10:49
自分で書いたあとに優れたソースを読むのがいいよ、たぶん
518デフォルトの名無しさん:2005/10/01(土) 15:10:50
○×とコンパイラは過去に出てるので次出して
519デフォルトの名無しさん:2005/10/01(土) 15:16:49
9月から大学でCのプログラミングの授業が
始まったんですけどついていけません・・・
誰か良い勉強方法を教えてください!
520デフォルトの名無しさん:2005/10/01(土) 15:23:30
>>519
学校辞めればいいじゃん
馬鹿は無理してやらなくていいよ
521デフォルトの名無しさん:2005/10/01(土) 16:39:16
初心者用の問題
1・200510.txt ファイルに「2005.10.01 start」を書き込むプログラムを作ってください
  「2005.10.01 start」はユーザが入力するものとします。
2・上記のファイルに書かれた「2005.10.01 start」の次の行に、
  「2005.10.30 end」を書き込むプログラムを作ってください。
  この「2005.10.30 end」もユーザが入力するものとします。
3・上記のファイルに書かれた「2005.10.01 start」と「2005.10.30 end」の間に、
  「2005.10.02 test-1」を挿入するプログラムを作ってください。
  この「2005.10.02 test-1」もユーザが入力するものとします。
4・上記のファイルに書かれたなかから、
  「2005.10.02 test-1」の行だけを削除するプログラムを作ってください。

これらのプログラムでは、実行時に複数のファイルを作成しても構いませんが、
最終的に、200510.txt に書き込み(または削除)されるようにしてください。
522デフォルトの名無しさん:2005/10/01(土) 17:21:07
初心者用の問題
三角形の各辺の長さを表す整数を入力として、
・正三角形
・二等辺三角形
・不等辺三角形
・三角形じゃねー
を判断する

[制約]
三辺の長さをパラメータとし、以下の値を返す関数を作って使う事
・正三角形なら1
・二等辺三角形なら2
・不等辺三角形なら3
・三角形じゃねーなら-1
523デフォルトの名無しさん:2005/10/01(土) 17:36:20
○×製作者への課題
・3x3に留まらず、5x5、或いは自由に設定できるように拡張せよ。
・三次元○×を考えよ。例えば4x4x4限定でもよいが、どう見せるか工夫のし甲斐があるだろう。
#実は3x3x3だと明らかにゲームを破綻させる問題がある。回避できるか検討せよ。
524デフォルトの名無しさん:2005/10/01(土) 17:37:29
>>510
どっちが早いかは人それぞれ
実践か解析していくのか好きなほうでやれば良い
525デフォルトの名無しさん:2005/10/01(土) 17:37:50
>>522
戻り値は一致する辺の数を返すのがいいんでない?
正三角形は3、不等辺三角形は1って感じで。
526デフォルトの名無しさん:2005/10/01(土) 17:44:58
>525
一致する辺の数を返す関数を作る
そいつを使って
・正三角形なら1
・二等辺三角形なら2
・不等辺三角形なら3
でいいんじゃね?
527デフォルトの名無しさん:2005/10/01(土) 17:49:30
>>525
不等辺三角形は1、って一致する辺の数かよ?
一致する辺がない != 三角形ではない のでちうい
一致する辺が2
一致する辺が3
だろ?
528デフォルトの名無しさん:2005/10/01(土) 17:49:43
先生!! 
521の1の問題はこれでいいんですか!?
スペースが出力の対象になるかが心配ですけど…
include <stdio.h>

int main(void)
{
FILE *fp;

fp=fopen("200510.txt","w");
fprintf(fp,"2005.10.01 start");
fclose(fp);
return 0;
}
529デフォルトの名無しさん:2005/10/01(土) 17:54:00
>>528
問題をよく読みましょう
ファイル名は決まってるけど、入力は任意だよ
530デフォルトの名無しさん:2005/10/01(土) 17:56:46
>>529
Σ(´□`;)すいません
出直してきます…
531デフォルトの名無しさん:2005/10/01(土) 17:57:49
>>519
授業は教える側のペースで進むから、その速度で理解できない人は当然出てくる。
だから適当に良書と言われている簡単なCの入門書を読んで自分で勉強しよう。
授業でわからなかったとことか、次にやる部分とかを中心にやれば単位も余裕でもらえるさ。
532デフォルトの名無しさん:2005/10/01(土) 18:00:40
どーでもいいけど全体を設計してから些末にこだわってくれ。
533デフォルトの名無しさん:2005/10/01(土) 18:02:30
先生!!
今度はできましたか!?
521の1
include <stdio.h>

int main()void
{
FILE *fp;
int i;

fp=fopen("200510.txt","w");
fscanf(fp,"%s",&i);
fprintf(fp,"%s",i);
fclose(fp);
return 0;
}
534デフォルトの名無しさん:2005/10/01(土) 18:08:22
↑かなり間違ってました…
スルーして下さい
535デフォルトの名無しさん:2005/10/01(土) 18:09:05
>>533 コードはコンパイラにとおして自分で動作を確認してから提出しよう
536デフォルトの名無しさん:2005/10/01(土) 18:12:35
>>535
礼儀がなってませんでした…
コンパイラDLしてきます
537デフォルトの名無しさん:2005/10/01(土) 18:14:53
>コンパイラDL

まじかよ!
538デフォルトの名無しさん:2005/10/01(土) 18:17:02
>>537
なにか間違ってましたか!!(;´д`)
539デフォルトの名無しさん:2005/10/01(土) 18:18:54
>>538
荒れるだけだからしばらく来るな
540デフォルトの名無しさん:2005/10/01(土) 18:19:07
537じゃないが、今までコンパイラなしでやろうとしてたのかと小一時間(ry
541デフォルトの名無しさん:2005/10/01(土) 18:22:07
パソコンが家にないし買えないけどプログラムの勉強をしたいって以外で、まずコンパイラを用意しないなんてことが
あり得るなんて思わなかった。
想定外。
542デフォルトの名無しさん:2005/10/01(土) 18:22:13
もう荒らしにきません。
死んできます
543デフォルトの名無しさん:2005/10/01(土) 18:27:37
>誰か良い勉強方法を教えてください!

ヒント:家庭教師
544デフォルトの名無しさん:2005/10/01(土) 18:30:02
>>527
おいおい、>522と>525をあわせれば
正三角形:3
二等辺三角形:2
不等辺三角形:1
非三角形:-1
だから辻褄は合ってるだろ?

要は、>522のように正三角形を1とするか>525のように正三角形を3とするかの違いだろ。
545デフォルトの名無しさん:2005/10/01(土) 18:36:42
546デフォルトの名無しさん:2005/10/01(土) 18:50:04
>544
"一致する辺の数"っていってるのに
 1 = 同じ長さの辺が無い
ってのが理解しがたいんだと思われ

例えば
正三角形:3
二等辺三角形:2
不等辺三角形:0
非三角形:-1
ならどーよ?
547デフォルトの名無しさん:2005/10/01(土) 19:48:19
>124 神経衰弱、ブラックジャック
>このあたりもうちょっと分解して出題してくれないかな

神経衰弱
・マーク4種(スペード/ハート/ダイヤ/クラブ)、数字13種(A,2,...,10,J,Q,K)
 の計52枚使用
・シャッフルしてテーブルに並べる。例えば13×4とする
・プレイヤーはテーブルから2枚を指定する。
 2枚の数字が同じならテーブルから取り除く(≒次に指定できなくする)
・全部取り除かれたら終了
→拡張
・複数人数で対戦できるように

ブラックジャック
・マーク4種(スペード/ハート/ダイヤ/クラブ)、数字13種(A,2,...,10,J,Q,K)
 の計52枚使用
・シャッフルして台札とする。
・プレイヤーの手札として最初に2枚配る。
・プレイヤーはもう1枚必要かどうか指定し、台札から取り出す...を繰り返す。
・手札の追加不要の場合は点数を計算し終了。
→拡張
・対CPUで対戦できるように(コインを賭けてやり取りするようにするもよし)
548デフォルトの名無しさん:2005/10/01(土) 19:50:13
>>502の○×のMan vs Manをやってみますた
初心者なのでMan vs Comとか無理ぽ'`,、('∀`) '`,、
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/944.c
549デフォルトの名無しさん:2005/10/01(土) 19:58:05
> for (i = 0; i < 3; i++){
> if (array[0][i] == 1) strcpy(line1[i], "○");
> if (array[0][i] == 2) strcpy(line1[i], "×");
> }
> for (i = 0; i < 3; i++){
> if (array[1][i] == 1) strcpy(line2[i], "○");
> if (array[1][i] == 2) strcpy(line2[i], "×");
> }
> for (i = 0; i < 3; i++){
> if (array[2][i] == 1) strcpy(line3[i], "○");
> if (array[2][i] == 2) strcpy(line3[i], "×");
> }

【常識】同じような処理をソース上で繰り返してはいけない
・ループで記述
・場合によっては関数化
550デフォルトの名無しさん:2005/10/01(土) 20:04:04
>>549
できればやり方を教えて頂ければありがたいのですが・・・
もっと短くできると思ったのですが、どうしたらいいのかわからなくて・・・
551デフォルトの名無しさん:2005/10/01(土) 20:09:39
>550
1.lineも配列の配列にする
2.二重のforループで
552デフォルトの名無しさん:2005/10/01(土) 20:13:48
>>551
ありがとうございます
さっそくやってみます
553デフォルトの名無しさん:2005/10/01(土) 20:20:13
> 【常識】同じような処理をソース上で繰り返してはいけない
誰が決めたんだ?
554デフォルトの名無しさん:2005/10/01(土) 20:21:55
誰が?
常識って"誰か"が決める事なのか?
555デフォルトの名無しさん:2005/10/01(土) 20:22:57
民意です
556デフォルトの名無しさん:2005/10/01(土) 20:24:43
>>553
・プログラムが無駄にでかくなる
・重複部分を変更する時に面倒(部分的に忘れてバグ招くこともある)
557デフォルトの名無しさん:2005/10/01(土) 20:24:46
コピペソースは悪

ヒント:動作するきれいなソースコード
558デフォルトの名無しさん:2005/10/01(土) 20:28:09
> printf("縦:");
> if (scanf("%d", &x) != 1) return 1;
:
> printf("横:");
> if (scanf("%d", &y) != 1) return 1;


...厳しすぎorz
(英文字入れると即死亡)
559デフォルトの名無しさん:2005/10/01(土) 20:35:12
>>551
短くできますた(・∀・)
ありがとうございます
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/945.c

>>558
何でだろう・・・(´・ω・`)
ウチのBccなら死亡はしないのですが・・・
560ちぁ ◆7YYts5tb9s :2005/10/01(土) 20:37:45
> 【常識】同じような処理をソース上で繰り返してはいけない
これは違うんじゃないの?
同じ処理を繰り返さないのは同意できるけど
同じような処理だと、別に書いたほうが速度的にもコード的にも良くなることもある
561デフォルトの名無しさん:2005/10/01(土) 20:40:34
>>560
コンパイラがloop unrollして最適化することもあるしな。
562デフォルトの名無しさん:2005/10/01(土) 20:40:45
同じようなって時点で共通部分があるってことだろ
そこだけでも関数化すりゃええやん
563デフォルトの名無しさん:2005/10/01(土) 20:41:12
"こともある "っつー事は例外ってことだろが?
大抵は >556
564デフォルトの名無しさん:2005/10/01(土) 20:42:02
コード的には良くないな
速度的にねらって書く人は次元が違うし
今日からCを学ぶ人には繰り返すなと言うだろ
565デフォルトの名無しさん:2005/10/01(土) 20:42:19
「同じような」という言葉が意味するところが曖昧
次からは使わないように
566デフォルトの名無しさん:2005/10/01(土) 20:45:39
>>559
疑問に思ったら自分でも相手の書いたとおりに実行してみよう。
scanf("%d",...)は、数字以外の入力があると(他の関数でその文字を引き取らない限り)
何度呼び出しても永遠にこぬ数字を待ち続けてしまう。
567デフォルトの名無しさん:2005/10/01(土) 20:46:19
>559
Error1してほすいって事だね >死亡
568デフォルトの名無しさん:2005/10/01(土) 20:46:47
>>560
荒らしは去れ
569デフォルトの名無しさん:2005/10/01(土) 20:48:40
>566
もまえ...よく嫁w
570デフォルトの名無しさん:2005/10/01(土) 20:55:03
どうやってもすぐ終了してしまう・・・
571デフォルトの名無しさん:2005/10/01(土) 20:55:07
Cだけだとマウス使えないのでWin32API使っていい?
572デフォルトの名無しさん:2005/10/01(土) 20:55:30
もれは hantei(int n)の「同じような」処理の繰り返しが気になりますたよ
>559
573デフォルトの名無しさん:2005/10/01(土) 20:58:11
>572
つーかむしろもれは hantei() で結果表示せず、呼び元ですりゃええやんって思つた
>559
574デフォルトの名無しさん:2005/10/01(土) 21:00:15
永遠にこぬ数字を待ち続けてしまう

萌えw
575566:2005/10/01(土) 21:11:58
>>569
えーと、取り敢えず>559と遡って>558は読んだけど。
576デフォルトの名無しさん:2005/10/01(土) 21:16:10
>575

> if (scanf("%d", &y) != 1) return 1;
ってなソースについての話題だということなのは読んで理解できたのか?
577566:2005/10/01(土) 21:22:37
>>576
だから、scanf()は何度呼び出しても数字以外の文字は入力できないと書いたのだけど?
578566:2005/10/01(土) 21:23:35
あー、納得。行間を読んでもらえてなかったのか。

正直すまんかった。
579デフォルトの名無しさん:2005/10/01(土) 21:24:58
はあ?「何度呼び出しても」だぁ?

だからそーゆー話題ぢゃねーってw
580デフォルトの名無しさん:2005/10/01(土) 21:27:09
あー、納得。ロジックを追う事ができてなかったのか。

正直すまんかった。
581デフォルトの名無しさん:2005/10/01(土) 21:29:56
お前ほらふき?
582デフォルトの名無しさん:2005/10/01(土) 21:30:39
>>566
scanf()の問題点を指摘するより先ず、そこがmain()ルーチンだと言うことが問題だ。
ソースくらい読んでから指摘しろ。

>>566にレスする香具師ら
釣られるな。
583デフォルトの名無しさん:2005/10/01(土) 21:34:03
さっぱりわからない・・・。
ハローワールドと1から50までの和を計算するプログラム(階差数列使ってない)
を作り終わった俺は次に挑戦するものとして妥当なものは何だろう?
584デフォルトの名無しさん:2005/10/01(土) 21:35:26
>>583
好きなものを作れ。
585デフォルトの名無しさん:2005/10/01(土) 21:36:01
>そこがmain()ルーチンだと言うことが問題だ

どんな問題だ?教えちくりくり
586デフォルトの名無しさん:2005/10/01(土) 21:36:26
ファイル操作でもいかが?
上の方に問題あったな
587デフォルトの名無しさん:2005/10/01(土) 21:38:14
>>583

>>522 なんかいいんじゃない
588デフォルトの名無しさん:2005/10/01(土) 21:38:15
>>584
好きなもの・・・えーと・・・
>>586
それだ!がんばってみます
589デフォルトの名無しさん:2005/10/01(土) 21:38:57
>>587
数学・・・知識が乏しいもので・・
590デフォルトの名無しさん:2005/10/01(土) 21:39:51
>589
どっちかっつーと小学校の算数だな
591デフォルトの名無しさん:2005/10/01(土) 21:41:25
皆様のご指摘を受けて改良しました
多くのアドバイスありがとうございましたm(_ _)m
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/946.c
592デフォルトの名無しさん:2005/10/01(土) 21:44:43
>>590
小学校かぁ・・・

そういや、テキストエディタ作れるレベルにいくのが目標だったよ・・。
それ目指して頑張ります。

文字打てて保存できるぐらいのやつ。
593デフォルトの名無しさん:2005/10/01(土) 21:44:49
>>583
>>207>>46>>215

過去問一通り見たけどファイル操作は少ないね
検索・置換と計算・ループの問題が多く傾向に偏りがある
594デフォルトの名無しさん:2005/10/01(土) 21:53:03
あんまりファイル操作って面白い話題がないんだよな...
・1〜50の和計算の応用で、ファイルに書かれた数値の和計算
・電話帳ファイルへの登録、検索 → 上級編:削除
・○×の応用:ゲームの手順をファイルに保存、後で読み込んでゲームを再生
とかどうかな?
595デフォルトの名無しさん:2005/10/01(土) 21:57:02
>>594
ファイルに書かれた数値の和を計算 をやってみます。
プログラムの流れとしては、
ファイルから読み込んだ数値を変数に代入〜
みたいな感じでやってみます。
596デフォルトの名無しさん:2005/10/01(土) 21:58:23
ポインタを使用する超超簡単な問題をお願いします
597デフォルトの名無しさん:2005/10/01(土) 22:08:33
>>521 は虫ですか
598デフォルトの名無しさん:2005/10/01(土) 22:12:04
>>592
三角形の3辺ABCは、
Aの2乗=Bの2乗+Cの2重、がなりたつ。
というのが分かれば後は何となくできるはず。ガンガレ
599デフォルトの名無しさん:2005/10/01(土) 22:19:49
>>598 ダウト。それは直角三角形だろう。
600デフォルトの名無しさん:2005/10/01(土) 22:24:06
このスレ一気にレベル高くなり杉。
もっと落としてくれよ。
601デフォルトの名無しさん:2005/10/01(土) 22:26:23
流れぶったぎって独り言
役が決まっている部分は関数化するといい。
(既出だけど)○×判定部分はgudge()とか、税金の加算なら*1.05(*105/100)はtax()とか、ファイルに保存するならsave_file()とか。
役割を洗い出す作業ができれば、C++やJavaのオブジェクト指向で綺麗にモデリングできる。
それに関数をさけることで速度低下を気にする時代は終わった。あとから単調に糞長いソースをバグ取りするのは死ぬほど面倒だし挫折する。
main()内が30行を越えるくらいになれば関数化を勧める。無理矢理する必要はないけどね。
602デフォルトの名無しさん:2005/10/01(土) 22:30:10
>>591
細かいようだけど最後の、
>もう一度やりますか?(はい= 1 / いいえ= 2)\n->
で1以外を入れたら2でなくても終了するのは直した方が良いかも。
603デフォルトの名無しさん:2005/10/01(土) 22:46:53
はい == 1 / いいえ != 1
604デフォルトの名無しさん:2005/10/01(土) 22:50:21
>役割を洗い出す作業ができれば、C++やJavaのオブジェクト指向で綺麗にモデリングできる
ウソツキ
605デフォルトの名無しさん:2005/10/01(土) 22:52:17
それでもできないよりはできるほうがはるかにましだ。
606デフォルトの名無しさん:2005/10/01(土) 22:56:02
【問題】
100,000までの素数の数とその計算にかかるコストを求めよ
もっともコストが少ない者を優勝とする
締め切りは10月2日の終わりまで

コストは次の通り(コストの計算にかかるコストは考慮しなくてよい)
1 代入
1 +-
2 */%
3 ループ
これ以外のコストは0とする

あらかじめ答えや類するものを用意するのは禁止
偶数はチェックしなくてよい
抜け道イパーイあるので実力に応じた方法でご参加ください
607デフォルトの名無しさん:2005/10/01(土) 22:57:55
>>606
せんせー
コストってなーに?
608デフォルトの名無しさん:2005/10/01(土) 22:58:18
>>606
ループにかかるコスト の定義が曖昧だなぁ。
ループ一周につき無条件でコスト3かかるのか?
途中でbreakした場合は?
条件分岐のコストは0でいいのか?
609デフォルトの名無しさん:2005/10/01(土) 23:01:55
>>606
*と/%のコストが同じなのはいかがなものか。
610デフォルトの名無しさん:2005/10/01(土) 23:09:06
>>607
+-を使った計算やa=bといった代入を使うたびに足される点数
少ないほうが勝ち
>>608
終了判定で発生
>>609
ゲームバランス考えたら落しどころかなと
611デフォルトの名無しさん:2005/10/01(土) 23:19:30
おまいら、おちつけwwww
解る奴はともかくこれじゃ初心者は何の何にレスしてるかわからんぞwww

雑談はともかくプログラムの採点の場合元のソースにレス付けろ
【>>xxxの採点】こんなのを1行目とか名前に入れてしまえ
612デフォルトの名無しさん:2005/10/01(土) 23:39:13
ジャンル:ポインタ
難易度:低
問題:aとbはそれぞれいくつになりますか?実行せずに考えてください。

#include <stdio.h>

void add1(int *a, int b)
{
    b *= 2;
    *a += b;
}

void add2(int *a, int *b)
{
    *b *= 2;
    *a += *b;
}

int main()
{
    int a, b;
    a=2;
    b=3;

    add1(&a,b);
    add2(&a,&b);

    printf("a=%d\n", a);
    printf("b=%d\n", b);

    return 0;
}
613デフォルトの名無しさん:2005/10/01(土) 23:49:31
a=14, b=6
614デフォルトの名無しさん:2005/10/01(土) 23:54:40
>>613
どうしてそうなるんですか?
手順を追って説明をお願いします
615デフォルトの名無しさん:2005/10/01(土) 23:55:41
ジャンル:ファイル
難易度:低〜中
問題:
その1:
実行回数を数えるカウンタを作ってください
初めて実行するときはファイルがないので作成し"1"を保存して終了します
2度目以降はファイルを読み込み1加算し保存します
実行するたびに2,3,4,5と増えていきます

その2:
1万回を超えたら(その1)とは別のファイルに現在の日付と時刻を書き出して
カウンタを1にもどしてください
ファイルが無い場合は新規作成し日付と時刻は次の行に追加で書き込むようにしてください

その3:
複数起動しても大丈夫なように修正してください
※OSの不具合を考慮する必要はありません
616デフォルトの名無しさん:2005/10/01(土) 23:56:12
>どうしてそうなるんですか?
実際に動かして見ろよ
まず
617デフォルトの名無しさん:2005/10/01(土) 23:59:00
>>616
612 = 614 で、613に説明つきの回答を要求してるんじゃまいか?
>実際に動かして見ろよ
問題
618デフォルトの名無しさん:2005/10/01(土) 23:59:51
>そこがmain()ルーチンだと言うことが問題だ

どんな問題だ?教えちくりくり
619デフォルトの名無しさん:2005/10/02(日) 00:06:14
再度呼ばれることなく終了するってことでそ
620デフォルトの名無しさん:2005/10/02(日) 00:33:06
おまいら、おちつけwwww
解る奴はともかくこれじゃ初心者は何の何にレスしてるかわからんぞwww

雑談はともかくプログラムの採点の場合元のソースにレス付けろ
【>>xxxの採点】こんなのを1行目とか名前に入れてしまえ
621デフォルトの名無しさん:2005/10/02(日) 01:03:06

漏れの脳内インタプリタは
a = 20
b = 12
を吐いた


バグか...orz

622デフォルトの名無しさん:2005/10/02(日) 01:06:00
>>621
俺の脳内インタプリタは>>613と同じだったな
add1のbには*が付いて無いからmainのbはadd1を抜けた時点では変わらないぞ
623デフォルトの名無しさん:2005/10/02(日) 01:09:29
俺の脳内インタプリタはエラーを吐いたよ。
処理し切れませんって。

みんな脳内インタプリタ性能よすぎ
624621:2005/10/02(日) 01:11:13
add1()から抜けるときにbの値をお持ち帰りしてたよ…
a=14,b=6になりました

625デフォルトの名無しさん:2005/10/02(日) 01:57:49
Delphi興味あるけどここと同じようなスレある?
626デフォルトの名無しさん:2005/10/02(日) 02:13:07
>>625
いまさらDelphiも無いとおもうが、自分で立てたほうが良いんじゃない?
627デフォルトの名無しさん:2005/10/02(日) 02:15:25
>>612
答えはa=14, b=6でいいんだよね。よっしゃよっしゃ。
ちょっと頭がズキズキしてきたから寝る。
628デフォルトの名無しさん:2005/10/02(日) 02:28:41
お前らが分からないことはなんだ?
ポインタくらいか?
説明書いてやるよ
629デフォルトの名無しさん:2005/10/02(日) 02:30:13
>>628
ああ。ポインタの説明書いてくれ
チラシの裏にでもな。
630デフォルトの名無しさん:2005/10/02(日) 02:31:51
>>628
ポインタのポインタの説明が欲しい

>>629
分かる人は黙ってて下さい
631デフォルトの名無しさん:2005/10/02(日) 02:41:46
>>628
ファイルポインタについての説明がほしい
632デフォルトの名無しさん:2005/10/02(日) 04:55:22
>>612
こういう問題もっとほしいです。
633デフォルトの名無しさん:2005/10/02(日) 05:50:44
俺も問題出してみる

ジャンル:型
難易度:低
問題:以下のコードは正しい結果を出力しません。間違いを指摘しなさい。

#include <stdio.h>

int main(void)
{
 //table配列の10個の要素の値の平均を求め、出力する。

 int table[] = { 16, 21, 17, 32, 24, 21, 27, 19, 24, 28 };
 int i;
 double sum = 0;

 for( i = 0; i < 10; i++ ){
  sum += table[i] / 10;
 }

 printf("%f\n\0", sum);

 scanf("%d", &i);
 return 0;
}
634デフォルトの名無しさん:2005/10/02(日) 05:52:43
お前が分からないから聞きたいだけだろ?
635デフォルトの名無しさん:2005/10/02(日) 05:54:51
>>633
整数除算してるから
636ちぁ ◆7YYts5tb9s :2005/10/02(日) 05:55:13
足しながら割ってるから外に出せばいいんじゃないの?
型の問題じゃないじゃん
637ちぁ ◆7YYts5tb9s :2005/10/02(日) 05:56:06
ごめん
そういう意味か
そういう意味で型なのか
638デフォルトの名無しさん:2005/10/02(日) 05:57:51
>>633
table[] が整数型だから?
ポインタの問題が欲しいにょろ
639デフォルトの名無しさん:2005/10/02(日) 06:00:00
sum += table[i] / 10.0;
にすればオッケーオッケー
640デフォルトの名無しさん:2005/10/02(日) 06:06:04
型変換って規格なん?
勝手にされるとかなり不便なんだけど
641デフォルトの名無しさん:2005/10/02(日) 06:06:15
毎回割ると誤差がでるから
最後に割ったほうがいいってことかな

for( i = 0; i < 10; i++ ){
 sum += table[i];
}
sum /= 10;
642デフォルトの名無しさん:2005/10/02(日) 06:06:42
stdio.hを見るとファイルポインタは構造体で、現在のシーク位置や
読み書きの挙動を決定するフラグが入ってるっぽい。
なんとsizeof(FILE) == 32
643デフォルトの名無しさん:2005/10/02(日) 06:09:23
>>640
double d;
d = 1;
error: 整数を実数型に代入することはできません。
とか言われたらそれはそれでいやだが。
644デフォルトの名無しさん:2005/10/02(日) 06:10:50
>>643
なんで?
勝手に変換するからできないだけで、変換しないようにすれば普通に代入できると思うけど
645デフォルトの名無しさん:2005/10/02(日) 06:11:24
>>643
その場合はキャストされないと代入されるかと。
646デフォルトの名無しさん:2005/10/02(日) 06:11:35
>>644
ん、整数と実数の内部表現はだいぶ違うよ。
647デフォルトの名無しさん:2005/10/02(日) 06:13:54
うわぁ〜〜〜〜〜〜〜〜〜〜〜
あいたたたたたたた
648デフォルトの名無しさん:2005/10/02(日) 06:15:51
奥が深けぇ〜
聞いてるだけで勉強になった
649デフォルトの名無しさん:2005/10/02(日) 06:17:05
>>647
痛かったら我慢しないで救急車呼んだほうがいいにょろ
650デフォルトの名無しさん:2005/10/02(日) 06:57:38
>>615
その1出来たヽ(・∀・)ノ
でもその3全然わかんねー
perlならファイルロックすればいいけどC言語にそんな命令あったっけ?
#include <stdio.h>

int main()
{
    FILE *fin, *fout;
    int counter;
    char *filename="counter.txt";

    //ファイルを読み込むか、無ければカウント数を1にセット
    fin=fopen(filename, "r");
    if (fin!=NULL)
    {
        fscanf(fin, "%d", &counter);
        fclose(fin);
        counter++;
    }
    else
    {
        counter=1;
    }

    //カウント数をファイルに書き込む
    fout=fopen(filename, "w");
    fprintf(fout, "%d", counter);
    fclose(fout);

    return 0;
}
651ポポ素 ◆Qgm8RFT0/. :2005/10/02(日) 07:28:00
みんなすごいね
スレ主のはずのあたいはぜんぜんついていけず…(∵)
652ちぁ ◆7YYts5tb9s :2005/10/02(日) 07:42:06
なんかあたらしくかいたの??
653 ◆cR08PK3l1o :2005/10/02(日) 07:43:07
test
654 ◆cR08PK3l1o :2005/10/02(日) 07:44:00
age
655デフォルトの名無しさん:2005/10/02(日) 07:48:13
ポポ素たん結婚してお
656デフォルトの名無しさん:2005/10/02(日) 08:30:34
>>642
処理系依存だからFILE構造体の中は触っちゃダメ。

>>633
・この程度の平均処理なら、sumはintでいいね。
・printf()は%fを使う人が多いけど、寧ろ%g推奨。%fは不必要に小数点以下6桁まで出てしまう。
・文字列リテラルに"\0"を含めることは(意図的に利用する場合を除き)無意味。
・配列の要素数は人間が数えるべきじゃないし、コンパイラは既に知っている。
・ましてループが終わった段階ではループ制御変数がまさしくその値になっている。
よって、>633の場合こうなる。
--
int table[] = ...;
int i;
int sum = 0;
for (i = 0; i < sizeof(table) / sizeof(*table); ++i) {
sum += table[i];
}
printf("%g\n", (double) sum / (double) i);
/* 要素数を取得するのに毎度毎度sizeofの割り算をするのがいやならマクロを組むといい */
--
尚、C++ではこんなコード書いてたらダメ。
657デフォルトの名無しさん:2005/10/02(日) 09:09:01
658デフォルトの名無しさん:2005/10/02(日) 11:04:25
>>615の3は排他処理のこと?
flock版を作ったけど、もしかして意味間違ってる…?
659デフォルトの名無しさん:2005/10/02(日) 12:04:53
>>657
このアップローダ形式って今は見られるし見やすいとは思うんだけど、例えば過去ログ落ちして
アップローダから削除もされると情報として無価値になってしまわない?
現在進行形で見てる人だけでいいならそれでも構わないけど、わりと有用なスレになってるし
ここに直接プログラムを書いたほうが後々のことを考えるといいかも。
660デフォルトの名無しさん:2005/10/02(日) 12:14:09
>>615の解答(>>657を転載)

#include <stdio.h>
#include <time.h>

int read_count(const char *filename)
{
    FILE *fin;
    int counter;

    //ファイルを読み込むか、無ければカウント数を1にセット
    fin=fopen(filename, "r");
    if (fin!=NULL)
    {
        fscanf(fin, "%d", &counter);
        fclose(fin);
        counter++;
    }
    else
    {
        counter=1;
    }
    return counter;
661デフォルトの名無しさん:2005/10/02(日) 12:14:40
void write_count(const char *filename, const int counter)
{
    FILE *fout;

    //カウント数をファイルに書き込む
    fout=fopen(filename, "w");
    fprintf(fout, "%d", counter);
    fclose(fout);
}

void write_log(const char *logfilename)
{
    //日付と時刻をファイルに書き込む
    FILE *fout;

    time_t    now;
    struct tm    *tm_now;
    char buf[80];

    now = time(NULL);
    tm_now = localtime(&now);
    sprintf(buf, "%d/%d/%d - %d:%d:%d\n",
        tm_now->tm_year+1900, tm_now->tm_mon, tm_now->tm_mday,
        tm_now->tm_hour, tm_now->tm_min, tm_now->tm_sec);

    fout=fopen(logfilename, "w+");
    fprintf(fout, buf);
    fclose(fout);
}
662デフォルトの名無しさん:2005/10/02(日) 12:15:12
int main()
{
    const char *filename="counter.txt";
    const char *logfilename="log.txt";
    int counter;

    counter=read_count(filename);

    if (counter > 10000)
    {
        write_log(logfilename);
        counter=1;
    }

    write_count(filename, counter);


    return 0;
}

663デフォルトの名無しさん:2005/10/02(日) 12:21:00
>>660-662で全部です
>>615その2に対する解答です
採点よろしくお願いします

その3がわからないのでヒントをお願いします
ファイルロックの問題とは思いますが手元の本(K&R)には
そういった命令が見当たりません(今読み返してる最中です)
664デフォルトの名無しさん:2005/10/02(日) 12:33:50
>>612
add1の関数内では
a=8
b=6
になる
aはポインタだからmainでも計算結果が残る
bはコピーされた別の変数だから残らないので
add1が終わったmain関数ではa=8,b=3

add2の関数内ではa=14,b=6
両方ポインタだからmainの変数も内容が変わる

答えはa=14,b=6
665デフォルトの名無しさん:2005/10/02(日) 12:34:31
ファイルに何か記号を書き込み、実行ファイル終了時にそれを消すとか変えるとかすればいいのでないのかな
そして、記号があるときは他からは書き換えられないようにすればいいのでないのかな
素人考えだけど
666デフォルトの名無しさん:2005/10/02(日) 12:41:51
他から書き換えられないようする方法がわからないです
667デフォルトの名無しさん:2005/10/02(日) 13:06:05
他から書き換えられても別に問題ないだろ
要はロックできるかどうかだろ
668デフォルトの名無しさん:2005/10/02(日) 14:07:15
標準Cにロックの関数とかはないから、
Windowsなら#include <windows.h>でLockFile
UNIXならlockf (fcntl)なりflock
669デフォルトの名無しさん:2005/10/02(日) 16:27:34
flock(fileno(fp), LOCK_EX);
これですか?lockfだとundefined functionエラーがでてしまいました
670デフォルトの名無しさん:2005/10/02(日) 17:11:46
んな環境依存な方法使わんでもロックくらいできるだろうに。
671デフォルトの名無しさん:2005/10/02(日) 17:24:12
そりゃ初耳だ
672デフォルトの名無しさん:2005/10/02(日) 17:26:19
ロックファイル作ってもできるが、強制終了後に残ったゴミの
処理とか、よけいめんどい。
673デフォルトの名無しさん:2005/10/02(日) 20:21:47
ファイルのパーミッション落としたら?
674デフォルトの名無しさん:2005/10/02(日) 20:26:01
>>673
異常終了した時の事を考えたらパーミション変更は得策じゃないな
675デフォルトの名無しさん:2005/10/02(日) 20:45:51
Windowsだったらどうするの。
676デフォルトの名無しさん:2005/10/02(日) 21:07:43
関数化してください。

http://briefcase.yahoo.co.jp/light_blue_8671
問題はいってます
677デフォルトの名無しさん:2005/10/02(日) 21:40:43
>>676
宿題は宿題スレへ
678デフォルトの名無しさん:2005/10/02(日) 21:41:24
>>676
マルチの宿題ですのでスルーします( ノ゚Д゚)ヨッ!
679デフォルトの名無しさん:2005/10/03(月) 00:14:37
燃料投下。

問題。
  文字列を受け取って、その並びを逆順にして返す関数を書きなさい。

簡単すぎ?
680デフォルトの名無しさん:2005/10/03(月) 00:31:54
問題
数字の文字列を受け取って、3桁区切りに','カンマを付けた文字列を返す関数を書きなさい

簡単杉?
681デフォルトの名無しさん:2005/10/03(月) 00:45:22
なんで自分が分からないことを問題と言うことにして投げてくんの?
682デフォルトの名無しさん:2005/10/03(月) 00:55:31
>>679
文字列を受け取って逆順という事で、以下の手順
1.受け取った文字列の先頭と最後の文字を入れ替える、
2.2文字目と最後から2文字目を入れ替える
3.上記を文字列の真ん中まで繰り返す。(※最後まで繰り返すと元に戻るので注意)

>>680
intの範囲に限定すると、表現できる数値は2^31〜-2^31の範囲(2147483648)で10桁、符号用に1桁、カンマが3回入るのでchar out[15]で宣言すればよい
あとは、3桁ずつ割った余りを後ろから順に割り当てていけば良い
1.1000で割った余りをout[12]から出力(右詰、商が0で無いなら"0"埋め)
2.1000で割った商が0でないなら、out[11]にカンマを出力
以下適当に
683デフォルトの名無しさん:2005/10/03(月) 01:01:30
実は >680 は >679 を使うと良いらしい...
684デフォルトの名無しさん:2005/10/03(月) 04:48:05
sleep(5);
というところで
implicit declaration of function `sleep'
というウォーニングがでるのですがなぜですか?
685デフォルトの名無しさん:2005/10/03(月) 04:50:43
>>684
OSは?
686684:2005/10/03(月) 04:53:34
知合いにプログラミングをしたいといって全ての環境を(パソコンもふくめ)用意してもらったので分からないのですが
unameすると、Open-BSD_Model-MA となります
多分その友達がOpenBSDに手をいれたものだと思います
687デフォルトの名無しさん:2005/10/03(月) 04:55:22
>>686
#include <unistd.h>
しても出る?
688684:2005/10/03(月) 04:59:04
>>687
それででなくなりました
ありがとうございました

でもなんでウォーニングがでるだけでヘッダが無いのにエラーがでないんですかね?
689デフォルトの名無しさん:2005/10/03(月) 05:00:54
英語読む気は無いの?
690684:2005/10/03(月) 05:03:55
sleepの機能の暗黙の宣言がありません
でいいでしょうか?

どうかいしゃくしたらいいかわからない・・・
691デフォルトの名無しさん:2005/10/03(月) 05:05:13
なんで環境作ってもらった人に聞かないの?
カーネルとかOSに手を入れれる人だからかなりの腕の持主だと思うけど
692デフォルトの名無しさん:2005/10/03(月) 05:06:44
>>688
libcはリンクされてるからヘッダがなくても呼び出すことはできる。
コンパイル時に引数の数や型のチェックされないけど。
693684:2005/10/03(月) 05:10:32
>>691
その人はなんか自分で使うものは自分で作るのが一番とかいって
OSも自分で作ったりしてるマニアです
あんまり喋ったりしたくありません。
それにプログラミングで分からないことは自分で考えて解決するべきで
数日考えても分からない箇所以外は聞くなといわれています

>>692
そうですかわかりませんけどありがとうございました
694デフォルトの名無しさん:2005/10/03(月) 05:10:40
>>680 へたくそですが作ってみますた

#include <stdio.h>

void reverse(char str[], char tmp[]){
int i, j, k = 0;
for (i = 0; str[i] != '\0'; i++);
for (j = i - 1; j >= 0; j--, k++)
tmp[k] = str[j];
tmp[k] = '\0';
}
695デフォルトの名無しさん:2005/10/03(月) 05:11:20

void insert_comma(char tmp[], char ans[]){
int i = 0, j = 0, cnt = 0;
while(tmp[i] != '\0'){
if (cnt == 3){
ans[j] = ',';
j++;
cnt = 0;
continue;
}
ans[j] = tmp[i];
i++;
j++;
cnt++;
}
ans[j] = '\0';
}
696デフォルトの名無しさん:2005/10/03(月) 05:11:51

int main(){
char str[250], tmp[250], ans[500], ans2[500];
gets(str);
reverse(str, tmp);
insert_comma(tmp, ans);
reverse(ans, ans2);
puts(ans2);

return 0;
}
697デフォルトの名無しさん:2005/10/03(月) 05:13:17
>あんまり喋ったりしたくありません。
お友達嫌われたもんだなw
698ちぁ ◆7YYts5tb9s :2005/10/03(月) 05:25:17
ワロタヨーーーーーーーーーーー

>その人はなんか自分で使うものは自分で作るのが一番とかいって
自分の手料理が一番っていってるとあんまり変わらないと思うけど
何がご不満?
699デフォルトの名無しさん:2005/10/03(月) 05:38:55
OS作るのが手料理か
700デフォルトの名無しさん:2005/10/03(月) 05:39:55
三分間ハッキング
701デフォルトの名無しさん:2005/10/03(月) 05:42:55
>>698
丁度いい、朝飯にWindows互換OSでも作ってくれ。
702ちぁ ◆7YYts5tb9s :2005/10/03(月) 05:46:02
ごめん、作る手間じゃなくて
自分が好きなように、自分が必要なものを作るっていういみでは似たようなものっていいたかったんだけど・・・
703デフォルトの名無しさん:2005/10/03(月) 05:51:16
>>702
だからOS作るのは手料理みたいなもんなんだろ?えらいひとなんだねえ
704デフォルトの名無しさん:2005/10/03(月) 05:53:44
俺も今年の四月から週末二日をほぼ毎週ログハウス作りにかよってる
息子(12才)、娘(9才)と嫁を連れて行くのが楽しみで仕方が無い
息子の友達の家族とかもよんだりして楽しいよ

丸太っていうのが阿呆みたいに高いけど自分が好きなように、自分の作りたいように作るっていうのは
非常に素晴しい

あ…
これは関係ないか… ごめん
705デフォルトの名無しさん:2005/10/03(月) 05:57:04
>>703
俺もそう思ってるけど何が不満なんだ?
706デフォルトの名無しさん:2005/10/03(月) 05:58:22
不満?とんでもない関心してるだけですよ?
707デフォルトの名無しさん:2005/10/03(月) 05:58:37
>>704
おっさんだな
708デフォルトの名無しさん:2005/10/03(月) 06:00:08
このスレッドは簡単なOSも作れない程度の人間のためのものだからな
709デフォルトの名無しさん:2005/10/03(月) 06:02:35
>>708
今日からC言語を学んでいくぞーという人にOS作れと言うのはちょっとねー
710デフォルトの名無しさん:2005/10/03(月) 06:11:28
>>708
作れるって言うならOracleやPowerPointの動くOS作ってよ。話はそれからだ。
711デフォルトの名無しさん:2005/10/03(月) 06:22:37
なに?
このばか
712デフォルトの名無しさん:2005/10/03(月) 06:26:25
車輪の再発明をしないことこそ学ぶべきだな。
性能の劣る再発明ならなおさら。
713デフォルトの名無しさん:2005/10/03(月) 06:28:43
こいつも阿呆だな
714デフォルトの名無しさん:2005/10/03(月) 06:30:45
とりあえずOS作ってみてよ。誰も使わないジコマンOSをさww
715デフォルトの名無しさん:2005/10/03(月) 06:41:11
そりゃ自分が使いやすいように作ったら
自己満足のOSになる罠

あほなのか?
716ちぁ ◆7YYts5tb9s :2005/10/03(月) 06:46:57
>>714
君が何のOSを使ってるかはしらないけれど
君なりにいろいろディレクトリの配置とか決めてるんじゃないの?
それが自分が使いやすいようにって事
他人がその環境を使って使いやすいと思うとは限らないでしょ?
717デフォルトの名無しさん:2005/10/03(月) 07:58:31
>>679
#include <stdio.h>

void reverse(char *str)
{
    if (str[0]==NULL)
        return;
    else
        reverse(&str[1]);
    
    printf("%c", str[0]);
}

int main()
{
    char *str="vip quolity";
    reverse(str);
    return 0;
}
718デフォルトの名無しさん:2005/10/03(月) 08:06:33
>逆順にして返す 返す
719デフォルトの名無しさん:2005/10/03(月) 08:13:31
>>717
再帰は遅いしCRTリンクを必然にしてしまうからあんまり感心しない。
大体にそれは逆順にstdoutに出力してるだけ。文字列の反転じゃないじゃん。

おもいっきし愚直に書けばこうかな。

#include <string.h>

void strrev(char *str)
{
  char* p1 = str;
  char* p2 = str + strlen(str) -1;
  char tmp;
  while (p1 < p2) {
    tmp = *p1;
    *p1 = *p2
    *p2 = tmp;
    p1++;
    p2--;
  }
}
720デフォルトの名無しさん:2005/10/03(月) 08:16:19
こうか
#include <string.h>
char* strrev(char *str)
{
  char* p1 = str;
  char* p2 = str + strlen(str) -1;
  char tmp;
  while (p1 < p2) {
    tmp = *p1;
    *p1 = *p2
    *p2 = tmp;
    p1++;
    p2--;
  }
  return *str;
}
721デフォルトの名無しさん:2005/10/03(月) 08:17:55
>>680
#include <stdio.h>
#include <string.h>

void kanma(char *str)
{
    if (str[0]==NULL)
        return;

    if ((strlen(str)%3)==0)
        printf(",");

    printf("%c", str[0]);

    kanma(&str[1]);
}

int main()
{
    char *str="1234567890";

    kanma(str);

    return 0;
}
722デフォルトの名無しさん:2005/10/03(月) 08:20:33
CRTリンクって何?
723デフォルトの名無しさん:2005/10/03(月) 08:27:36
>>722
VC++なんかだとATLプロジェクトの利用でCランタイムをリンクしない小さなバイナリが吐けるの。
再帰コールはCランタイムによって提供される機能だから、必然的にCRTが必要になる。
724デフォルトの名無しさん:2005/10/03(月) 08:28:10
>>719
ポインターミズレー。
配列使えよ。
725デフォルトの名無しさん:2005/10/03(月) 08:31:50
>>723
よくわかりました
ありがとうございます
726デフォルトの名無しさん:2005/10/03(月) 08:43:07
>>723
再帰なんてコンパイラはただの関数呼び出しのコードを吐けばいいだけだからCRTは関係ないだろ。
727デフォルトの名無しさん:2005/10/03(月) 08:46:23
日本語も反転できるようにしてみた。

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

#define BUFFER 256
#define MBMAX 2

void reverse(char *dest, const char *src)
{
wchar_t wbuf1[BUFFER], wbuf2[BUFFER];
int i, j;
size_t len;
mbstowcs(wbuf1, src, BUFFER);
len = wcslen(wbuf1);
for (i = len - 1, j = 0; i >= 0; i--, j++)
wbuf2[j] = wbuf1[i];
wbuf2[j] = L'\0';
wcstombs(dest, wbuf2, BUFFER);
}
728デフォルトの名無しさん:2005/10/03(月) 08:48:36
int main(void)
{
char buf[BUFFER];
setlocale(LC_ALL, "");
fgets(buf, BUFFER - 1, stdin);
buf[strlen(buf) - 1] = '\0';
reverse(buf, buf);
puts(buf);
return 0;
}
729デフォルトの名無しさん:2005/10/03(月) 08:57:39
>>727-728
はじめからワイド文字入出力を使えよ。
730デフォルトの名無しさん:2005/10/03(月) 09:28:11
>>723
crtって何
731デフォルトの名無しさん:2005/10/03(月) 09:34:22
>>726
だから、その吐き出した再帰コール関数をサポートするのがCランタイムライブラリなの。

Schemeみたいに見た目上再帰をサポートするものでも実行時にループに展開する言語処理系もあるし
再帰がまったく実現できないものもある。

アセンブラで再帰呼び出しができるか試してみたら?
732デフォルトの名無しさん:2005/10/03(月) 09:35:06
>>730
C RunTime library
733デフォルトの名無しさん:2005/10/03(月) 09:45:13
>>731
コンパイルしてアセンブリソースをダンプしてみたけど、再帰関数に直接CRTが関わってる箇所は一個もないんだが・・・
どこに使われてるの?

>アセンブラで再帰呼び出しができるか試してみたら?
特にできなくなる理由が見あたらないんだけど・・・

教えてエロい人
734デフォルトの名無しさん:2005/10/03(月) 10:25:42
>>730
ようするにprintfとかの標準関数の本体が入っていると思えばいい。
735デフォルトの名無しさん:2005/10/03(月) 10:30:39
>>731
サポートなんて必要ないの。
アセンブラでも再帰呼び出しは普通の関数呼び出しと同じようにできる。
なぜか?やることは普通の関数呼び出しと何も変わらないからに決まっている。

ちなみに再帰をループにするのはC/C++でも行われることもあるが、それは最適化の問題でコンパイラの仕事。
736デフォルトの名無しさん:2005/10/03(月) 11:02:16
関数スタックフレーム作成にCランタイム必要なんてのはi8080/Z80のCコンパイラ位しかみたことない
737デフォルトの名無しさん:2005/10/03(月) 12:28:41
CRTCRTうsるせー。そんな言葉知るか!!!!111
738デフォルトの名無しさん:2005/10/03(月) 12:46:08
crtはOSとプログラムのインターフェースだから
「そんな言葉知るか」という発言を聞くと、ああ
「インターフェースを軽視するのだから単体で動くプログラムしか書いたことがないのだな」
と考えてしまう
739デフォルトの名無しさん:2005/10/03(月) 13:13:18
>>738はCRT分かってる?
分かってるような肝するが分かってないような着もする
740デフォルトの名無しさん:2005/10/03(月) 13:15:56
>>694

> void reverse(char str[], char tmp[]){
> 以下略

この関数に関してはちゃんと動いてるっぽい。
気になる点は、まず仮引数の名前。どっちが入力でどっちが出力なのかが
分かりやすい名前だとありがたい。

それから、仮引数の順番。これは単なる私の好みなのかもしれないけど、
出力となるほうを左に持って来て欲しい。なぜそうして欲しいかと言うと、
引数の戻り値として結果を返す関数とかでも、結果の型を知ろうとすると、
当然左側に目が行くし、代入文だって右から左に入れるっていうイメージだから。

以上2点を踏まえている >>727 さんの、

> void reverse(char *dest, const char *src)

は、非常に読みやすい。const が付いてるので、
「ああ、この関数では、src が示すメモリの中身は変更しないんだな」と、
はっきりさせてくれている点もすごくいい。
741デフォルトの名無しさん:2005/10/03(月) 13:49:13
今思ったんだけど、プログラミング言語ってconstをデフォルトにしたほうがいいんじゃないか?
742デフォルトの名無しさん:2005/10/03(月) 13:52:43
>>741
ソレダ!
743デフォルトの名無しさん:2005/10/03(月) 15:39:54
>>741-742
そこで関数型言語ですよ
744デフォルトの名無しさん:2005/10/03(月) 15:59:51
何言ってるかさっぱりなんですが
745デフォルトの名無しさん:2005/10/03(月) 16:26:24
次の問題おねがいします
746デフォルトの名無しさん:2005/10/03(月) 16:33:56
あ゛あ゛あ゛あ゛あ゛あ゛あ゛あ゛
ポインタを使う利点や意味がわかんねえああああ
ポインタが何かは理解できたが
使わんでもええやん!
ポインタ使わないとCを理解してないとか言われたし
どーなん!?
747デフォルトの名無しさん:2005/10/03(月) 16:36:57
>>746
ポインタを使わないでできることをポインタを使わないだけなら寧ろよく理解できているのではないかと。
ポインタを無闇と使うことこそ理解が足りてないと思う。
748デフォルトの名無しさん:2005/10/03(月) 16:51:28
全部ポインタにしなくていいんだ・・・
よかったありがとうさんきゅう!
749デフォルトの名無しさん:2005/10/03(月) 17:04:12
cの関数における引数は、すべて値渡しだから、
下位関数側で値を設定する引数はすべて引数のポインタを渡さなければならない
ということが理解できていれば充分だよ
750デフォルトの名無しさん:2005/10/03(月) 17:19:56
でも他人のソースを読む場合は、ポインタを駆使してるものがあったりするから困るね。
751デフォルトの名無しさん:2005/10/03(月) 17:21:07
必要な機能を実現するために使っているのか、処理を最適化する為に使っているのか見極められれば完璧
752デフォルトの名無しさん:2005/10/03(月) 17:28:01
ポインタ謎い
調べれば調べるほど謎い

数値を受け取った関数は、
それを元に計算して、戻り値として返す。

「しかし変数の中身を直接変更したい場合に困る」

この変数の中身を直接変更しなきゃならない場合がわからない・・・。

あーもうわかんね!
753デフォルトの名無しさん:2005/10/03(月) 17:30:10
あー
関数内から呼び出し側の変数を操作したい時・・かな?
すっごい連投すんまそヒマだったらこの馬鹿めにかみくだいてポインタを・・・
754デフォルトの名無しさん:2005/10/03(月) 17:33:27
自己理解してきた・・・
755デフォルトの名無しさん:2005/10/03(月) 17:35:49
簡単なポインタの問題おねがいします
756デフォルトの名無しさん:2005/10/03(月) 17:39:04
>>755
散々書き込んでなんだが

ttp://homepage3.nifty.com/mmgames/c_guide/

ここで結構理解できたありがとうここの人
757デフォルトの名無しさん:2005/10/03(月) 17:39:04
【問題】
4つの<>で区切られた5つのデータがあります
(※データに<や>は含まれますが<>は含まれません)
左から名前、メールアドレス、日付、本文、タイトルです
タイトルは1行目だけに含まれています。
それぞれの長さはわかりません。0文字以上です。
これがたくさんあります(大抵は1001行以下ですが超えることもあります)

これをHTMLに整形してもらいます
全体の一番初めは<html><body>です
タイトルを<h1>(タイトル)</h1>で囲みます
整形済みのデータが複数行並びます
最後に</body><html>を入れます

次に1行ごとの整形方法を示します
(行数):<font color=green>(名前)</font>(日付)<br>(本文)<br>
これを行数分だけ繰り返します

最後に拡張子をhtmlで保存して完成です
元になるデータが入ったファイルはこちらです
http://pc8.2ch.net/tech/dat/1127501670.dat

整形後の例)
<html><body>
<h1>おまいら!今日からC言語を学んでいくぞー!</h1>
1 :<font color=green><b>ポポ素 </b>◆Qgm8RFT0/. <b></b></font>:2005/09/24(土) 03:54:30<br>あたいのスペックは <br>
26歳フリーター、パソコン歴インターネット歴は6年 <br>しかしそれ以外の事は何もできにゃーい… <br>
</body><html>
758デフォルトの名無しさん:2005/10/03(月) 17:56:51
(´・ω・`)
759デフォルトの名無しさん:2005/10/03(月) 18:06:33
一行の長さがどれくらいになるのかわからないファイルを読んで
処理するのは、すごくむずかしいです。
760デフォルトの名無しさん:2005/10/03(月) 18:25:08
ヒント:realloc、線形リスト
761デフォルトの名無しさん:2005/10/03(月) 18:32:30
【問題】何が表示されるでしょうか?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
    typedef struct seiseki_tag
    {
        int no;
        struct seiseki_tag *next;
    } seiseki;
    seiseki *head=NULL;
    seiseki *pos, *prev;
    int i;
    head=(seiseki*)malloc(sizeof(seiseki));
    pos=head;
    for (i=0 ; i<10 ; i++)
    {
        prev=pos;
        pos=(seiseki*)malloc(sizeof(seiseki));
        pos->no=i;
        pos->next=NULL;
        prev->next=pos;
    }
    pos=head->next;
    while(pos!=NULL)
    {
        printf("%d\n", pos->no);
        pos=pos->next;
    }
    return 0;
}
762デフォルトの名無しさん:2005/10/03(月) 18:33:19
>>14の無料のやつ落したけど、
そもそも使い方がわかりません。コンパイルしたら
Error test01.rc 1 10: Cannot open file: stdio.h
とか言われる……。設定の仕方が悪いのかな。
こういう初歩の初歩みたいな質問はどこでやったらいいんでしょうか……
763デフォルトの名無しさん:2005/10/03(月) 18:34:15
一度に何個も出題するな
764デフォルトの名無しさん:2005/10/03(月) 18:36:55
>>762
そんな質問するなよ。
付属の説明や解説サイト見ればできるようになっている。
765デフォルトの名無しさん:2005/10/03(月) 18:38:36
>>762
だからreadmeを嫁とあれほd(ry
766デフォルトの名無しさん:2005/10/03(月) 18:41:02
>>764-765
readmeは読んだyo! 読んでもわかんないんだyo!
解説サイトって何処ですか?
767デフォルトの名無しさん:2005/10/03(月) 18:43:43
>>766
じゃあバカでも使えるコンパイラ買って来いや
768デフォルトの名無しさん:2005/10/03(月) 18:49:06
http://www.microsoft.com/japan/msdn/vstudio/2005/express/visualc/
バカが使えるかどうかは知らんが無料ダウンロード可能
マイクロソフトが勉強するのに使えって言ってるからこれでいいんじゃね
769デフォルトの名無しさん:2005/10/03(月) 18:54:34
770デフォルトの名無しさん:2005/10/03(月) 19:01:23
お前ら宿題がネタだとなぜわからないかな
771デフォルトの名無しさん:2005/10/03(月) 19:02:26
ジャンル:ポインタ
難易度:低
問題:このプログラムには2箇所間違いがある
画面に2と表示されるように修正しなさい

#include <stdio.h>

int main()
{
    int *a;
    int b=1;

    a=b; //間違い1
    b++;
    printf("%d", a); //間違い2

    return 0;
}
772デフォルトの名無しさん:2005/10/03(月) 19:11:48
( ´D`)ノ<アーイ
773デフォルトの名無しさん:2005/10/03(月) 19:14:51
#include <stdio.h>

int main()
{
int *a;
int b=1;

a = &b;
b++;
printf("%d", *a);

return 0;
}
774デフォルトの名無しさん:2005/10/03(月) 19:23:03
#include <stdio.h>

int main()
{
    int *a;
    int b=1;

    /* a=b; */
    b++;
    printf("%d", b);

    return 0;
}
775デフォルトの名無しさん:2005/10/03(月) 19:24:55
>>767-768
初心者捕まえてバカバカ言うことないだろー
いじわるーヽ(`Д´)ノ ウワァァン!!
776デフォルトの名無しさん:2005/10/03(月) 19:37:32
>>773
正解
問題の題意を汲み取った完璧な回答です
100点

>>774
正解
出題者の想定してなかった意外な回答です
120点
777デフォルトの名無しさん:2005/10/03(月) 20:14:50
>>757
1行目にタイトルが含まれていないんですけど・・(´・ω・`)
778デフォルトの名無しさん:2005/10/03(月) 20:38:41
>>777
ポポ素 </b>◆Qgm8RFT0/. <b><><>2005/09/24(土) 03:54:30 <> あたいのスペックは <br
> 26歳フリーター、パソコン歴インターネット歴は6年 <br> しかしそれ以外の事は何もでき
にゃーい… <br> というわけで今日から参考書を買ってがんばります! <br> 今まさに私み
たいに、これからCを勉強するぞって人いたら
<br> よろしくね <>おまいら!今日からC言語を学んでいくぞー!
          ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
あるじゃん
779デフォルトの名無しさん:2005/10/03(月) 20:42:29
>>775
初心者という単語をバカの免罪符にされてはかなわんな
780デフォルトの名無しさん:2005/10/03(月) 20:44:55
>>775
ばーかばーかm9(^Д^)プギャー
781デフォルトの名無しさん:2005/10/03(月) 21:40:11
ガキ臭い
782デフォルトの名無しさん:2005/10/03(月) 22:29:29
#include <stdio.h>
int main(void)
{
printf("775は馬鹿ですw");
return 0;
}
//勉強になったろ?
783デフォルトの名無しさん:2005/10/03(月) 22:37:18
とりあえず、C言語の初歩missionCってのを買った
明日からやって見る
784デフォルトの名無しさん:2005/10/03(月) 22:55:23
>>783
http://edu.stackart.net/c/c_seihin.html
ワラタ

なんか昔ワープロ(ソフトでなく単体ハードのね)についてたタイピング練習ゲームみたいな雰囲気。
785デフォルトの名無しさん:2005/10/03(月) 23:07:37
<>を「\n」に置換するか
<>で区切れば。
786デフォルトの名無しさん:2005/10/03(月) 23:12:13
とりあえずマリちゃん萌え
787デフォルトの名無しさん:2005/10/03(月) 23:15:15
>>784
>ワープロ(ソフトでなく単体ハードのね)についてたタイピング練習ゲームみたいな
馬鹿にするなよ。ワープロのタイピングゲームには流麗なイベントCGなんてついてなかったんだから。
788デフォルトの名無しさん:2005/10/04(火) 00:06:30
>>776
うそwww120点?
ポインタ使わなかったから0点かと思った
789デフォルトの名無しさん:2005/10/04(火) 01:36:20
ポインタの問題もっとほしいのにゃ
790デフォルトの名無しさん:2005/10/04(火) 02:07:27
お題 回転シフト
n文字の文字列が与えられたとして、m文字目(n>m)までを回転シフトする関数を作れ
例) ABCDEFG の 3文字目までを回転シフト → DEFGABC

制約1)ポインタ使うこと
制約2)作業領域は 1文字分だけしか使ってはいけない
→応用)上記制約の元、できるだけ高速にシフトできるものを作れ
791デフォルトの名無しさん:2005/10/04(火) 05:03:29
(´・ω・`)わかりません
792デフォルトの名無しさん:2005/10/04(火) 05:49:21
制約がよくわからにゃい
793デフォルトの名無しさん:2005/10/04(火) 05:52:48
これじゃポインタ使わない方がよさそうだけど

#include<stdio.h>
int main(void)
{
char *p="ABCDEFG";
int i;

for(i=0;i<7;i++){
putch(*(p+(i+3)%7));
}
return (0);
}
794デフォルトの名無しさん:2005/10/04(火) 07:26:37
>>790
一生懸命考えましたが、初心者なのでこれが限界です_| ̄|○
もっと短くしたいのでアドバイスよろしくお願いします

#include <stdio.h>

int main(){
char str[100], *str_p, ans[100], *ans_p, *p;
int num, i;

str_p = str;
ans_p = ans;
p = str;

printf("文字列を入力してください:");
gets(str);
printf("整数を入力してください:");
scanf("%d", &num);
795デフォルトの名無しさん:2005/10/04(火) 07:27:10
str_p = str_p + num;

while(*str_p){
*ans_p = *str_p;
str_p++; ans_p++;
}

for (i = 0; i < num; i++){
*ans_p = *p;
ans_p++; p++;
}
*ans_p = '\0';

printf("%s\n", ans);
return 0;
}
796デフォルトの名無しさん:2005/10/04(火) 07:30:12
そんなつまんない問題じゃなくてもっと作ってて楽しいやつにして
797デフォルトの名無しさん:2005/10/04(火) 07:35:48
>>796
どんなのが楽しいんだ?
俺が新人研修で使ったのは、簡単な画像処理だったなぁ。
BMPの読み込み、書き出しだけはスケルトンで用意しておいて、
エフェクト部分の関数だけ作らせる。モザイクとかグレースケール化とか。
ポインタの基礎とビットシフトさえ使えれば作れるからそれなりに好評だったけど
このスレのレベルよりはちょい高めだろうか
798デフォルトの名無しさん:2005/10/04(火) 07:37:37
モザイクやグレー化に何故ビット処理?
799デフォルトの名無しさん:2005/10/04(火) 07:40:25
32bitABGRでピクセルごとの値を与えて、NTSC加重平均でグレースケール化してたから。
800デフォルトの名無しさん:2005/10/04(火) 07:41:45
>>796
今までの問題で楽しかった奴どれ?
801デフォルトの名無しさん:2005/10/04(火) 09:00:17
>>612がたのちかった
802デフォルトの名無しさん:2005/10/04(火) 10:03:35
>>801
ポインタの勉強としては良いが、実際のプログラムでこんな事はするな
絶対にだ
こんなことをしなきゃならないのは設計が悪い
803デフォルトの名無しさん:2005/10/04(火) 10:13:28
出される問題文の日本語が変だし、回答として示されているプログラムを見ると、
基本的な認識の共有が回答者側に出来ていない気がします。

>>790
> n文字の文字列が与えられたとして、m文字目(n>m)までを回転シフトする関数を作れ
> 例) ABCDEFG の 3文字目までを回転シフト → DEFGABC

「3 文字目までを回転させる」と言われれば、4 文字目以降は回転させないんだな、
と考えるのが普通じゃないか? 例で示されているほうを信じたとして、俺が問題を
書き直すとすれば、「与えられた文字列の全体を m 文字分回転させる」という表現
になる。

>>793 >>794
問題文は、「……する関数を作れ」とあるわけだから、その機能を main 関数内に
閉じ込めてしまうのは違うと思う。問題文にきちんと従えと言いたい訳じゃなくて、
キーボードから入力させた文字列を回転させるのか、ファイルから読んだ文字列を
回転させるのか、もっと他のどこかから持って来た文字列を回転させるのか、という
選択を、関数を「使う側」に任せる形で切り離した方が勉強になると思うのです。
回転させた結果をどうするか(ファイルに書くのか画面に出すのか)という選択も然り。
804デフォルトの名無しさん:2005/10/04(火) 11:16:00
ユーザー定義関数・について質問なんですが、
プロトタイプ宣言で調べていると
戻り値のデータ型 関数名(データ型 引数1,データ型 引数2…) ;
↑のようになっています。
それで猫やこのスレでもたびたび、戻り値のデータ型の所が
voidになってるのですが、これで宣言すればどんな型の戻り値でも
対応してくれるものなんですか?
805デフォルトの名無しさん:2005/10/04(火) 11:19:45
画像処理の問題やりたいから出せ
806デフォルトの名無しさん:2005/10/04(火) 11:23:17
>>804
void型は何も返さない

今抽出して見て見たがvoid型の関数を使ってるやつは
ポインタのアドレスを渡して使ってるから何も返さなくても値が変更される
807デフォルトの名無しさん:2005/10/04(火) 11:25:21
>>804
ちがうよ。
戻り値のデータ型が void ってなってる関数は、戻り値を返せないよ。
この関数は値を返しません、っていう印として、 void を書きます。

この説明で、
「全く完全にちっともさっぱり値を返さない関数に意味があるのか?」とか、
「値を返さない関数の内部から、外部に向けて情報を渡すことは100%不可能なのか、」
という疑問を持ってくれるとうれしいんだけどな。
808デフォルトの名無しさん:2005/10/04(火) 11:25:43
>>806
そうなんですか(゚∀゚)ありがとうございます!!
アドレスの場合にはvoidでもいいという事ですか。
勉強になりました!
809デフォルトの名無しさん:2005/10/04(火) 11:31:05
>>807
猫でも返せないと言っていたんですが、実際には情報を
返せてますが、これはどういう事なんですか?
810デフォルトの名無しさん:2005/10/04(火) 11:32:42
>>809
>>806
>今抽出して見て見たがvoid型の関数を使ってるやつは
>ポインタのアドレスを渡して使ってるから何も返さなくても値が変更される

読んでくれよ(´・ω・`)
811デフォルトの名無しさん:2005/10/04(火) 11:38:26
>>810
すいませんでした・・・以後、気をつけます(。_。)
何となく理解できました!答えてくださった方々
ありがとうございました<(_ _*)>
812デフォルトの名無しさん:2005/10/04(火) 11:48:17
>>790
/*よろしくおねがいします*/
#include <stdio.h>
#include <string.h>

#define MAX_LENGTH    80

void rotate(char *str, const int shift)
{
    int str_length;
    int i;
    char str_tmp;

    if (shift<=0)
        return;

    str_length=strlen(str);
    str_tmp=str[0];

    for (i=0 ; i<(str_length-1) ; i++)
    {
        str[i]=str[i+1];
    }
    str[str_length-1]=str_tmp;

    rotate(str, shift-1);

    return;
}
813デフォルトの名無しさん:2005/10/04(火) 11:48:48
>>812の続き
int main()
{
    char str[MAX_LENGTH];
    char char_shift[MAX_LENGTH];
    int int_shift;

    printf("%d文字以内の文字列を入力してください(1バイト文字のみ使用可)\n", MAX_LENGTH);
    fgets(str, MAX_LENGTH, stdin);
    str[strlen(str)-1]='\0';
    printf("何文字分シフトさせますか?\n");
    fgets(char_shift, MAX_LENGTH, stdin);
    sscanf(char_shift, "%d", &int_shift);

    printf("%sを%d文字シフトさせます\n", str, int_shift);
    rotate(str, int_shift);
    printf("%s\n", str);

    return 0;
}
814デフォルトの名無しさん:2005/10/04(火) 11:53:57
>>761
0123456789って表示される
815デフォルトの名無しさん:2005/10/04(火) 12:11:46
>>805
24bitビットマップをグレイスケール化するプログラムを書け

無茶か
816デフォルトの名無しさん:2005/10/04(火) 12:22:22
>>815
ヘッダとかの知識がないと無理だと思われ。
817デフォルトの名無しさん:2005/10/04(火) 12:36:31
非透過GIF画像の色を適当にかえるプログラム
ヘッダ(先頭の30バイトくらい)をちょっといじれば出来る
818デフォルトの名無しさん:2005/10/04(火) 12:38:37
質問なんですが、void kansuu(char *a){...}という関数があったときに、
これはcharの変数のポインタを渡してあげて関数内で中身を変更してもらうという意味ですか?
charの配列の名前を渡すと、配列の中身を変更してもらうということですか?どっちでもOK?
819デフォルトの名無しさん:2005/10/04(火) 12:40:00
>>805
xpm2ppmを作れ。xpmフォーマットもppmフォーマットも気の利いたグラフィックツールなら読めるし、
どちらもテキストベースだ。資料もWebで充分見つかるだろう。
820デフォルトの名無しさん:2005/10/04(火) 12:42:47
>>818
どっちの意味でも使えるけど、説明がなくchar *なら普通は後者の配列を想像する。
821デフォルトの名無しさん:2005/10/04(火) 12:43:02
>>818
一概には言えない。
例えば、その関数は単に文字列を受け取りたいだけかもしれない。
822デフォルトの名無しさん:2005/10/04(火) 13:10:10
821のいうように文字列を受け取りたいだけならconst char *にすべきなんだけど、
実際にはそうしていないプログラムも多いんだな。
823デフォルトの名無しさん:2005/10/04(火) 13:35:12
ppmでググったらいかがわしいサイトがでてきた
いくら二次元が好きだからって時と場所を考えてくださいです><
824デフォルトの名無しさん:2005/10/04(火) 13:54:18
あー、俺も昔それひっかかった
大学の演習で ppm 画像関連の課題が出て、ぐぐったらそこにぶちあたったよ
825デフォルトの名無しさん :2005/10/04(火) 14:16:13
>>818

数バイト程度ならまだしも、数十キロのエリアを実体で渡す事は...
と言うわけで、仕様書次第 関数マニュアルみれ

しかしこういう所みてると
有効桁数50桁の割り算作れとか言いたくなるよなぁ〜
採点できないからグッとこらえて..
826デフォルトの名無しさん:2005/10/04(火) 17:25:17
827デフォルトの名無しさん:2005/10/04(火) 17:59:03
何のためなんだろう・・・
828デフォルトの名無しさん:2005/10/04(火) 18:28:03
>>827
俺か?826に語りかけてるのか?このはずかしんぼめ!!
過去問解きたい人のために決まってるじゃないかおバカさん
829デフォルトの名無しさん:2005/10/04(火) 18:30:05
>>826
か、か、か、
かみ!!!
830デフォルトの名無しさん:2005/10/04(火) 18:30:36
かーみーちゅー
831デフォルトの名無しさん:2005/10/04(火) 22:20:57
俺も遅れながら勉強しようと思って、このスレ最初から見たけどさ、
猫のページでC++1.51が必要って時点で、既に挫折したんだけど・・・
調べてみると今は、6.0じゃないと駄目だって言うし・・・
どうしろと?
832デフォルトの名無しさん:2005/10/04(火) 22:29:39
何故無理にバージョンを合わせる
833デフォルトの名無しさん:2005/10/04(火) 22:33:24
だって、バージョン合わないと、わからなくね?
俺、エクセル2002の資格もってるけど、会社のエクセル2000、やっぱ分かりづらかったもん
ましてや、C言語なんて、きっちりいっしょの事やっていかないと、途中で分からなくなりそう・・・
834デフォルトの名無しさん:2005/10/04(火) 22:52:56
買えば?
835デフォルトの名無しさん:2005/10/04(火) 22:55:26
買えばって、今は売ってないって聞いたけど?
836デフォルトの名無しさん:2005/10/04(火) 23:05:33
>>831>>833
CやC++自体はISOやJISが標準を定めていて、どこもこれに従っているから、
とりあえず自分の環境でのコンパイルの仕方さえわかれば、後は基本的に猫でも何でも問題ない。

>>833
バージョンが下がると「あれがないこれがない」になるから使いづらくなる。
逆に上がるほうなら使いやすくなるのか、というわけでもないけどさ。
837デフォルトの名無しさん:2005/10/04(火) 23:09:48
>>836
ふーむ、ならばやってみるかな・・・
再三悪いけど、買うのはそれれ6.0でいいの?
なんかVisual Studio .NET 2003 Professional
とかいうのもあるけど、どっちがいいとかあったら教えて
838デフォルトの名無しさん:2005/10/04(火) 23:12:03
無理に買わなくても、無料配布されてる2005β2でいいんじゃない?
839デフォルトの名無しさん:2005/10/04(火) 23:14:05
>>838
調べてみるわ
みんなどうも、ありがd
840デフォルトの名無しさん:2005/10/04(火) 23:16:17
一番手っ取り早いのは Borland のフリーのコンパイラじゃねー?
ダウンロードして解凍して設定ファイル書き換えれば1時間以内にプログラミング開始できる。

Linux とか FreeBSD いれてみる余裕がハードディスクにあるなら、是非それを勧めるけどね。
手にはいるソースコードとドキュメントの、質と量が半端じゃない。
「strlen 関数って、中身どうなってんだ?」と思ったときにすぐに見に行ける環境って、
初心者にとって最高だと思う。
841デフォルトの名無しさん:2005/10/04(火) 23:25:09
最近はkodersあたりですぐ調べられるからなぁ
842デフォルトの名無しさん:2005/10/04(火) 23:42:48
>>841
良いサイトを教えてくれてサンキュー!
843デフォルトの名無しさん:2005/10/05(水) 00:01:13
>>835
売ってるぞ?MSのサイトで。
844デフォルトの名無しさん :2005/10/05(水) 02:02:06
どなたか いろんな数nについてn!を計算するプログラム
nCr=n!/r!(nーr)!を計算する関数のプログラム
2次方程式 ax2+bx+c=0の解を複素解まで求められるような関数のプログラム

作っていただけませんか??
845デフォルトの名無しさん:2005/10/05(水) 02:09:37
>>844
とりあえず、マルチやめろ
846デフォルトの名無しさん:2005/10/05(水) 03:37:42
回文判定(易しい)
2バイトかな文字列を入力させ
回文になっているかどうかを判定するプログラムを作れ
例)たけたぶやけた

応用→回文を作るプログラムを作れ(意味のある文を作るのは難易度高し)
847デフォルトの名無しさん:2005/10/05(水) 03:58:01
>803
回転シフトというのは ABCDEFG → BCDEFGA

この操作を1として、
→ CDEFGAB
→ DEFGABC
最初の文字列の3文字目まで、という意味で書いた

>「与えられた文字列の全体を m 文字分回転させる」
なるほど


ついでにこの問題の解答(?)としては
 文字列を2つに分けて AB
 Aをひっくり返し [AR]B
 Bをひっくり返し [AR][BR]
 全体をひっくり返す [[AR][BR]]R = BA
とするのが良いとされている
要素が多い場合でも 1要素分の作業領域しか使わずにすみ
それなりに早いプログラムとなる
848デフォルトの名無しさん:2005/10/05(水) 04:18:09
>694
void reverse(char str[]){
int i,j;
char tmp;
for (i = 0; str[i] != '\0'; i++); /* i=strlen(str); */
for (j = 0; j <i-1; ++j,--i){
tmp=str[j]; str[j]=str[i-1]; str[i-1]=tmp;
}
}
とかすれば別の領域が不要になる
849デフォルトの名無しさん:2005/10/05(水) 06:01:31
すげー・・・なにげに良スレになってる・・・
850デフォルトの名無しさん:2005/10/05(水) 06:10:57
>>1がついてこれない件について
851デフォルトの名無しさん:2005/10/05(水) 06:13:38
ポポ素たん結婚してー
852ポポ素 ◆Qgm8RFT0/. :2005/10/05(水) 06:45:04
おはよーみんな!!!
>>850…正解(;。;)
あたいはあたいのペースでがんばるね…
なんかすごいね皆さん、はたしてこれらのソースを理解できる日が
あたいにもくるのかな?…
また分からなくなったら聞くね…そのときは先生方、よろしくお願いしま〜す♪

>>851
あたいでいいのかい?笑
まだC言語のドアのノブを握ってまわそうとしてる所くらいの知識だよん★
853ポポ素 ◆Qgm8RFT0/. :2005/10/05(水) 07:13:25
>>826
か、かみさま!(笑)
ありがとう!(^^)早速お気に入り登録★★★
854デフォルトの名無しさん:2005/10/05(水) 09:10:25
>>844
#include <stdio.h>
#include <assert.h>

#define ASSERT assert

int input()
{
    char buf[10];
    int ret_num=0;
    fgets(buf, sizeof(buf), stdin);
    sscanf(buf, "%d", &ret_num);
    return ret_num;
}

int kaijo(int num)
{
    ASSERT(num>=0);
    if (num<2)
    {
        printf("1 = ");
        return 1;
    }
    printf("%d * ", num, num-1);
    return num*kaijo(num-1);
}


855デフォルトの名無しさん:2005/10/05(水) 09:11:07
int main()
{
    int ans, num;
    printf("数値を入力してください\n");
    num=input();
    printf("%dを入力しました\n", num);
    printf("計算をはじめます\n");
    ans=kaijo(num);
    printf("%d\n", ans);
    return 0;
}
856デフォルトの名無しさん:2005/10/05(水) 09:50:04
>>852
おれも理解できてないのにゃ
857デフォルトの名無しさん:2005/10/05(水) 09:53:23
>>846
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>

//マクロ定義
#define ASSERT assert
#define BUFSIZE 4096

//プロトタイプ宣言
int iskaibun_2byte(char *src);
int main();

//実装部

//! 回文か判定します
/*!
    1文字以上の2バイト文字のみの文字列が必要です
    半角文字が含まれるとうまく動きません

    戻り値
    回文なら1
    回文でないなら0
*/
int iskaibun_2byte(char *src)
{
    int src_size, i;

    src_size=(int)strlen(src);

    ASSERT( (src>0) && (src_size%2==0) );
858デフォルトの名無しさん:2005/10/05(水) 09:54:01
    for (i=0 ; i<src_size ; i+=2)
    {
        if(src[i] != src[src_size-i-2])
            return 0;

        if(src[i+1] != src[src_size-i-1])
            return 0;
    }

    return 1;
}

//!全角カナを受け取り回文か判定するプログラム
int main()
{
    char buf[BUFSIZE];

    printf("全角カナで回文を入力してください\n");

    fgets(buf, sizeof(buf), stdin);
    buf[strlen(buf)-1]='\0';

    if (iskaibun_2byte(buf))
        printf("回文です\n");
    else
        printf("回文じゃないです\n");

    return 0;
}
859デフォルトの名無しさん:2005/10/05(水) 10:43:52
fgets()は末尾に改行文字があることを保証していない。改行文字であるか確認するべき。
標準入力が閉じられることを考慮して、戻り値もチェックしておいたほうが無難。
strlen()の戻り値をキャストするのはなぜ? コンパイラを黙らせるためのキャストは避けるべき。
860デフォルトの名無しさん:2005/10/05(水) 12:00:47
>>857-858
ワイドキャラかマルチバイト文字列関数で書いてくれw
まあ、動くのは認めるけど
861デフォルトの名無しさん:2005/10/05(水) 13:13:56
ちょっと>>46で質問なんですけれど、
たとえばファイルは、

1334
234
5698
556
76

のように1つの行に1つの数字のみ書いてあると仮定していいんでしょうか?
862デフォルトの名無しさん:2005/10/05(水) 13:21:33
いいと思うよ
863デフォルトの名無しさん:2005/10/05(水) 13:27:14
>>862
ありがとうございます
864デフォルトの名無しさん:2005/10/05(水) 14:44:18
つっこみどころ満載だと思いますが>>46です。
#include <stdio.h>

int main(void)
{
FILE *file;
int s[100];
int i,j,n;

file=fopen("number.txt","r"); //number.txtは読み込むファイルです

for(i=0;(fscanf(file,"%d",&s[i])!=EOF);i++){
for(j=i;j>0;j--)
if(s[j-1] < s[j]){
n=s[j];
s[j]=s[j-1];
s[j-1]=n;
};
};

for(j=0;j<=i-1;j++)
printf("%d\n",s[j]);

fclose(file);

return 0;
}
865デフォルトの名無しさん:2005/10/05(水) 15:07:19
あんまり突っ込むところはないけど、fclose()はループ直後がいいかな。
#要らなくなったらできるだけ早く開放しましょう。
866デフォルトの名無しさん:2005/10/05(水) 15:55:27
おれも >>46 やってみた。
自作の sort と、ライブラリの qsort 両方試してみたら、qsort メチャはやい。
もちろん要素数は 100 じゃなく、65536 個で試してみた。

遅いほうのソート関数。
void sort(unsigned short *ia, int size) {
int i, j, tmp;
for (i=0; i<size-1; i++) {
for (j=i+1; j<size; j++) {
if (ia[i] < ia[j]) { tmp = ia[i]; ia[i] = ia[j]; ia[j] = tmp; }
}
}
}

データとして現れる数字は、0-65535だから、
私の環境では unsigned short int が 2byte なのでぴったり。
867デフォルトの名無しさん:2005/10/05(水) 16:10:03
ある意味、最速のソート。
データ数が多い場合qsortより遥かに速い。
void sort(unsigned short*ia,int size){
    int count[65536]={0};
    for(int i=0;i<size;++i)++count[ia[i]];
    for(int i=65536;--i>=0;)
    for(int j=count[i];--j >= 0;)
        *ia++ = i;
}
868デフォルトの名無しさん:2005/10/05(水) 16:24:36
>>866
おめでとう。遅いコードを書けたということはqsort相当に向けて改善の余地がたくさんあるということジャマイカ。
869デフォルトの名無しさん:2005/10/05(水) 17:04:49
>>790
こんな感じで作ってみました。
作ってから>>847を見たけど、なるほどそういう方法があるのかと思っちゃいますね。

#include <stdio.h>

void rotate(char *str, int m)
{
  char *head=str, temp;
  int i;

  for(i=0; i<m; i++){
    temp = *str;
    while(*str != '\0'){
     *str = *(str+1);
     str++;
    }
    *--str = temp;
    str=head;
  }
  return;
}

int main(void)
{
  char p[]="ABCDEFG";
  rotate(p, 3);
  printf("%s\n", p);
  return 0;
}
870デフォルトの名無しさん:2005/10/05(水) 19:18:42
今日からC言語の授業が始まったのですが分からないので質問します
宿題で「画面にクラス・番号を表示して次の行に名前を表示するプログラムを作れ」というのがでました
まったく分からないので教えてくれませんか?
871デフォルトの名無しさん:2005/10/05(水) 19:21:09
#include <stdio.h>

int main(void)
{
puts("クラス:番号\n名前");
}
872デフォルトの名無しさん:2005/10/05(水) 19:23:39
>>871
ありがとうございますm( __ __ )m
かなり助かりました〜
873デフォルトの名無しさん:2005/10/05(水) 19:23:39
#class <number>

int main(name)
{
}
874870:2005/10/05(水) 19:25:55
あれ?
今頃気づいたのですが問題の最後に「2回printf文を使う」って書いてあるorz
すみませんが  もういちどお願いできますか?
875デフォルトの名無しさん:2005/10/05(水) 19:28:46
>>874
なんというか、これで詰まってるようじゃ先が心配だが......

#include <stdio.h>
int main(void)
{
    printf("クラス:番号\n");
    printf("名前");
}
876デフォルトの名無しさん:2005/10/05(水) 19:45:28
875
わざわざvoidかかなくても・・・。
877875:2005/10/05(水) 19:49:49
あー、871のを適当にコピペしたから残ってた。
878デフォルトの名無しさん:2005/10/05(水) 19:53:10
答えを教えるよりヒントだけのほうがよくねえ?
879870:2005/10/05(水) 19:53:20
>>875
今日はまだprintfの意味しか教えてもらっていないので全然分からないんですorz
ありがとうございました
880デフォルトの名無しさん:2005/10/05(水) 19:55:39
>>878
そんなの各自の勝手だろ
881デフォルトの名無しさん:2005/10/05(水) 19:56:16
ロクなヒントも出せないくせに
882デフォルトの名無しさん:2005/10/05(水) 19:58:07
>>881
自虐は良くないな
883デフォルトの名無しさん:2005/10/05(水) 20:00:39
俺が悪かったよ
884デフォルトの名無しさん:2005/10/05(水) 20:21:57
このスレ見てて難しいけどやりがいあってすごい楽しそうだなーと思った。
まったくわからないけど今日から参加おk?
885デフォルトの名無しさん:2005/10/05(水) 20:23:25
>>884
せめて入門書のようなものを一冊読んでからにしない?
886デフォルトの名無しさん:2005/10/05(水) 20:29:21
>>885
そう…明日コーチャンフォー逝って買ってくるわ。
わかった出直してきまつ
887デフォルトの名無しさん:2005/10/05(水) 20:45:25
まだ誰も解いてない問題ある?
888デフォルトの名無しさん:2005/10/05(水) 21:05:31
>>867
バケットソートっていう名前で呼べよ。
889デフォルトの名無しさん:2005/10/05(水) 21:10:36
>>887
Youハッカーじゃん
890デフォルトの名無しさん:2005/10/05(水) 21:14:10
色々あるけどnlog2nのソートってどれ使っても似たようなもん?
891デフォルトの名無しさん:2005/10/05(水) 23:39:02
http://gamdev.org/w/?cmd=rss
まとめwikiのRSSはこのアドレスなんでヨロシク
892デフォルトの名無しさん:2005/10/06(木) 00:38:46
Nの階乗を求めるプログラムができない。
Nにゼロまたはマイナスの値が入力された場合、エラー出力は行わず再びNの値の
入力をユーザに促し、入力を待つところがうまく書けない。
#include <stdio.h>

int fact(int N);

main()
{
int N;

printf("N = ");
scanf("%d",&N);
N = fact(N);
printf("N! = %d\n" , N);

}

int fact(int N)
{
if(N == 0) return(1);
else return( N * fact(N - 1));
}
893デフォルトの名無しさん:2005/10/06(木) 00:41:41
>>847の方法ってこれでいいかな。

void reverse(char *str, int left, int right){
char temp;
for( ; left<right; left++, right--){
temp = str[left];
str[left] = str[right];
str[right] = temp;
}
return;
}

void rotate(char *str, int m){
int length = strlen(str);

reverse(str, 0, m-1);
reverse(str, m, length-1);
reverse(str, 0, length-1);
return;
}
894デフォルトの名無しさん:2005/10/06(木) 00:42:51
>>892
do{
printf("N=");
scanf("%d",&N);
}while(N<=0)

とかはダメかな
895デフォルトの名無しさん:2005/10/06(木) 00:50:51
>>894
Nの階乗の計算はどうすればいいの?
896デフォルトの名無しさん:2005/10/06(木) 00:55:29
>>895
>>894でいけるよ。
階乗計算はdo-whileを抜けてからやるから問題ない。
あと変数は小文字がいいかと。

#include <stdio.h>

int fact(int n);

int main()
{
int n;

do{
printf("N=");
scanf("%d",&n);
}while(n<=0);

n = fact(n);
printf("N! = %d\n" , n);

}

int fact(int n)
{
if(n == 0) return(1);
else return( n * fact(n - 1));
}
897デフォルトの名無しさん:2005/10/06(木) 01:07:20
ところで0の階乗は1と定義されていなかったっけ?
898デフォルトの名無しさん:2005/10/06(木) 01:08:22
>>896
レスありがとうございますm(__)m
899デフォルトの名無しさん:2005/10/06(木) 01:10:57
>>897
0とマイナスは無視して書かないといけません。
900デフォルトの名無しさん:2005/10/06(木) 03:46:13
>893
voidなら
最後のreturnは
いらないよ
901デフォルトの名無しさん:2005/10/06(木) 06:38:46
>>900
voidでも書いておけって人もいるし、そこは結構宗教論になるからなぁ。
どちらでもいいんじゃない?
902デフォルトの名無しさん:2005/10/06(木) 08:38:52
>>899
0の階乗は1と定義されていた希ガス。
903デフォルトの名無しさん:2005/10/06(木) 10:40:32
>>860
わからないので調べてきました
charの替わりにwchar_tを使えってことでいいですか?
904デフォルトの名無しさん:2005/10/06(木) 10:43:35
>>903
そういうこと。
905デフォルトの名無しさん:2005/10/06(木) 11:40:35
任意の長さの文字列の単語を辞書順に並び替えて最終結果だけ表示するプログラムが作りたいんですが、まったく分かりません。教えていただけないでしょうか?
906デフォルトの名無しさん:2005/10/06(木) 11:57:24
元のデータはどういった形でメモリに収められているんだ
それとも自由に全部つくっていい問題?
qsortで終わりだと思うが問題は一字一句変えずに全部転載してくれ
907デフォルトの名無しさん:2005/10/06(木) 12:16:51
>>905
日本語?
908デフォルトの名無しさん:2005/10/06(木) 13:35:29
wchar_tってC言語?MS独自?
909デフォルトの名無しさん:2005/10/06(木) 13:53:32
>>908
Cに含まれている。特定のヘッダをインクルードすると使えるようになる。
C++ではintやcharと同じ基本型となった。
910えすぱー:2005/10/06(木) 15:23:57
>>905
こういうことか?
http://gamdev.org/up/img/3486.phps
911デフォルトの名無しさん:2005/10/06(木) 16:04:41
>>910
まさか。
文からして大学の宿題の丸投げだろ。

たぶんこんなん↓

JANUARY     APRIL
FEBRUARY    AUGUST
MARCH       DECEMBER
APRIL        FEBRUARY
MAY         JANUARY
JUNE      → JULY
JULY        JUNE
AUGUST      MARCH
SEPTEMBER    MAY
OCTOBER     NOVEMBER
NOVEMBER    OCTOBER
DECEMBER    SEPTEMBER
912デフォルトの名無しさん:2005/10/06(木) 16:24:45
エクセル使えば一瞬で解ける
913デフォルトの名無しさん:2005/10/06(木) 16:27:01
>>905の文の通りに解釈すれば>>910で合ってると思うが…
914910:2005/10/06(木) 16:35:47
>>910 のやつは、勉強のために書いてみました。結構苦労した。
長くなっちゃったので、こっちには載せなかったんだけど、
できましたら、突っ込み宜しくお願いします。
915デフォルトの名無しさん:2005/10/06(木) 16:35:50
ああ、二通り解釈あるのか
納得
916デフォルトの名無しさん:2005/10/06(木) 17:00:02
このプログラム何がおかしいんですか?
#include<stdio.h>
void func1(int x, int y);
int func2;
void func3(int x, int y);
void func4(int *p, int *q);
void func5(int x);
int a = 1, b =2;
main()
{
int a = 3, c = 4;
printf("in main a = %d\n",a);
printf("in main b = %d\n",b);
printf("in main c = %d\n",c);
func1(++c, b);
a = func2();
func3(a,c);
printf("in main2 a = %d\n",a);
printf("in main2 b = %d\n",b);
printf("in main2 c = %d\n",c);
b = func4(&a, &c);
printf("in main3 a = %d\n",a);
printf("in main3 b = %d\n",b);
printf("in main3 c = %d\n",c);
func5(a);
}
917デフォルトの名無しさん:2005/10/06(木) 17:02:30
>>916の続き
void func1(int x ,int y)
{
double z;
z = x / y;
printf("in func1 x = %d\n",x);
printf("in func1 y = %d\n",y);
printf("in func1 z = %.3f\n",z);
}
int func2()
{
int b = 5, c = 6;
printf("in func2 a = %d\n",a);
printf("in func2 b = %d\n",b);
printf("in func2 c = %d\n",c);
return(b);
}
void func3(int x, int y)
{
a = x + y;
}
int func4 (int *p. int q)
{
*p = 7;
*q = 8;
return(*p + *q);
}
void func5(int x)
{
printf("in func5 a = %d\n",a);
}
918デフォルトの名無しさん:2005/10/06(木) 17:20:13
>>619
×int func2;
○int func2();
919デフォルトの名無しさん:2005/10/06(木) 17:22:21
新しい問題まだぁ〜?
920デフォルトの名無しさん:2005/10/06(木) 17:26:33
暇だから石取りゲーム作れ

なるべく強いCPU希望
921デフォルトの名無しさん:2005/10/06(木) 17:29:18
石取りゲームの詳細を
922デフォルトの名無しさん:2005/10/06(木) 17:30:50
ググったら伊藤家の食卓のゲームだった
しかも必勝法あり
ツマンネ
923デフォルトの名無しさん:2005/10/06(木) 17:31:40
>>910の.phpsって何の拡張子でっか?
924デフォルトの名無しさん:2005/10/06(木) 17:38:13
俺からもついでにお題

ジャンル:ランダムの取り扱い
問題:ランダムにパーツを組み合わせて簡単な顔AAを作る
詳細:
あらかじめ「輪郭」「目」「口」といったパーツを文字配列に用意しておき、(格納の仕方は各自工夫する)
実行時に各パーツからランダムに1つ選び出して組み合わせ、AAにして出力する。
標準関数のsrand、randを用いること。
ちなみにここで言う簡単なAAとは、(´・ω・`)や(・∀・)のようなものを指します。

暇だったらドウゾ
925デフォルトの名無しさん:2005/10/06(木) 17:40:28
やってみるお
926デフォルトの名無しさん:2005/10/06(木) 17:53:42
輪郭、頬、繭、目、鼻、もし複数行になっていいならカツラや帽子、髪の毛だな
他にパーツあったっけ?
927デフォルトの名無しさん:2005/10/06(木) 17:54:46
複数行だとちょっと難しくなりそうだな
928デフォルトの名無しさん:2005/10/06(木) 17:57:10
文字の横幅が何ドットかって取得できる?
929デフォルトの名無しさん:2005/10/06(木) 17:59:38
コンソール出力なら等幅固定でいいと思うお
930デフォルトの名無しさん:2005/10/06(木) 18:14:48
通信やりたい
931デフォルトの名無しさん:2005/10/06(木) 18:37:00
>>924
作ってみた。超適当だけど'`,、('∀`) '`,、
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/964.c
932デフォルトの名無しさん:2005/10/06(木) 18:39:44
あ、微妙に間違ってた
933デフォルトの名無しさん:2005/10/06(木) 19:25:07
>>931
顔の右輪郭と左輪郭もランダムかよw
);皿・[
↑こんなのとか。w
934デフォルトの名無しさん:2005/10/06(木) 19:32:31
我が家にはconio.hさんがいません。
935933:2005/10/06(木) 19:45:39
たぶん getch のために conio.h 必要なんだろうから、getchar に変えちゃった。
それから、-Wall でコンパイルすると、「time ってなんだよ?」って言って来たので、
time.h を include しました。
936デフォルトの名無しさん:2005/10/06(木) 19:46:34
コンパイラによって全然違うんだな〜
937デフォルトの名無しさん:2005/10/06(木) 20:08:14
#include<stdio.h>
#include<stdlib.h>
#include<math.h>

void main(void)
{
/* 宣言 */
FILE *fout;
float a,b,c,d,e,n,m,r;
char fnout[20];

printf("nとrを入力してください(ただしn>r):");
printf("n= \n");
scanf( "%5d" , &n);
printf("r= \n");
scanf( "%5d" , &r);


/* nの階乗 */

a=1.0;
while(n>1.0){
a=a*n;
n--;}

どこが間違ってますか?!
938デフォルトの名無しさん:2005/10/06(木) 20:09:25
937の続き
/* rの階乗 */

b=1.0;
while(r>1.0){
b=b*r;
r--;}

/* n-rの階乗 */

c=1.0;
e=n-r;
while(e>1.0){
c=c*e;
e--;}

/* 計算結果 */

d=(a/(b*c));
お願いします!
939デフォルトの名無しさん:2005/10/06(木) 21:09:43
まず何がしたい
940デフォルトの名無しさん:2005/10/06(木) 21:28:58
c1xx:fatal error C1083: ソースファイルを開けません。'HelloWorld.cpp':
No such file or directory

↑こんなふうなエラーが出て、先に進めません
どうしたら良いですか?
ttp://support.microsoft.com/default.aspx?scid=kb;ja;841226
このとおりにやったのに・・・
941デフォルトの名無しさん:2005/10/06(木) 21:30:50
>>937
組み合わせを求めたいんだよね。
scanf( "%5d" , &n); 間違い
scanf( "%5f" , &n); 正解

でも最後のdの計算をいじればd以外はintでいいと思うけど。
942デフォルトの名無しさん:2005/10/06(木) 21:32:03
winnyの技術買ってきた
943デフォルトの名無しさん:2005/10/06(木) 21:35:06
PDFでWinnyに流されるんでしょ?
今買おうか迷ってるんだが・・・
944デフォルトの名無しさん:2005/10/06(木) 21:36:07
>>942
スレにふさわしく、C言語にてwinnyを1から作ってみよう。
945デフォルトの名無しさん:2005/10/06(木) 21:40:22
>>942
内容めちゃ難しい?
ネットで買おうかどうか迷ってる
946デフォルトの名無しさん:2005/10/06(木) 21:41:22
>>940
英語のとおりやろ
cppファイルどこに置いてんのさ
947デフォルトの名無しさん:2005/10/06(木) 21:53:30
>>946
とりあえず、Administrator\My Documents\Visual Studio Projects\CPP
となってます
ちなみにCPPフォルダだけは自分が作りました
ハローワールドのファイルを格納するために
で、アドミニストレーターのフォルダに直接ぶち込んだら、出来ました・・・
アドミニストレーターに、CPPフォルダを作ってそこにいれても、できませんでした
つまりアドミニストレーター以上は、フォルダを作れないみたいです。
これってひょっとして、アドミニストレーター以降も、フォルダ名打ち込まないといけないんですか?
948デフォルトの名無しさん:2005/10/06(木) 22:03:31
Winnyの技術読み終わったらソケットの勉強はじめるぜ
949デフォルトの名無しさん:2005/10/06(木) 23:04:35
ある本で
>「int」は、「main関数が整数を返す」という意味です。
>return文を使って「0」を返している。
と書いてあったのですが「返す」とはどういうことでしょうか?
先輩方教えてください。
950デフォルトの名無しさん:2005/10/06(木) 23:11:57
>>945
難しいけどじっくり読めばわかる感じ
内容のわりに、スゲーわかりやすく書いてる
951デフォルトの名無しさん:2005/10/06(木) 23:26:06
>>949
返すとは結果を伝えると言えばいいかな。
main以外の関数を使い出せばわかってくると思う。
952デフォルトの名無しさん:2005/10/06(木) 23:47:03
>>951
そうなんですか。恩に着ます!
何せ今日から始めたもんで。
953デフォルトの名無しさん:2005/10/07(金) 00:07:50
>>949 さんとは別人ですが、便乗質問します。

いろいろ google した結果、 main 関数の返す値は、プログラムの終了コード(終了ステータス)に
なることがわかりました、UNIX だと、直前に終了したプログラムの終了コードを確認するには、
sh だと、echo $? で、csh だと echo $status で表示させることが出来ることもわかりましたが、
Windows のコマンドプロンプトでは、どうやればいいでしょうか。
954デフォルトの名無しさん:2005/10/07(金) 00:21:42
>>867
既知のアルゴリズムだよ。

ただ実際にはqsortやマージソート、ヒープソートなんかが使われるのは
この方法にはいろいろ問題があるわけで

・整数しか扱えない。
・数字のとりうる値の範囲が大きいとメモリを馬鹿食いする。たとえば32ビット値なら要素数2^32の配列が必要になる。



考え方自体は有用ではある。
ちょっと改良すればハッシュ法なんかに応用できる。
955デフォルトの名無しさん:2005/10/07(金) 00:53:28
うお。乗り遅れた
956デフォルトの名無しさん:2005/10/07(金) 00:58:44
>>950
サンクス
957デフォルトの名無しさん:2005/10/07(金) 02:31:23
>>953
echo %errorlevel%
958ポポ巣 ◆Qgm8RFT0/. :2005/10/07(金) 07:28:06
http://pc8.2ch.net/test/read.cgi/tech/1128637438/

新しいのたてたよーー!
959デフォルトの名無しさん:2005/10/07(金) 12:25:12
//ネットワークプログラミングはじめました。まずは初期化。
#pragma comment (lib, "WSock32.lib")
#define WIN32_LEAN_AND_MEAN

#define MAJORVERSION 2
#define MINORVERSION 2

#include <windows.h>
#include <winsock2.h>
#include <stdio.h>

int main()
{
    WSADATA wsaData;
    int err;

    err=WSAStartup(MAKEWORD(MAJORVERSION, MINORVERSION), &wsaData);
    if (err != 0)
    {
        printf("エラーコード %d\n", err);
        switch (err)
        {
        case WSASYSNOTREADY:
            printf("ネットワークサブシステムがネットワークへの接続を準備できていない\n");
            break;
        case WSAVERNOTSUPPORTED:
            printf("要求されたwinsockのバージョンがサポートされていない\n");
            break;
        case WSAEINPROGRESS:
            printf("ブロッキング操作の実行中であるか、またはサービスプロバイダがコールバック関数を処理している\n");
/*
960デフォルトの名無しさん:2005/10/07(金) 12:25:54
*/
            break;
        case WSAEPROCLIM:
            printf("winsockが処理できる最大プロセス数に達した\n");
            break;
        case WSAEFAULT:
            printf("第二引数であるlpWSAData は有効なポインタではない\n");
            break;
        default:
            printf("原因不明\n");
        }
    }
    else
    {
        printf("正常に初期化できました\n");
    }
    
    printf("iMaxSockets %d\n", wsaData.iMaxSockets);
    printf("iMaxUdpDg %d\n", wsaData.iMaxUdpDg);    
    printf("lpVendorInfo %x\n", wsaData.lpVendorInfo);    
    printf("szDescription %s\n", wsaData.szDescription);
    printf("szSystemStatus %s\n", wsaData.szSystemStatus);
    printf("wHighVersion %d.%d\n", HIBYTE(wsaData.wHighVersion), LOBYTE(wsaData.wHighVersion) );
    printf("wVersion %d.%d\n", HIBYTE(wsaData.wVersion), LOBYTE(wsaData.wVersion) );
/*
961デフォルトの名無しさん:2005/10/07(金) 12:26:26
*/
    err=WSACleanup();
    if (err == SOCKET_ERROR)
    {
        printf("リソース解放失敗\n");
    }
    else
    {
        printf("リソース解放成功\n");
    }

    return 0;
}
//EOF
962デフォルトの名無しさん:2005/10/07(金) 16:14:20
ちょっとコードが丁寧すぎる印象を受けた
963デフォルトの名無しさん:2005/10/07(金) 16:27:03
皆さんは入門書読み終わったら、次どんな本読みましたか?
964デフォルトの名無しさん:2005/10/07(金) 16:58:57
>>963
いまでも入門書はしょっちゅう手にして確認するけど、
にーちゃんの本棚のCマガジンとかは良く読んだ。

あと、関係ないけど、新スレに書く前にこっち埋めようぜー。
965デフォルトの名無しさん:2005/10/07(金) 17:12:56
>>964
Cマガジンですか?さっそく本屋行って見てきます!
966デフォルトの名無しさん:2005/10/07(金) 17:25:51
>>963
「C言語ポインタ完全制覇」と「定本Cプログラマのためのアルゴリズムとデータ構造」を読んだ。

本もいいけど、勉強におすすめのソースコードとかが知りたい。
967デフォルトの名無しさん:2005/10/07(金) 18:10:13
入門書は読んだことがない。
善いも悪いもCのソースならWebでいくらでも転がってる。
968デフォルトの名無しさん:2005/10/07(金) 18:15:10
ググって出てこないもんは無いけど
通して読むようなのないなぁ、書籍でも

ANSI規格書が昔は無料だったらしいけど
今は1万円以上するしちょっとつらい
K&R買ったけど全部載ってるわけでもなし

MSDNが良さそうだけど目次が全然でてこないorz
969デフォルトの名無しさん:2005/10/07(金) 18:20:26
>>968
JISのPDFはタダで読める。

MSDN(日本語)ではこうたどっていくとC関連の記事がある。
開発ツールと言語→Visual Studio .Net→製品ドキュメント→Visual C++
→Visual C++ リファレンス→Visual C++ ライブラリ→Visual C++ のリファレンス
→Visual C++のライブラリ→ランタイム ライブラリ リファレンス
970その1:2005/10/07(金) 19:18:47
次スレの >>9 unix 版。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <netdb.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <sys/socket.h>
int main(int argc, char **argv) {
  const char *hostname = "www.google.co.jp";
  const char *path = "/";
  const unsigned short port = 80;
  int sock;
  struct hostent *host;
  struct sockaddr_in server;
  int read_size;
  char buf[1024];
971その2:2005/10/07(金) 19:19:58
  if ((host=gethostbyname(hostname))==NULL)
    return -1;
  bzero(&server, sizeof(server));
  server.sin_family = AF_INET;
  bcopy(host->h_addr, &server.sin_addr, host->h_length);
  server.sin_port = htons(port);
  if ((sock=socket(AF_INET, SOCK_STREAM, 0))==-1)
    return -1;
  if (connect(sock, (struct sockaddr *)&server, sizeof(server))==-1)
    return -1;
  sprintf(buf, "GET %s HTTP/1.0\r\nHost: %s\r\n\r\n", path, hostname);
  write(sock, buf, strlen(buf));
  while ((read_size = read(sock, buf, sizeof(buf)))>0)
    write(1, buf, read_size);
  close(sock);
  return 0;
}
972デフォルトの名無しさん:2005/10/07(金) 20:30:48
>>969
ありがとうございます見つかりました
973デフォルトの名無しさん:2005/10/08(土) 11:33:22
なんか新スレはどんどん進んでいる様だけど、このスレを埋めて行くぜ。

問題。
  自分の環境で使うことが出来るC言語の型 (char, short int, int, long int 等など)
  と、そのサイズを標準出力に吐き出すプログラムを書け.

出力例
  char 1
  short int 2
  int 4
  long int 4

制約
  型のサイズはプログラム内に直接書くのではなく、sizeof 演算子を用いて、
  実行時に取得して表示すること。

挑戦項目
  その型が持つことが出来る最大の数と最小の数も出るようにしておくと便利かも。
  完成したプログラムは、環境変数 PATH が指すディレクトリのどこか一つにいれておくと便利かも。
974デフォルトの名無しさん:2005/10/08(土) 11:39:59
>>973
こういう横やりを入れるのも何だけど、sizeofはコンパイル時に定数式扱いされるから
実行時に取得してるわけじゃないんだけどね
975デフォルトの名無しさん:2005/10/08(土) 11:42:46
973って・・・・・・・・・・・・・・・・・・
976デフォルトの名無しさん:2005/10/08(土) 11:53:30
>>974
まさに横やりだな。
実行形式ファイルは実行するまでは
何の効果も生み出さないのだから、
実行時に取得される、と理解して何の不具合もないだろ。
ホント、ヲタはどうでもいいところにこだわるな。
977デフォルトの名無しさん:2005/10/08(土) 11:58:23
>>973-974だけだったら>>973のミスは微笑ましかったが
>>976で最悪
言ってること滅茶苦茶だし

問題出すにはまだ早い知識ですね =P
978デフォルトの名無しさん:2005/10/08(土) 11:59:55
>>976
おまいさん、RTTI使ったことないだろ。
さすがに初心者にそこまでの注意を払わせるのはどうかと思うが、
実行時にコストを支払うのか、コンパイル時に支払うのかの違いは大切だぞ。
979デフォルトの名無しさん:2005/10/08(土) 12:03:11
>>976は頭に不具合がある人のいい例ですねw
980デフォルトの名無しさん:2005/10/08(土) 12:08:02
>>977-978
話をそらすな。
このスレの主題に照らして
>>974がどれだけ無意味な発言であるか。
君らは技術に溺れ、場に応じた適切なレベルの
コミュニケーションを取れないタイプの間だな。
人にものを教えようなどと思わない方がいいぞ。
あと俺は>>973とは別の通りすがりだ。
981デフォルトの名無しさん:2005/10/08(土) 12:10:14
>あと俺は>>973とは別の通りすがりだ。

そんな事は誰も聞いてない件について。

アイアムザパニーズに近いものを感じるなw
982デフォルトの名無しさん:2005/10/08(土) 12:12:12
>>980
そういう下らない論争をする君が一番場違いだということに気づかないのか?
スレが埋まっていいんだけどさ。
そもそも間違いを指摘してなぜ悪い?
初心者相手なら嘘を教えていいとでも?
適切なフォローはこの場合「今は気にしなくていい」であって
「実行時だと理解していい」ではないだろう。嘘を教えてどうする。
983デフォルトの名無しさん:2005/10/08(土) 12:13:12
>>977-979>>981-982

せっかく>>973が必死こいて言い訳を考えて来てくれたんだから
静かに見守ろうぜおまいらw
984デフォルトの名無しさん:2005/10/08(土) 12:13:28
>>980
場に応じた適切な発言できてないのは、いったい誰なのやら。
985デフォルトの名無しさん:2005/10/08(土) 12:15:19
973みたいな教え方してると、プリプロセッサ命令とかでも誤解が生じそうだよママン
986デフォルトの名無しさん:2005/10/08(土) 12:16:38
973ちゃん落ち着いて!ママよ!
987デフォルトの名無しさん:2005/10/08(土) 12:17:21
988デフォルトの名無しさん:2005/10/08(土) 12:17:51
989デフォルトの名無しさん:2005/10/08(土) 12:21:11
>>981
>>977を読め。俺を>>973だと思っている。
君も場の状況を見ず思いつきで発言するタイプだな。
コミュニケーション能力が足りない人間が多いな。

>>982
実行時に取得しているのと表面的には
変わらないのだから嘘ではない。
初心者のキャパはすごく小さいのだ。
他人のレスに横やりいれてスレの流れを乱すな。
990973:2005/10/08(土) 12:23:03
>>974 さんと、それ以降の方々。
大変勉強になります。

私が >>973 の問題で伝えたかったことは、自分のためにプログラミングするのも
楽しいよな。ってことです。

あと、ある程度C言語をわかってる人は、あんまり難しい問題を出すんじゃなくて、
今日からC言語を学ぼうと思った人でも、「これなら出来るかも」と思えるような
問題を出して行くといいんじゃないかと思います。

あ、すげー伸びてる。
991デフォルトの名無しさん:2005/10/08(土) 12:23:43
これは酷い自演だなwwwwwwwwwwwwww
992デフォルトの名無しさん:2005/10/08(土) 12:23:44
この流れで973みたいな問題だす973もアレだよね
993デフォルトの名無しさん:2005/10/08(土) 12:25:06
なんでも良いけどパート2まで来るなよ。

邪魔だから。
994デフォルトの名無しさん:2005/10/08(土) 12:25:09
>>990
あんた根本的に考え違いしてるよ
自分がプログラミングやり始めた頃のこと思い出してみろよ
995デフォルトの名無しさん:2005/10/08(土) 12:26:06
表面的に同じなら同じだと言い張れるってのがすごいな。
996デフォルトの名無しさん:2005/10/08(土) 12:27:55
#defineがexeが実行した時に置き換えられてると思ってそう
997デフォルトの名無しさん:2005/10/08(土) 12:32:15
これはもう埋めしかないね
998デフォルトの名無しさん:2005/10/08(土) 12:34:03
999デフォルトの名無しさん:2005/10/08(土) 12:36:13
999
1000デフォルトの名無しさん:2005/10/08(土) 12:36:50
1000!
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。