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

このエントリーをはてなブックマークに追加
1ポポ巣 ◆Qgm8RFT0/.
おはようー!
あたいのスペックは
26歳フリーター、パソコン歴インターネット歴は6年
しかしそれ以外の事は何もできにゃーい…
というわけで今日から参考書を買ってがんばります!
今まさに私みたいに、これからCを勉強するぞって人いたら
よろしくね!!!
前スレが一杯になりそうなので新しく作りました☆
今日でC言語歴約2週間です^^;
簡単な文字の表示はできるようになったんですが
進むペースは亀さん並に遅いので、ゆっくり見守ってね(><。)
もっと容量のいい頭がほしいー(><。)
2デフォルトの名無しさん:2005/10/07(金) 07:32:25
2gets
前スレ進むの早!!
3デフォルトの名無しさん:2005/10/07(金) 08:41:06
ム板にしては消費早いな
4デフォルトの名無しさん:2005/10/07(金) 09:30:49
>もっと容量のいい頭
「もっと要領のいい頭」の誤変換か、「もっと容量の大きい頭」の書き間違いのどちらなんだろう。
#いずれにしろ、要領が悪いか、脳味噌が足りないという自覚はあるわけだな。
5デフォルトの名無しさん:2005/10/07(金) 11:14:52
6デフォルトの名無しさん:2005/10/07(金) 11:18:39
■類似スレ(Java)
□■JAVAプログラマーを育てるスレ■□
http://pc8.2ch.net/test/read.cgi/tech/1081149073/
java講座を一緒に受けよう!
http://pc8.2ch.net/test/read.cgi/tech/1110180044/

■類似スレ(何でもあり)
またプログラムやろうぜソニー
http://ex11.2ch.net/test/read.cgi/news4vip/1127838884/
【初心者】課題をクリアしていくスレ【講習会】
http://pc8.2ch.net/test/read.cgi/gamedev/1086858349/
【目標ない奴】おまいらに課題を与える。【集まれ】
http://pc8.2ch.net/test/read.cgi/gamedev/1026148930/
7デフォルトの名無しさん:2005/10/07(金) 13:31:09
■過去スレ
おまいら!今日からC言語を学んでいくぞー!
http://pc8.2ch.net/test/read.cgi/tech/1127501670/
8デフォルトの名無しさん:2005/10/07(金) 13:42:24
超簡単なネットワークプログラムの問題お願いします
9デフォルトの名無しさん:2005/10/07(金) 13:46:07
>>8
http://www.google.co.jp に接続してトップページをGET、ファイルに書き出すプログラム。
10デフォルトの名無しさん:2005/10/07(金) 13:49:50
それが出来たら通信処理の非同期化にチャレンジ
11デフォルトの名無しさん:2005/10/07(金) 15:10:41
「猫でもわかる」を見ながら挑戦してるけど
なかなか難しいぽ
12変な人:2005/10/07(金) 15:23:09
とりあえずCを始めてみた今日この頃
13デフォルトの名無しさん:2005/10/07(金) 16:37:13
>>1
コテハン、私的なスレは自己紹介板・最悪板・夢・独り言板・おいらロビー・なんでもあり板・
PINKのなんでもあり板以外では、原則として全て削除または移動対象です。
スレ立ての内容はくだらない議論にならないような内容にしてください
14デフォルトの名無しさん:2005/10/07(金) 16:50:24
猿スレや下級者スレなど類似スレが多いから、そっちでやれよって感じだよなー。
C言語のスレ、この板だけで何個あるんだよ。
15デフォルトの名無しさん:2005/10/07(金) 17:51:01
猿スレってのをちょっと覗いてみたけど何だあれは・・・
16デフォルトの名無しさん:2005/10/07(金) 18:19:02
SuperCon課題レベルの、高度なC言語の問題が沢山載った本を、どなたがご存じないでしょうか?
17デフォルトの名無しさん:2005/10/07(金) 18:32:08
>>13
最低限>>1-10ぐらい眺めて言えよ
ツラだけ大きな糞運営さんw
18デフォルトの名無しさん:2005/10/07(金) 18:39:10
せっかく前スレが良い空気だったんだから喧嘩しないでくれ。
19デフォルトの名無しさん:2005/10/07(金) 18:41:42
問題まだぁ〜?
20デフォルトの名無しさん:2005/10/07(金) 18:47:10
>>19
とりあえず、高難度が2問出てる>>9-10
21デフォルトの名無しさん:2005/10/07(金) 18:50:25
http://www.2ch.net/だとHTML取得できるのに
>>9だとエラーが出る
アホなので何がなんだかもうわからんorz
22デフォルトの名無しさん:2005/10/07(金) 18:51:39
非同期の意味がわからん
UDPでGoogleのHTMLをダウンロードしたらいいのか?
23デフォルトの名無しさん:2005/10/07(金) 19:02:46
>>9
http://hs.or.tp/php/uploader/up/code046.c

「猫でもわかる」のをパクって作りました
2ちゃんTOPだと成功するけど、なぜかグーグルのサイトだと何故かダメぽ(´・ω・`)
24デフォルトの名無しさん:2005/10/07(金) 19:10:14
参考にするならこっち
http://www.nakka.com/lib/
25デフォルトの名無しさん:2005/10/07(金) 19:19:51
めちゃイイサイトですね
これから読んでみます
26デフォルトの名無しさん:2005/10/07(金) 19:21:06
>>21
多分リクエストの不備だろ。
投げたリクエスト書いてみ。

>>22
同期って関数が終わるまで制御が帰ってこない事よ
27デフォルトの名無しさん:2005/10/07(金) 19:32:26
GET http://www.google.co.jp/
これだけだとダメなのかな・・・
28デフォルトの名無しさん:2005/10/07(金) 19:33:53
>>9
#pragma comment(lib, "WinInet.lib")

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

int main()
{
    const char *filename="google.html";
    HINTERNET hInet, hUrl;
    char buf[32000];
    DWORD len;
    FILE *fp;

    hInet=InternetOpen("google get program", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
    hUrl=InternetOpenUrl(hInet, "http://www.google.co.jp/", NULL, 0,0,0);

    fp=fopen(filename, "w");
    
    while (true)
    {
        InternetReadFile(hUrl, buf, sizeof buf-1, &len);
/*
29デフォルトの名無しさん:2005/10/07(金) 19:34:23
*/
        if (len==0)
            break;
        buf[len]='\0';
        fprintf(fp, "%s", buf);
    }
    InternetCloseHandle(hUrl);
    InternetCloseHandle(hInet);
    
    fclose(fp);

    return 0;
}
//EOF
30デフォルトの名無しさん:2005/10/07(金) 19:37:35
>>27
GET http://www.google.co.jp/ HTTP/1.0

なら帰ってくるよ
31デフォルトの名無しさん:2005/10/07(金) 19:46:59
猫でもわかるネットワークプログラミング買ってきた
32デフォルトの名無しさん:2005/10/07(金) 19:55:10
やっぱrecv関数のとこでエラーが出る
コードが悪いのかorz
もう諦めた

>>30
ありがとうございました
33デフォルトの名無しさん:2005/10/07(金) 19:56:54
「UNIXネットワークプログラミング」はその名の通りwindows環境でのネットワークプログラミングには向かない?
34デフォルトの名無しさん:2005/10/07(金) 20:12:54
ポポ素たん結婚してー
35デフォルトの名無しさん:2005/10/07(金) 20:37:35
セックスして〜
36デフォルトの名無しさん:2005/10/07(金) 20:47:44
>>32
コードを晒してくれないと悪い部分も指摘できない罠
37デフォルトの名無しさん:2005/10/07(金) 20:48:10
はいわろすわろす
38デフォルトの名無しさん:2005/10/07(金) 21:05:03
>>9
#pragma comment (lib, "WSock32.lib")
#define WIN32_LEAN_AND_MEAN

#define MAJORVERSION 2
#define MINORVERSION 2
#define SERVER    "www.google.co.jp"
#define PORT 80
#define FILENAME "google.txt"

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

int main()
{
    WSADATA wsaData;
    SOCKET Socket;
    LPHOSTENT lpHostEnt;
    SOCKADDR_IN SockAddR_In;
    FILE *fp;
    char RecvStr[255];
    char SendStr[255];
    int err;

    err=WSAStartup(MAKEWORD(MAJORVERSION, MINORVERSION), &wsaData);
    if (err != 0)
    {
        printf("エラーコード %d\n", err);
/*
39デフォルトの名無しさん:2005/10/07(金) 21:05:41
*/
        switch (err)
        {
        case WSASYSNOTREADY:
            printf("ネットワークサブシステムがネットワークへの接続を準備できていない\n");
            break;
        case WSAVERNOTSUPPORTED:
            printf("要求されたwinsockのバージョンがサポートされていない\n");
            break;
        case WSAEINPROGRESS:
            printf("ブロッキング操作の実行中であるか、またはサービスプロバイダがコールバック関数を処理している\n");
            break;
        case WSAEPROCLIM:
            printf("winsockが処理できる最大プロセス数に達した\n");
            break;
        case WSAEFAULT:
            printf("第二引数であるlpWSAData は有効なポインタではない\n");
            break;
        default:
            printf("原因不明\n");
        }
        return 1;
    }
    else
    {
/*
40デフォルトの名無しさん:2005/10/07(金) 21:06:22
*/
        printf("正常に初期化できました\n");
    }
    
    Socket=socket(PF_INET, SOCK_STREAM, 0);
    if (Socket == INVALID_SOCKET)
    {
        printf("ソケットが開けませんでした\n");
        return 2;
    }

    lpHostEnt=gethostbyname(SERVER);
    if (lpHostEnt == NULL)
    {
        printf("サーバーが見つかりませんでした\n");
        return 3;
    }

    memset( &SockAddR_In, 0, sizeof(SockAddR_In) );
    SockAddR_In.sin_family = AF_INET;
    SockAddR_In.sin_port = htons(PORT);
    SockAddR_In.sin_addr = *((LPIN_ADDR)*lpHostEnt->h_addr_list);

    if ( connect(Socket, (PSOCKADDR)&SockAddR_In, sizeof(SockAddR_In)) !=0)
    {
        printf("ソケット接続失敗しました\n");
/*
41デフォルトの名無しさん:2005/10/07(金) 21:07:15
*/
        return 4;
    }

    sprintf(SendStr, "GET %s HTTP/1.0\n\n", SERVER);
    printf("%s を送信します\n", SendStr);
    send(Socket, SendStr, strlen(SendStr), 0);

    fp=fopen(FILENAME, "w");
    printf("受信中");
    while (1)
    {
        printf(".");
        err=recv(Socket, RecvStr, sizeof(RecvStr)-1, 0);
        printf("%d",err);
        fprintf(fp, "%s", RecvStr);
        if (err == 0)
        {
            break;
        }
    }
    fclose(fp);

    printf("\n終了処理開始\n");

    if ( shutdown(Socket, SD_BOTH) != 0)
    {
        printf("シャットダウンに失敗しました\n");
        return 5;
    }
/*
42デフォルトの名無しさん:2005/10/07(金) 21:07:46
*/
    closesocket(Socket);

    err=WSACleanup();
    if (err == SOCKET_ERROR)
    {
        printf("リソース解放失敗\n");
    }
    else
    {
        printf("リソース解放成功\n");
    }

    return 0;
}

//EOF
43デフォルトの名無しさん:2005/10/07(金) 21:09:48
>>42
GETで指定するのは相対パスだから、
www.google.co.jp:80に接続したら
GET / HTTP/1.0
でルートを取得できる
4438:2005/10/07(金) 21:52:32
質問が2つあります

1.保存したファイル(google.txt)が文字化けして読めません
 秀丸でエンコードにUTF-8やSJISを指定して開いても
 フフフフフフフフという文字があちこちに表示されました
 どうすれば文字化けしないファイルを作れますか?

2.「GET / HTTP/1.0」を指定すると「HTTP/1.0 302 Found」になりました
 何が起きているのでしょうか?
 「ページが一時的に別の場所に用意されていることを意味する」とのことですが
 このエラーが出る心当たりがありません
 変わりに「/Top/World/Japanese/」としてみたところ正常にダウンロードできました

よろしくお願いします
45デフォルトの名無しさん:2005/10/07(金) 21:55:55
>>44
フフフフでぐぐれ。
46デフォルトの名無しさん:2005/10/07(金) 22:12:17
IEとか普通のブラウザでgoogleにアクセスして
その時のログ取ってそっくり真似ればいいんだが
Cとは関係ない話だし
47デフォルトの名無しさん:2005/10/07(金) 22:19:11
>>45
http://hpcgi1.nifty.com/MADIA/Vcbbs/wwwlng.cgi?print+200506/05060093.txt
こちらのサイトを見つけました
文字列の最後に'\0'が抜けていたのが原因でした
ありがとうございます

引き続き2.のほうお願いします
48デフォルトの名無しさん:2005/10/07(金) 22:25:03
知ってるけどCとはぜんぜん関係ない話だし
49デフォルトの名無しさん:2005/10/07(金) 22:25:39
>>47
IEたちが何やってるか、パケットキャプチャ使ったり自作Proxyもどきを作ってみ
50デフォルトの名無しさん:2005/10/07(金) 22:33:14
51デフォルトの名無しさん:2005/10/07(金) 22:35:54
Firefox使ってるならLive HTTP Headers入れるのが楽だね。
HTTP1.1にして、Host、User-Agent、Connectionを送信してやるといいと思われ。
5238:2005/10/07(金) 23:46:24
sprintf(SendStr, "GET / HTTP/1.0\nHost: www.google.co.jp\n\n");
これで302が出なくなりました
HTTP1.1だと切断されなくなったのでとりあえず避けました
53デフォルトの名無しさん :2005/10/07(金) 23:56:43
Undefined first referenced
symbol in file
sqrt review6.o
ld: fatal: Symbol referencing errors. No output written to review6.exe
コンパイル通すとこぅなるんですけど原因何かわかありますか??
54デフォルトの名無しさん:2005/10/08(土) 00:01:22
>>23>>52のようにするとエラーが出なくなりました
もうちっとネットワーク自体について勉強しないとダメぽorz
55デフォルトの名無しさん:2005/10/08(土) 00:16:07
>>54
念のため、規格で決まっている改行コードは\r\nだから
Apacheのように多少融通が利くサーバーでは一応動くけれど
"GET / HTTP/1.0\r\nHost: www.google.co.jp\r\n\r\n"
にした方がいいと思うYO
56デフォルトの名無しさん:2005/10/08(土) 00:23:06
おまえら人様のサーバでテストプログラム撃つな
自分のPCにでもサーバ立ててやれ
非常識にもほどがある
57デフォルトの名無しさん:2005/10/08(土) 00:28:17
そういうことはそこらのsocket解説サイトに言ってくれ
58デフォルトの名無しさん:2005/10/08(土) 00:35:40
非常識の正当化?
59デフォルトの名無しさん:2005/10/08(土) 01:12:55
>>55
アドバイスありがとございます
60デフォルトの名無しさん:2005/10/08(土) 03:34:42
みんなコンソール系のプログラムなのかな?
[問題]
実行するプログラム自身の名前を表示する

例)Winならコマンドプロンプトで、作ったプログラム apl.exe を実行すると

 私の名前は apl.exe です。

と表示する。次に ren apl.exe apple.exe をして、apple.exe を実行すると

 私の名前は apple.exe です。

と表示する。他に適当な名前に ren してもそれが表示されること。
(unix系なら ren は mv で。あとプログラムの名前も〜.exeとはしないな...)
61デフォルトの名無しさん:2005/10/08(土) 03:56:56
>>60
その問題は良くない。
62デフォルトの名無しさん:2005/10/08(土) 03:59:11
激しくWin限定ス

#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
printf("私の名前は %s です。", strrchr(argv[0], '\\')+1);
return 0;
}
63デフォルトの名無しさん:2005/10/08(土) 04:03:51
Win限定どころかコンパイラでも違うな
64デフォルトの名無しさん:2005/10/08(土) 04:11:57
依存しまくりの出題はいかがなものかと・・・
出題者の模範解答を見てみたいものだ
65デフォルトの名無しさん:2005/10/08(土) 04:27:22
それで思ったんだけど、今までの問題にも模範解答を用意して
wikiの解答ページにまとめてみるってのは需要あるかな?
66デフォルトの名無しさん:2005/10/08(土) 04:28:49
>>65
神キタ━━━━━━(゚∀゚)━━━━━━ !!
67デフォルトの名無しさん:2005/10/08(土) 04:31:17
>>65
そういう事は、思い立ったら速やかに黙ってやれ。
ぶっちゃけおまいの自己満足の世界なんだから。
68デフォルトの名無しさん:2005/10/08(土) 04:39:21
>>60の解き方考え中なんだけど、基本的にargv[0]って定義されてないんだよね?
だから仕様にそった回答は不可能

で、メジャーなコンパイラや環境に対応すればほぼ正解としてみる
軽くググった感じじゃファイル名かフルパスのどちらかしかない←これが大前提
そこでargv[0]末尾からファイル名らしき部分を抜き出してみる
これでほぼ正解じゃね?どうよ
69デフォルトの名無しさん:2005/10/08(土) 04:44:07
↓68の模範解答
70デフォルトの名無しさん:2005/10/08(土) 04:48:37
>>60の解答みたいだけど2chネラー向きの
ファイル名表示ソフトつーのを作ってみるわ
もちろんWindowsネイティブな。少しまちなー
71デフォルトの名無しさん:2005/10/08(土) 04:51:52
おまいらソース出さないと何も言わないし
ソース出しても碌なこと言わないな
72デフォルトの名無しさん:2005/10/08(土) 04:52:40
メジャーというとWindowsとMacとUNIXくらいか?
MacOS9のも頼むな
73デフォルトの名無しさん:2005/10/08(土) 08:59:19
>>72
CP/Mに対応しろと言われるより嫌
74デフォルトの名無しさん:2005/10/08(土) 09:15:14
winならGetModuleFileName使えば解決だと思われ。

win32apiは駄目?

そうですか。
75デフォルトの名無しさん:2005/10/08(土) 09:24:41
まあ環境依存の問題はNGってことで。
7674:2005/10/08(土) 09:35:02
一応winならコンパイラにも依存しない>>60の回答

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

int main(){
char name[MAX_PATH]={0};
GetModuleFileName(GetModuleHandle(0),name,MAX_PATH);
printf("私の名前は%sです",strrchr(name,'\\')+1);
return 0;
}

はいはい次次
77デフォルトの名無しさん:2005/10/08(土) 09:49:35
>>76
GetModuleFileName(0, で平気のはず。
7874:2005/10/08(土) 09:55:17
建前だ建前。
79デフォルトの名無しさん:2005/10/08(土) 12:45:31
>>75
ハゲド
80デフォルトの名無しさん:2005/10/08(土) 13:14:14
Linuxはargv[0]の結果って統一されてるの?ディストリ依存?
81デフォルトの名無しさん:2005/10/08(土) 13:14:58
>>70
>もちろんWindowsネイティブな。
ハゲワロス
82デフォルトの名無しさん:2005/10/08(土) 13:15:13
>>60
cygwin入れてgcc使ってる環境では単純に下のでできた。

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

int main(int argc, char *argv[])
{
printf("私の名前は %s です。\n", argv[0]);
return 0;
}
83デフォルトの名無しさん:2005/10/08(土) 14:47:43
ポポ巣たん結婚してー
84デフォルトの名無しさん:2005/10/08(土) 14:58:12
>>60
仕様に沿った解答
#include <stdio.h>

int main(int argc, char ** argv)
{
  if (argc && argv[0][0] != '\0') {
    printf("私の名前は %s です。\n", argv[0]);
  } else {
    printf("無理\n");
  }
  return 0;
}
85デフォルトの名無しさん:2005/10/08(土) 16:48:41
>>http://pc8.2ch.net/test/read.cgi/tech/1127501670/973

#include <stdio.h>

int main()
{
    printf("int %d\n", sizeof(int));
    printf("short %d\n", sizeof(short));
    printf("long %d\n", sizeof(long));
    printf("float %d\n", sizeof(float));
    printf("double %d\n", sizeof(double));
    printf("wchar_t %d\n", sizeof(wchar_t));
    printf("char %d\n", sizeof(char));

    return 0;
}

本とググって見つけたのはこれで全部
これ以上の型は知らん
86デフォルトの名無しさん:2005/10/08(土) 16:49:12
typedef
87デフォルトの名無しさん:2005/10/08(土) 16:59:14
>>85の挑戦項目のほうって、自分で計算式を書く以外に方法ってある?
88デフォルトの名無しさん:2005/10/08(土) 17:00:49
>>86
printf("typedef %d\n", sizeof(typedef));
だめだったぞ
89デフォルトの名無しさん:2005/10/08(土) 17:03:16
>>85
配列とかポインタとか構造体とか共用体とか列挙体とか long longとかlong doubleとか
ついでに言うとsizeof演算子の返す型はsize_t型だからいきなり%dとかやると未定義動作
%zu(C99)と書くかキャストしる
90デフォルトの名無しさん:2005/10/08(土) 17:11:57
>>87
つ<limits.h><float.h>
91デフォルトの名無しさん:2005/10/08(土) 17:13:15
long longとかlong doubleとか単語2つの型って参考にしたやつには
載ってなかったぞ
何か違うの?
92デフォルトの名無しさん:2005/10/08(土) 17:23:01
>>87
2の補数以外完全無視でcharが8bit決め打ち。しかも整数型限定という駄目駄目っぷりで良ければ

#include<stdio.h>
#define min(type) ((long)((type)-1<0 ?(-1l<<(sizeof(type)*8-1)):0))
#define max(type) ((unsigned long)((-1ul)>>(32-sizeof(type)*8+((type)-1<0))))
#define X(type) #type,(int)sizeof(type),min(type),max(type)
#define print_type(type) printf("%14s %4d %24ld %24lu \n", X(type));
#define su_print_type(type) print_type(type);print_type(signed type);print_type(unsigned type)
int main()
{
    printf("%14s %4s %24s %24s \n","type","size","min","max");
    su_print_type(int);
    su_print_type(short);
    su_print_type(long);
    print_type(wchar_t);
    su_print_type(char);
    return 0;
}
93デフォルトの名無しさん:2005/10/08(土) 17:35:40
ヘッダファイルなんてかかれても全然わかんねーぞ
最近スレのレベル高すぎ
94デフォルトの名無しさん:2005/10/08(土) 17:54:48
>>93
邪魔だから黙ってろ
95デフォルトの名無しさん:2005/10/08(土) 18:09:07
うっせーバカ
96デフォルトの名無しさん:2005/10/08(土) 18:12:44
>>94
横からだが俺も>>93に同意。
もう「今日から」とかいうレベルじゃない(初代スレ立ったの24日だし
97デフォルトの名無しさん:2005/10/08(土) 18:14:02
>>93
分かる所から手ぇつければ良いんだよ

無理に理解しようとすると挫折するから
98デフォルトの名無しさん:2005/10/08(土) 18:16:36
↓簡単な問題
99デフォルトの名無しさん:2005/10/08(土) 18:18:08
wiki見ろよ

簡単つったらhello world表示
100デフォルトの名無しさん:2005/10/08(土) 18:20:37
あんなのわざわざ見るバカいねーよ
101デフォルトの名無しさん:2005/10/08(土) 18:24:17
102デフォルトの名無しさん:2005/10/08(土) 18:25:58
ここで問題出すから意味あるんだよ
くだらねえ
103デフォルトの名無しさん:2005/10/08(土) 18:29:56
早く出せ
104デフォルトの名無しさん:2005/10/08(土) 18:30:44
再帰の問題お願いします
105ねた:2005/10/08(土) 18:31:13
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void){
int num, inp, count;

srand(time(NULL));
num = rand() % 1000;
printf("3桁の数を当てて\n");
count = 0;
do{
 ++count;
 printf("数は? >> "); scanf("%d", &inp);
 if(num < inp) printf("答えは入力した数値より小さい値です。\n");
 if(num > inp) printf("答えは入力した数値より大きな値です。\n");
}while(num!=inp);
printf("*** %d回で当たりです ****\n", count);
return 0;
}


こいつを参考にして、人間が準備した数を当てるプログラムを作れ。
すなわち、人間に「この数であってますか?」と質問、人間は大小か当りを答える。
(但し嘘のヒントといったずるはなしで...)
なお、ヒントを無視して
・100〜999までを順番に質問してくる奴
・乱数ででたらめに選んだ数で質問してくる奴
は却下w

→高度な奴
嘘のヒントを教えられても「そういつは非論理的ですね」と指摘できるようにする
106デフォルトの名無しさん:2005/10/08(土) 18:38:36
全然わかんねーぞレベル下げろゴルァ
C言語始めたばかりの人間のためのスレだろ
107ほぼ、なっち:2005/10/08(土) 18:39:01
再帰の問題
「隣り合う2つの数を加えると、次の数に等しくなる」という規則をもった数列
1,1,2,3,5,8,13,21,34・・・
を出力するプログラム

再帰を使う事。undigned longの最大値以下でいいよ。
108デフォルトの名無しさん:2005/10/08(土) 18:58:13
undigned longの最大値っていくつ?
109ASA:2005/10/08(土) 19:06:05
こんな問題考えてみました。

入力された、1から6の数字をサイコロの目の
ように表示する。

入力が1なら、表示は
...
.o.
...
ていうイメージ

どう、簡単すぎ?
110ほぼ、なっち:2005/10/08(土) 19:06:18
間違えたw

せっかくなので
<limits.h>にある unsigned long int は ULONG_MAX 4,294,967,295
と書いておく
111>109:2005/10/08(土) 19:15:44
類似問題

デジタル時計とかの表示

 *****
*     *
*     *
*     *
*******
*     *
*     *
*     *
 *****
112111:2005/10/08(土) 19:17:14
ずれまくり...orz
113デフォルトの名無しさん:2005/10/08(土) 19:22:14
計算は出来てるっぽいけど止まらない

#include <stdio.h>
#include <limits.h>

void add(unsigned long int a, unsigned long int b)
{
    if (ULONG_MAX < a+b)
    {
        return;
    }

    printf("%d\n", a+b);
    add(b, a+b);
}


int main()
{
    add(1,1);
    return 0;
}
114デフォルトの名無しさん:2005/10/08(土) 19:33:48
ULONG_MAX < a+bは常に偽(だってオーバフローするから)
だから式の順番をちょっと変えて、ULONG_MAX -b< a
とかにすれば良いと思うよ
115デフォルトの名無しさん:2005/10/08(土) 20:43:31
ム板勢いランキング一位返り咲きオメ
116デフォルトの名無しさん:2005/10/08(土) 20:55:37
>>111
先生、意味がわからないです
117デフォルトの名無しさん:2005/10/08(土) 21:06:57
ところでみんなはエディタはメモ帳?
なんかC用の使いやすいエディタないかな
118デフォルトの名無しさん:2005/10/08(土) 21:07:05
>>111
時計を作れって問題じゃないよね?
#include <stdio.h>
#define N  "        "
#define W  " ****** "
#define T  "*      *"
#define L  "*       "
#define R  "       *"
const char * number_display_for_1_digit(int value, int line_number) {
  static const char * pattern[][9] = {
    {W,T,T,T,N,T,T,T,W},{N,R,R,R,N,R,R,R,N},{W,R,R,R,W,L,L,L,W},{W,R,R,R,W,R,R,R,W},{N,T,T,T,W,R,R,R,N},
    {W,L,L,L,W,R,R,R,W},{W,L,L,L,W,T,T,T,W},{W,R,R,R,N,R,R,R,N},{W,T,T,T,W,T,T,T,W},{W,T,T,T,W,R,R,R,W}
  };
  if (value < 0 || value >= 10 || line_number < 0 || line_number >= 9) return NULL;
  return pattern[value][line_number];
}
int main(void){
  int val;
  while (scanf("%d", &val) == 1 && val >= 0) {
    int values[10], digits = 0, i, j;
    do { values[digits] = val % 10; val /= 10; digits++; } while (val);
    for (i = 0; i < 9; i++) {
      for (j = digits - 1; j >= 0; j--) printf(" %s ", number_display_for_1_digit(values[j], i));
      puts("");
    }
  }
  return 0;
}
119デフォルトの名無しさん:2005/10/08(土) 21:19:16
>>101
更新乙
120デフォルトの名無しさん:2005/10/08(土) 21:25:52
>>106
何が全然わからないのか書いてくれ。
121デフォルトの名無しさん:2005/10/08(土) 22:03:01
>>107
#include <stdio.h>

unsigned long int fibonacci(int idx)
{
  static unsigned long table[100];
  if (idx < 0) return 0;
  if (!table[idx]) table[idx] = idx <= 1 ? 1 : fibonacci(idx - 2) + fibonacci(idx - 1);
  return table[idx];
}

int main(void)
{
  int   i;
  for (i = 0; fibonacci(i) <= -1U - fibonacci(i - 1); i++) {
    printf("%lu\n", fibonacci(i));
  }
  return 0;
}
122デフォルトの名無しさん:2005/10/08(土) 22:19:35
【ジャンル】ポインタ
【難易度】低
【問題】
配列のアドレスをすべて表示しなさい
例えばint n[10]なら10個全部です
123デフォルトの名無しさん:2005/10/08(土) 22:25:32
( ´D`)ノ<アーイ
124デフォルトの名無しさん:2005/10/08(土) 22:26:34
なぁ、おまいら、自分はCを始めて2ヶ月くらいになるんだけどな、
こないだの日経ソフトウェアに載ってた、JAVAのプログラム↓
/*
*
*今日の金運は、
*
*貧乏    普通    金持ち
*
*->->->->->->->->*
*
*/
って表示する占いプログラムを
C言語で作ってみて、、
最後に printf("今日も一日頑張って下さい\n");
をくっつけたんだけど、
その後に
Press any key to continue
の機能がデフォルトで欲しいんだけど。
VBC++とかで普通にF5で実行すると、
結果を見るまもなくすぐにコンソールウィンドウが
閉じてしまうのでこの機能が欲しい。
     情報求ム。
125デフォルトの名無しさん:2005/10/08(土) 22:31:59
#include <stdio.h>

int main(){
int n[10], i;
for (i = 0; i < 10; i++)
printf("%p\n", &n[i]);
return 0;
}
126デフォルトの名無しさん:2005/10/08(土) 22:32:33
>>124
CTRLを押しながらF5
127デフォルトの名無しさん:2005/10/08(土) 22:40:11
だから、ソレだとEXEファイルだけで(VC++起動しないで)
実行したときには結果も何もワカラナイって話だ。
128デフォルトの名無しさん:2005/10/08(土) 22:42:09
>>127
コマンドプロンプトから実行しろ。
129デフォルトの名無しさん:2005/10/08(土) 22:55:43
それじゃあ
Press any key to continue
はどうなるんだよ。

根本的な解決にはなってない。
いちいち「EXIT」と入力するより
ボタンひとつで終了させたい。
130デフォルトの名無しさん:2005/10/08(土) 23:02:27
>>129
面倒な香具師だなぁ。
--
そのプログラム
pause
--
ってバッチでも作ってそれを動かせ。
131デフォルトの名無しさん:2005/10/08(土) 23:06:33
return 0の前に
getchar();でもsystem("PAUSE");でも入れとけばええやん。
132デフォルトの名無しさん:2005/10/08(土) 23:09:27
やべぇ、ちょっと思ってたのと違うけど、
出来たできた!!
感激です、サンクス子!!
133デフォルトの名無しさん:2005/10/08(土) 23:32:02
       そのお茶もらうわよ
あ、だめ それにさわっちゃ…

   [;´Д`]  (Д´;)
    / v   (( 旦/\
   Π ̄| | ̄ ̄| | ̄Π


      ゴゴゴゴ…   ズズズズ…
   [;´Д`]         (Д´;)
    /v 旦          /)
   Π| ̄ ̄| )))     ((( | ̄Π


           ズモモモモモモ…
      [;´Д`]          (Д´;)
| ̄ ̄ ̄|  ム旦  | ̄ ̄ ̄|ll     /)
\ ll l \| ̄ ̄|/ lll l / ))    | ̄Π


 | ̄ ̄ ̄|  [;´Д`]  | ̄ ̄ ̄|  ぺ…
 \    \ ム旦J /   /   ペヤンゴゥ
   \___| ̄T ̄|__ /
  <| ・ /  | ̄|  ヽ |>
    | ・    」_|_    |
     ̄//|_] [_|ハ ̄
     |~| |___| |~|     (Д´;)
     ○ |___| ○      /)
       ((   ))       | ̄Π
       ̄     ̄
134デフォルトの名無しさん:2005/10/09(日) 20:39:01
age
135デフォルトの名無しさん:2005/10/10(月) 14:45:46
【問題】
華氏⇔摂氏の温度換算プログラムを作れ
また、0℃〜100℃の対応表を表示せよ
136デフォルトの名無しさん:2005/10/10(月) 14:51:03
【問題】
単語カウントプログラムを作れ

単語は英字ではじまり英字・数字が連続したものである
単語はスペースで区切られている
137デフォルトの名無しさん:2005/10/10(月) 14:56:09
【問題】
100までの合計を求めよ
for、while、gotoを使った3通りのプログラムを作成せよ
138デフォルトの名無しさん:2005/10/10(月) 14:56:33
>>136
お前もしや「Cの絵本」持ってないか?
139デフォルトの名無しさん:2005/10/10(月) 14:59:41
>>138
なかなか良さそうな本ですね
問題はK&Rを見ながら考えました
140デフォルトの名無しさん:2005/10/10(月) 15:04:26
>>139
おk。俺の思い違いか。
つい最近読んだら丁度書いてあったんでつい。
141デフォルトの名無しさん:2005/10/10(月) 18:26:09
>>137
/*
forを使って100までの合計
*/
#include <stdio.h>

int main()
{
    int loop, gokei;

    gokei=0;
    for (loop=0 ; loop<=100 ; loop++)
    {
        gokei+=loop;
    }

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

    return 0;
}
142デフォルトの名無しさん:2005/10/10(月) 18:28:12
>>137
/*
whileを使って100までの合計
*/

#include <stdio.h>

int main()
{
    int loop, gokei;

    gokei=0;
    loop=0;
    while (loop<=100)
    {
        gokei+=loop;
        loop++;
    }

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

    return 0;
}
143デフォルトの名無しさん:2005/10/10(月) 18:33:26
>>137
#include <stdio.h>

int main()
{
    int loop, gokei;

    gokei=0;
    loop=0;

loop1:
    gokei+=loop;
    loop++;

    if (loop<=100)
    {
        goto loop1;
    }

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

    return 0;
}

/*
whileとgotoでloop++の場所を間違えてしまって思ったより難しかった
*/
144デフォルトの名無しさん:2005/10/10(月) 18:49:37
>>136
#include <stdio.h>
#include <ctype.h>

int main()
{
    char *text="this is a pentium4";
    int count;
    int mojisuu;

    count=0;
    mojisuu=0;
    while (*(text++) != NULL)
    {
        if (isalpha(*text) && mojisuu==0)
        {
            mojisuu++;
            count++;
        }

        if (*text == ' ')
        {
            mojisuu=0;
        }
    }

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

    return 0;
}
145デフォルトの名無しさん:2005/10/10(月) 18:54:04
説明くらい書け
146144:2005/10/10(月) 18:55:48
>>145
俺のことですか?スミマセン
いつもどおりの解答です
採点お願いします
147デフォルトの名無しさん:2005/10/10(月) 19:32:54
単語は英字ではじまり英字・数字が連続したものである
じゃないんですか?数字は?
148デフォルトの名無しさん:2005/10/10(月) 20:48:58
xのy乗を求める問題なんだけど、どこかへんなところある?
include <stdio.h>
#include <math.h>


main()
{
double x,y,z;

printf("x =");
scanf("%lf",&x);
printf("y =");
scanf("%lf",&y);

z = pow(x ,y);
printf("x\ty = %lf", z);
}
149デフォルトの名無しさん:2005/10/10(月) 20:49:49
>>146
NULLの使い方が変態。
150デフォルトの名無しさん:2005/10/10(月) 20:55:46
>>144
変数mojisuuは名前から単語の文字数と受け取れるが、実際には0か1のどちらかであり変数名の意味と異なります。

また>>147で書かれているように数字が無視されています。
これはこの問題で数を数えるという点では問題ないと思われるが、こういうのは間違いなくバグにつながります。

文字列の終端はNULLではなく\0です。かなり問題。てか警告でない?

各単語の文字数を出すプログラムに変えてみて下さい。そのプログラムがいかにおかしいかがわかると思います。
で、作りなおしてみて下さい。
151デフォルトの名無しさん:2005/10/10(月) 21:01:29
>>149
禿ワロス
152デフォルトの名無しさん:2005/10/10(月) 21:02:50
>>148
一行目の#
printfでのlf
returnくらい書こう
153デフォルトの名無しさん:2005/10/10(月) 21:06:39
質問ですが、
コンパイルエラーでセグメンテーションの〜と
でるのですが、これは何を指摘したものですか?
教えて下さいよろしくお願いしますm(_ _)m
154デフォルトの名無しさん:2005/10/10(月) 21:08:46
>>153
質問の仕方を学んでからにしろ。
155デフォルトの名無しさん:2005/10/10(月) 21:10:02
>>153
学びに逝ってきます・・・
156デフォルトの名無しさん:2005/10/10(月) 21:11:50
>>153
おいおいマイケル、道順の説明でガーと行ってダーっと曲がってなんて説明、アリかい?
157デフォルトの名無しさん:2005/10/10(月) 21:15:01
>>156
迷惑おかけしました
ググって探してきますのでスルーして下さい
158デフォルトの名無しさん:2005/10/10(月) 21:56:52
printfでのlf

C99では無問題
159デフォルトの名無しさん:2005/10/10(月) 22:04:14
>>137
一番望ましいのは和の公式使ったプログラムだゴルァ
160144:2005/10/10(月) 22:05:45
アドバイスしてもらった所を直しました
単語の文字数を数えます

#include <stdio.h>
#include <ctype.h>

int main()
{
    char *text="this is a pentium4";
    int count;
    int mojisuu;

    count=0;
    mojisuu=0;
    while (*text != '\0')
    {
        if (isalpha(*text))
        {
            if (mojisuu==0)
            {
                count++;
            }
            mojisuu++;
        }
161144:2005/10/10(月) 22:06:18
        if (*text == ' ')
        {
            printf("%d文字\n", mojisuu);
            mojisuu=0;
        }
        text++;
    }
    printf("%d文字\n", mojisuu);

    printf("単語%d個\n", count);

    return 0;
}
162デフォルトの名無しさん:2005/10/10(月) 22:14:54
>>161
数字はどうした。指摘された点くらい直せ。
それ以前に実行結果を確認してから書け。pentium4がお前のプログラムでは何文字になる?
ついでに最初と最後にスペースいれてみろ。" This is a pentium4 "って。
結果をみて直しせ。
163デフォルトの名無しさん:2005/10/10(月) 22:23:25
結果を見て直すのは
とても難しいと思うな
164デフォルトの名無しさん:2005/10/10(月) 22:23:36
ごめん。pentium4の文字数は正しくでてしまうな。
pentium44444とかにしてみ。
165144:2005/10/10(月) 22:59:08
早速直しました
手で数えて確認したので、今度こそ間違いありません

#include <stdio.h>
#include <ctype.h>

int main()
{
    char *text=" this is a pentium44444 ";
    int count;
    int mojisuu;

    count=0;
    mojisuu=0;
    while (*text != '\0')
    {
        if (isalpha(*text))
        {
            if (mojisuu==0)
            {
                count++;
            }
            mojisuu++;
        }
        if (isdigit(*text))
        {
            mojisuu++;
        }
166デフォルトの名無しさん:2005/10/10(月) 22:59:39
        if (*text == ' ')
        {
            printf("%d文字\n", mojisuu);
            mojisuu=0;
        }
        text++;
    }
    printf("%d文字\n", mojisuu);

    printf("単語%d個\n", count);

    return 0;
}
167デフォルトの名無しさん:2005/10/10(月) 23:00:01
isalnum()・・・。
168デフォルトの名無しさん:2005/10/10(月) 23:01:30
>>165
追加で問題あげよう

returnの前にtextの文字列を表示しなさい
169デフォルトの名無しさん:2005/10/10(月) 23:05:00
>>166
実行結果を見て「0文字」と出てきてなんとも思わないの?
「0文字」なんて出てこないようにしてみて下さい。
170デフォルトの名無しさん:2005/10/10(月) 23:08:37
wiki重いぞ
171デフォルトの名無しさん:2005/10/10(月) 23:10:10
>>169
単に
if ( mojisuu != 0 ) { printf("%d文字\n", mojisuu); }
って書くだけジャネ
172デフォルトの名無しさん:2005/10/10(月) 23:22:25
>>171
いや・・・そうだけど・・・そういうことじゃなくて・・・
このプログラムだと前後の空白や連続した空白を「単語」として認識しているわけじゃん?
文字数や単語数を表示っていう問題の答えとしては間違ってないけど、それってなんかおかしいだろって言いたかったの。
そういうのがバグの元になるよっていいたかったのだが・・・
173デフォルトの名無しさん:2005/10/10(月) 23:52:05
>>166
がんばっている君にヒントをあげます。

例えば
if (mojisuu==0){
 count++;
}
ってさ、そのまま読めば「文字数が0個のとき単語の数を1個増やす」でしょ。直感的にわかりにくくない?まぁ、これくらいならわかるけどね。
プログラム書くときどうしてもこういった表現がでてくるのはしょうがないけどさ、なくせるならなくしたいものなの。
そして今回の問題ならもっと「読みやすい、理解しやすい」プログラムが書けます。

例えば
1.与えられたインデックスの文字がスペースなら、次の英字または終端文字までインデックスを進める関数
2.与えられたインデックスの文字が英字なら、次のスペースまたは終端文字までインデックスを進める関数
を作ってみてください。それを使って単語数と文字数を出すプログラムを作ってみて下さい。
174デフォルトの名無しさん:2005/10/11(火) 00:09:01
>1.与えられたインデックスの文字がスペースなら、次の英字または終端文字までインデックスを進める関数
>2.与えられたインデックスの文字が英字なら、次のスペースまたは終端文字までインデックスを進める関数

よくない
「ふらぐ」使うべき
175デフォルトの名無しさん:2005/10/11(火) 00:19:12
>>174
何故?せめて理由を書いて下さい。
176デフォルトの名無しさん:2005/10/11(火) 00:24:50
連結リストの超簡単な問題をお願いします
難しいのはぜったい無理っす(><)
177デフォルトの名無しさん:2005/10/11(火) 00:38:13
>>176
【問題】
以下の構造体を用いて、単方向リストを作れ。
struct field_t {
 int val;
 struct field_t *next;
}

整数値をランダムに10個発生させてその値をリストの最後尾に追加していき、最後にリストの先頭から順に表示。
178デフォルトの名無しさん:2005/10/11(火) 02:11:29
>>174
普通>>173の言うようなプログラムになると思うが、何がよくないんだ?
つーかフラグの意味がわからん。初心者用のスレなんだからもう少し説明しろよ。
179デフォルトの名無しさん:2005/10/11(火) 03:38:07
>174はてんこもりのフラグ引き数を持った一つの関数の中で細かく分岐させたい教条主義者かと。
180デフォルトの名無しさん:2005/10/11(火) 06:39:12
>>177
本を参考にしながら作ってみますた
http://hs.or.tp/php/uploader/up/code060.c
181デフォルトの名無しさん:2005/10/11(火) 11:49:34
>>178のいう事は激しく同意
初心者を容易にフラグへ依存させるべきではない。
フラグを使うのは中級者以上になってからだな
182デフォルトの名無しさん:2005/10/11(火) 12:47:47
初心者の壁を越えるにはどうすればいいんですか?
一通りある程度理解したんだけどコードが書けない・・・
183デフォルトの名無しさん:2005/10/11(火) 12:56:13
まずは何か作りたい物の目標を持つことじゃない?
目標が決まったら、それに必要な知識や情報を自分で集めてみる。
なんだかんだ言って自分で1からコードを書き始めると
参考書の理解不足な部分とか、網羅されてない部分がゴロゴロ出てくるから
そこに自力で対処できるようになればもう初心者の枠は超えてるかと。
184デフォルトの名無しさん:2005/10/11(火) 17:08:25
>>181
フラグを使わなくなるのは、どうなってからでしょうか?
185デフォルトの名無しさん:2005/10/11(火) 17:23:01
こうしなきゃダメなんて考えてると何も作れなくなるから
最初は好きなように作ればいい。
あとで見直してこっちの方がよかったなとか
だんだん進歩していくから心配いらない。
186デフォルトの名無しさん:2005/10/11(火) 17:23:42
初めからフラグ使ったほうがいいなと思ったら使えってこと?
187デフォルトの名無しさん:2005/10/11(火) 17:24:53
マンコってこと?
188デフォルトの名無しさん:2005/10/11(火) 17:30:49
入門書の演習には回答がついてないよな
回答に頼ってるといつまでも自分でプログラム作れない。
189デフォルトの名無しさん:2005/10/11(火) 17:33:13
そして独り善がりな書き方が染み付いていく
190デフォルトの名無しさん:2005/10/11(火) 19:42:51
>>183>>185
参考になりましたよ!
ここの課題を出来そうなものから作ってみます(`・ω・´)
191デフォルトの名無しさん:2005/10/11(火) 20:39:44
typedefとstructが別々の機能だと気づくまでに10年かかった俺様がきましたよ
192デフォルトの名無しさん:2005/10/11(火) 21:04:33
http://gamdev.org/w/?cmd=search&word=%5B%5B%A4%AA%A4%DE%A4%A4%A4%E9%A1%AA%BA%A3%C6%FC%A4%AB%A4%E9C%B8%C0%B8%EC%A4%F2%B3%D8%A4%F3%A4%C7%A4%A4%A4%AF%A4%BE%A1%BC%A1%AA%A5%D1%A1%BC%A5%C82%5D%5D

wiki更新しました。過去問を探すのに便利なのでご利用ください。
時間帯によってはちょっと重いですが今ぐらいの時間なら大丈夫だと思います。
193144:2005/10/11(火) 21:57:19
今日もよろしくお願いします
昨日の貰ったアドバイスを踏まえて>>168>>173でいただいた問題を解きました

#include <stdio.h>
#include <ctype.h>

//英字または終端文字まで進めたポインタを返します
char *forward_space_to_alpha(char *text)
{
    while (*text != '\0')
    {
        if (isalpha(*text))
        {
            break;
        }
        text++;
    }

    return text;
}

//スペースまたは終端文字まで進めたポインタを返します
char *forward_apha_to_space(char *text, int *mojisuu)
{
    *mojisuu=0;
    while (*text != '\0')
    {
        if (isspace(*text))
        {
            break;
        }
        text++;
194144:2005/10/11(火) 21:58:20
        (*mojisuu)++;
    }

    return text;
}


int main()
{
    char *text=" this is a pentium44444 ";
    int tangosuu;
    int mojisuu;

    tangosuu=0;
    mojisuu=0;
    while (*text != '\0')
    {
        if (isalpha(*text))
        {
            text=forward_apha_to_space(text, &mojisuu);
            printf("%d文字\n", mojisuu);
            tangosuu++;
        }
        else if (isspace(*text))
        {
            text=forward_space_to_alpha(text);
        }
195144:2005/10/11(火) 21:59:44
        else
        {
            text++;
        }
    }

    printf("単語%d個\n", tangosuu);

    text--;
    while (*text != '\0')
    {
        text--;
    }
    text++;

    printf("%s\n", text);

    return 0;
}
196デフォルトの名無しさん:2005/10/11(火) 22:12:22
しつこいですが
数字は無視ですかそうですか。
197デフォルトの名無しさん:2005/10/11(火) 22:37:28
>>193
驚いたな。
char DUMMY[4] = {'A','B','C','D'};
char *text=" this is a pentium44444 ";
↑のような状態だと行き過ぎる可能性があるぞ
198デフォルトの名無しさん:2005/10/11(火) 22:37:48
>>195
while (*text != '\0') {
 text--;
}
これはtextのポインタを先頭へと戻している処理だと思います。
さて、文字列の先頭は'\0'でしたか?

>>168の人は遠回しに「変数textを書き換えたらtextの先頭のアドレスがわからなくなるだろ?」と言っていると思われます。
もう一度処理を考え直してみて下さい。

else {
 text++;
}
どんな条件のときにこのelse節が実行されますか?


>>196
無視されてないと思うけど・・・

>>180
リンクはらないで普通にここに書き込んだら?
199デフォルトの名無しさん:2005/10/11(火) 22:48:20
>>198
>無視されてないと思うけど・・・
forward_space_to_alphaですっとばされるぞ
200デフォルトの名無しさん:2005/10/11(火) 22:51:43
>199
>136
よく嫁
仕様だ
201デフォルトの名無しさん:2005/10/11(火) 22:55:43
問題の理解の仕方が人によって違うような。

「123sigo」は
単語1、文字数7 (出題者の意図と違うと思う)
単語1、文字数4 (上のプログラムの動作?)
単語0、文字数数える必要なし (俺が思ってた出題者の意図)
202デフォルトの名無しさん:2005/10/11(火) 23:04:15
>>198
>リンクはらないで普通にここに書き込んだら?

なんで?
203144:2005/10/11(火) 23:09:54
>>136の条件で用意された単語を数えろという問題だと解釈してました
実は逆で、どんな文字列が用意されてるかわからないが
>>136の条件を満たすもののみ数えろという問題ならずっと難しいです
すぐにはちょっと想像できないです

とりあえず今までのプログラムを数字で始まる単語に対応させました
さらに>>197>>198でいただいた問題も解いています


#include <stdio.h>
#include <ctype.h>

//英字、数字または終端文字まで進めたポインタを返します
char *forward_space_to_alnum(char *text)
{
    while (*text != '\0')
    {
        if (isalnum(*text))
        {
            break;
        }
        text++;
    }

    return text;
}

//スペースまたは終端文字まで進めたポインタを返します
char *forward_alpha_to_space(char *text, int *mojisuu)
204144:2005/10/11(火) 23:10:56
{
    *mojisuu=0;
    while (*text != '\0')
    {
        if (isspace(*text))
        {
            break;
        }
        text++;
        (*mojisuu)++;
    }

    return text;
}


int main()
{
    char *text=" this is a pentium44444 123 456abc ";
    //char text[4] = {'A','B','C','D'};
    char *text_copy;
    int tangosuu;
    int mojisuu;
    int text_size;

    text_size=sizeof(text);
    if (text[text_size] != '\0')
    {
        printf("終端が\\0じゃないです\n");
        return 1;
205144:2005/10/11(火) 23:11:32
    }

    text_copy=text;

    tangosuu=0;
    mojisuu=0;
    while (*text_copy != '\0')
    {
        if (isalpha(*text_copy))
        {
            text_copy=forward_alpha_to_space(text_copy, &mojisuu);
            printf("%d文字\n", mojisuu);
            tangosuu++;
        }
        else if (isspace(*text_copy))
        {
            text_copy=forward_space_to_alnum(text_copy);
        }
        else if (isdigit(*text_copy))
        {
            text_copy=forward_alpha_to_space(text_copy, &mojisuu);
        }
        else
        {
            text_copy++;
206144:2005/10/11(火) 23:12:03
            printf("実行されません\n");
        }
    }

    printf("単語%d個\n", tangosuu);

    printf("%s\n", text);

    return 0;
}
207デフォルトの名無しさん:2005/10/12(水) 00:24:56
if (text[text_size] != '\0')
{
 printf("終端が\\0じゃないです\n");
 return 1;
}
この処理に何の意味がある?文字列の終端は'\0'だ。

else
{
 text_copy++;
 printf("実行されません\n");
}
実行されないのになんで書くんだ?

144は指摘された点をつぎはぎのように書き加えていくんじゃなくて、
今まで指摘されたことを総合して、もう1度最初からプログラムを書いた方がいいぞ。
処理の仕方をもう1度よく見直せ。自分のプログラム見てわかりにくいと思わないか?
>>173に書かれているような関数を使って、もっと簡潔に書けるから考えてみろ。
208174:2005/10/12(水) 02:27:46
細かく関数に分割したところで簡潔にならないなら本末転倒w
初心者に限らずプログラムはできる限りシンプルな方がよい。

そもそも数字で始まるのは単語でなくていいのか?というのはおいといて
元の問題は、
 [状態S0]:単語が始まっていない
  英字登場→単語数のカウントアップ、S1へ
  それ以外(※)→S0のまま
 [状態S1]:単語の途中
  空白登場→S0へ
  それ以外(※)→S1のまま
という2つの状態を行き来すると考える。
※英字、数字、空白以外の文字がでてきた場合はどうするのか?

具体的には「ふらぐ」ってーのでS0とS1を区別する
flag=0; /* 単語は始まっていない */
while(1文字取り出し){
 if(英字?){
  if(flag==0){
   ++単語数;
   flag=1; /* 単語が始まった */
  }
 }
 if(空白?){
  if(flag==1){
   flag=0; /* 単語が終わった */
  }
 }
}
ってな感じ。
「ふらぐ」をやたらめったらと使うべきではないが、(この程度なら)分かり易いプログラムが書ける。
209デフォルトの名無しさん:2005/10/12(水) 07:14:24
#include <stdio.h>

main()
{
int n, i, s;

printf("n を入力して下さい : ")
scanf("%d", &n)";
s=0;
for (i=1; i<=n; i++) {
s +=i;
}
printf("n=%f Sum=%d/n",n,s);
}

1 この例題を変更して1+1/2+1/3+........+1/n の結果を表示するプログラムを作成せよ

2 nの値を読み込んで、n!を計算し表示するプログラムを作成せよ

これ課題でてるんだけど解けない。。。orz
頭いい先輩方お願いします。よろしくお願いします。
210デフォルトの名無しさん:2005/10/12(水) 07:39:49
>>209
宿題スレに逝け
211デフォルトの名無しさん:2005/10/12(水) 11:39:54
>これ課題でてるんだけど解けない。。。orz
>頭いい先輩方お願いします。よろしくお願いします。

課題スレ住人に解いてもらう

次の課題も解けない

また解いて貰う

大学の授業についていけなくなる

不登校Or自主退学へ
212デフォルトの名無しさん:2005/10/12(水) 11:41:21
なんかすごいステレオタイプな大学の見方だなw
専門卒?
213デフォルトの名無しさん:2005/10/12(水) 12:45:17
>>208は粗悪品
214デフォルトの名無しさん:2005/10/12(水) 13:03:03
再帰の問題
「隣り合う2つの数を加えると、次の数に等しくなる」という規則をもった数列
1,1,2,3,5,8,13,21,34・・・
を出力するプログラム

#include <stdio.h>
void func(unsigned long i1,unsigned long i2);

int main(){
unsigned long i1=1,i2=1;
printf("%u %u",i1,i2);
func(i1, i2);
return 0;
}

void func(unsigned long i1,unsigned long i2){
unsigned long i3;
i3 = i1 + i2;
if(i2 < i3){
printf(" %u", i3);
func(i2,i3);
}
else{
printf("\n");
}
}
215デフォルトの名無しさん:2005/10/12(水) 14:10:27
あまり良問じゃないなぁ
216デフォルトの名無しさん:2005/10/12(水) 14:11:31
フィボナッチの数列だっけ?
217デフォルトの名無しさん:2005/10/12(水) 14:13:24
再帰ならハノイの塔あたりがいいんじゃまいか?
218デフォルトの名無しさん:2005/10/12(水) 14:43:05
「このプログラムは再帰を使うべきだ!」
と見分けるポイントはどうすればいいんですか?
219デフォルトの名無しさん:2005/10/12(水) 14:45:11
220デフォルトの名無しさん:2005/10/12(水) 15:02:21
処理時間が許容範囲で、再帰を使った方が簡潔に書ける場合。
221デフォルトの名無しさん:2005/10/12(水) 15:07:19
スタックに優しい場合。
222デフォルトの名無しさん:2005/10/12(水) 15:07:20
>>219>>220
難しいですね・・・
プログラムになれるように努力します
223デフォルトの名無しさん:2005/10/12(水) 15:09:28
妖怪が人間になるより難しそうだ
224デフォルトの名無しさん:2005/10/12(水) 15:10:14
別に難しくないだろ。
基本的には再帰は使わない方向で考えてみて、
どうしても複雑になりすぎるとか、再帰を展開する方法が分からないって時に
再帰を使えばいい。
225デフォルトの名無しさん:2005/10/12(水) 15:11:02
人間の僕は、ほぼ妖怪に近いのでできそうかなw
226デフォルトの名無しさん:2005/10/12(水) 15:12:31
再帰のプログラムをまだあまり見ないので、探してきます
227デフォルトの名無しさん:2005/10/12(水) 20:14:33
ハノイの塔、アニメ付きで解説してるところみたけど
法則性が全然みえてこない
難しい
228デフォルトの名無しさん:2005/10/12(水) 20:26:25
ああいうのは本で読んで、自分で書きながら(ペンで落書きとか)、理解したほうが早いよ
229デフォルトの名無しさん:2005/10/12(水) 20:59:34
解説を見てるんなら法則性も説明してないか?
230デフォルトの名無しさん:2005/10/12(水) 21:08:57
>>208
簡潔に書けないのは初心者だから。
逆にこの程度のプログラムでフラグなんて使ってたら話にならない。
君の頭の中には拡張性という単語はないのか?君はフラグを増やして拡張するのかもしれないが。
勉強をはじめたばかりの人が拡張性などを気にする必要はないし、このプログラムを拡張するわけでもないだろうが、
最初から書こうとしなければ気にするようにもならないし、いざ必要なときにアホなプログラム書いててはまるだけ。
231デフォルトの名無しさん:2005/10/13(木) 00:46:13
 類似問題
 
 デジタル時計とかの表示
 
  *****
 *       *
 *       *
 *       *
 *******
 *       *
 *       *
 *       *
  *****
232デフォルトの名無しさん:2005/10/13(木) 00:58:06
233デフォルトの名無しさん:2005/10/13(木) 01:50:18
おすすめの参考書ってなんですか?
まじめにcに取りかかろうと思ってます。
234デフォルトの名無しさん:2005/10/13(木) 01:52:15
書籍スレ行けよ
235デフォルトの名無しさん:2005/10/13(木) 02:02:46
>>234
ほい、無だレスすまそ。これもだけど…。
236デフォルトの名無しさん:2005/10/13(木) 02:55:20
簡単に書くと
unsigned long fib(unsigned long n){
if(n<=1) return 1;
return fib(n-2)+fib(n-1);
}
こうだが...かなり遅い
237デフォルトの名無しさん:2005/10/13(木) 04:26:14
>230
必要に「なるかもしれない」ことに心を奪われてはいけません。
このようなことを YAGNI と呼びます。
これは、「You aren't going to need it (将来必要に『ならない』)」の頭文字です。

明日のために今日作業したことが無駄になるより、明日必要なことは明日行えばよいのです。
(今日の金は、明日の金より価値があるということを覚えておいてください)
今与えられている課題に関する要求を満たすために必要なこと「だけ」をする、と言うことです。
必要かどうか未だ分からないものを作りこまない、を覚えておきましょう。
238デフォルトの名無しさん:2005/10/13(木) 04:30:34
>>237
初心者というのは得てして要求仕様そのものが満足されてないから問題なんじゃまいか
239デフォルトの名無しさん:2005/10/13(木) 04:47:48
なおさら > 必要に「なるかもしれない」ことに心を奪われてはいけません。
w
240デフォルトの名無しさん:2005/10/13(木) 10:06:09
拡張性は皆無でも過大でも、悪い。換言するなら
仕様とは密着しすぎでも乖離しすぎでも、悪い
#あぁYAGNIなんてぇ単語を言い出す奴がいるから脊髄反射レスしちまった
241デフォルトの名無しさん:2005/10/13(木) 11:13:39
YAGNIなんて言葉はロクに考えもしないクライアントのクソい提案にだけ適用すりゃいいんだよ
242デフォルトの名無しさん:2005/10/13(木) 14:48:36
では明日のためにリファクタリングするというのはあまり良い習慣ではないのですか?
243デフォルトの名無しさん:2005/10/13(木) 17:33:57
>>231
なにそのDr.Mari○
244デフォルトの名無しさん:2005/10/13(木) 20:19:37
>>237
「拡張性を過度に考慮する」、「汎用性を過度に考慮する」のは時間と金の無駄です。
だけど、それは程度の問題です。

でも少なくとも上の問題でフラグを使うというのはありえません。というか、フラグなんて極力使わない方がよい。
「この程度ならフラグの方がわかりやすい」とか言ってる奴に限って独りよがりなプログラムを書く・・・
「そんな読みにくいプログラムわかるのは書いたお前だけだよ」というまわりの声に気付かない・・・

YAGNIなんて拡張性や汎用性を過度に考慮できるようになってから知ればいい。
245デフォルトの名無しさん:2005/10/14(金) 02:49:21
それは程度の問題です
246144:2005/10/14(金) 17:48:03
>>207で簡潔にとお題をいただいたのでやりました
#include <stdio.h>
#include <ctype.h>

//英字または終端文字まで進めたポインタを返します
char *forward_space_to_alpha(char *text)
{
    while (*text != '\0')
    {
        if (isalpha(*text))
        {
            break;
        }
        text++;
    }

    return text;
}

//スペースまたは終端文字まで進めたポインタを返します
char *forward_apha_to_space(char *text, int *mojisuu)
{
    *mojisuu=0;
    while (*text != '\0')
    {
        if (isspace(*text))
        {
            break;
        }
        text++;
        (*mojisuu)++;
247デフォルトの名無しさん:2005/10/14(金) 17:48:42
    }

    return text;
}


int main()
{
    char *text="this is a pentium44444";
    int tangosuu;
    int mojisuu;

    tangosuu=0;
    mojisuu=0;
    while (*text != '\0')
    {
        text=forward_apha_to_space(text, &mojisuu);
        printf("%d文字\n", mojisuu);
        tangosuu++;
        text=forward_space_to_alpha(text);
    }

    printf("単語%d個\n", tangosuu);

    return 0;
}
248デフォルトの名無しさん:2005/10/14(金) 19:22:08
>>247
textがスペースから始まった場合の動作がおかしいからまた怒られるよ。
249デフォルトの名無しさん:2005/10/14(金) 19:29:50
>>248
問題文の
>単語はスペースで区切られている
から先頭や最後にスペースは無いものと考えました
250デフォルトの名無しさん:2005/10/14(金) 19:36:58
いまから、C習おうと思うんですけど、まずなにからすれば良いですか?
251デフォルトの名無しさん:2005/10/14(金) 19:37:51
とりあえずコンパイラを用意。これがなきゃ始まらない。
フリーでもいいし、買ってきてもいい。
252デフォルトの名無しさん:2005/10/14(金) 19:38:06
>>250
参考書・ページを探す
253デフォルトの名無しさん:2005/10/14(金) 19:39:27
254デフォルトの名無しさん:2005/10/14(金) 19:56:30
>>251-253サンキューです!
>>252参考書買おうと思うんですけど、オススメなのありますか?
>>252さんがオススメなのでいいです。
他の人もお願いします。
255デフォルトの名無しさん:2005/10/14(金) 20:32:58
>>144さんはガンガってますね。
でも、もっと短く簡潔に書けますよ?
256デフォルトの名無しさん:2005/10/14(金) 21:27:11
>>214
(元の問題から外れるけど)やっぱり・・・
フィボナッチは再帰を使っちゃダメだ。
無駄が多すぎる。計算も遅い。

/*指定回数だけフィボナッチ数列を計算し、
出力するプログラム*/

#include <stdio.h>

int main(void)
{
unsigned long i, j, k;
int n, m;

printf("指定回数だけフィボナッチ数列を計算し出力します\n\
何回計算しますか? :");
257デフォルトの名無しさん:2005/10/14(金) 21:28:06
scanf("%d",&n);

if(n <= 0) {
return 0;
} else {

j = 0;
m = 0;

for (i = 1;m <= n;j = k) {
printf("%10d\n",i);
k = i;
i = i+j;
++m;
}
}
return 0;
}
258デフォルトの名無しさん:2005/10/14(金) 21:28:41
後は皆で
小数を入力したときの問題とか、
何回も計算できるようにループを付けたりとか、
桁あふれの部分とか、
機能を充実させて下さいな。
259デフォルトの名無しさん:2005/10/14(金) 21:35:36
uza
260デフォルトの名無しさん:2005/10/14(金) 23:27:41
>>256
んー、>>214は末尾再帰だから別に良いのでは?
常識的なコンパイラなら最適化かければ普通のループと同じで無駄もないし、計算も遅くならないし
261デフォルトの名無しさん:2005/10/14(金) 23:29:51
次の問題まだぁ〜?
262デフォルトの名無しさん:2005/10/15(土) 00:02:00
文字列で与えられた式の計算
式は自然数の加算・減算。

どう?
263デフォルトの名無しさん:2005/10/15(土) 00:39:31
>>262
例えばSEND+MORE=MONEYを解くとか?
それだと手作業で解を得るのと総当りのプログラムのどっちが早いかなw

私としては、abcd * e = fghij を解いてみてもらいたいが。
264デフォルトの名無しさん:2005/10/15(土) 00:43:53
自然数ってんだから出てくるのは0-9と+-だけじゃねえのけ?
265デフォルトの名無しさん:2005/10/15(土) 00:45:19
>144へ
ちょっと趣向を変えて、ポインタじゃなくてインデックス変数を使ってプログラムを書いてみよう。
つまり、text[idx]とかidx++で文字列にアクセスする。*textとかtext++はしない。
練習にはいいかと。
266デフォルトの名無しさん:2005/10/15(土) 02:22:06
>>262

こんな感じでどうでしょうか?
式の長さはヌル文字含めて256文字まで。1つの数字は10ケタまでです。
(本当は21億まででチェックするんだろうけど)
エラーチェックしてないので、式の途中に数字、+、-、=以外があると困ります。
1+2+3-4= みたいな感じで入力受付します。最後は必ずイコールで。
直したほうがいい所があったらアドバイスお願いします。

#include <stdio.h>
#include <ctype.h>

#define SIZE 256
#define PLUS 1
#define MINUS -1

int sampling(char *src);

int main()
{
char input[SIZE] = {'\0'};

fgets(input, SIZE - 1, stdin);

printf("%d\n", sampling(input));

return 0;
}
/*
267デフォルトの名無しさん:2005/10/15(土) 02:22:52
*/
int sampling(char *src)
{
char temp[11] = {'\0'};
int i;
int flag;

switch (*src)
{
case '+':
flag = PLUS;
src++;
break;
case '-':
flag = MINUS;
src++;
break;
case '=':
return 0;
break;
default:
flag = PLUS;
break;
}
for (i = 0; isdigit(*src) && i < 11; i++)
{
temp[i] = *src;
src++;
}
return (atoi(temp) * flag) + sampling(src);
}
268デフォルトの名無しさん:2005/10/15(土) 03:42:32
>236
unsigned long fib(unsigned long n){
static unsigned long v[50]={0};
if(n<=1) return v[0]=v[1]=1;
return ((v[n-2])?v[n-2]:(v[n-2]=fib(n-2)))+((v[n-1])?v[n-1]:(v[n-1]=fib(n-1)));
}
かるくハヤイ
269ポポ素 ◆Qgm8RFT0/. :2005/10/15(土) 06:23:20
おはようございます!お久しぶりです
先生方に質問があるので宜しくデス(><)/

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

int main() {

int a,b;
int *p,*q;
p=&a;
q=&b;
printf("a,bを入力してくれよ\n");
scanf("%d %d",p,q);
printf("a=%d,b=%d\n",*p,*q);
printf("a+b=%d\n",*p+*q);
printf("なんかおして\n");
getch();
printf("終わり");
return 0;
}

aとbに
激しい桁の数字をいれたら
例えばaに56456464645646222、bに54564444455555555555555555
をいれたら
a=8021902,b=1
ってなってa+bが計算されるわけなんだけど
intの容量をオーバーする数字をいれたら
なんでこんなことになるの?
スルーで先に進んでいいのかな
270デフォルトの名無しさん:2005/10/15(土) 10:51:15
>>269
変数は型によって入る値に限界がある。
charは-128~127、shortは-32768~32767といった感じ。intでも入って10桁。
これを超えるとオーバーフロー(桁溢れ)が起こって全く違うの数値になる。

しかしもうポインタか。早さ的にもやる気が感じられるな。
271デフォルトの名無しさん:2005/10/15(土) 10:53:07
>intの容量をオーバー

最大値を過ぎたってことは最小値の側になる、っちゅーことだね
・最大値を超えないように入力する

・もっと大きい整数を扱える型を使う(今時のコンパイラならlong longとか...)
・整数型をあきらめる(doubleとかにする)
しかないんだよね...
272デフォルトの名無しさん:2005/10/15(土) 11:27:03
どっか無料であるいいコンパイラないですか?
今ぐぐってやったんだけど、なんか起動してくれない
273デフォルトの名無しさん:2005/10/15(土) 11:31:35
氏ね
274252:2005/10/15(土) 11:41:08
>>254
俺はやさしいCから始めた。絵付きの説明がしっかりしてて入門書としては最適だと思う。
読破した後は多少難い本もいけるから、独習Cとか個人の解説ページらへんが妥当かと。本格目指すならK&Rは必読。
ttp://www.amazon.co.jp/exec/obidos/ASIN/4320026926/

ーーーーーーーーーーーここから余談ーーーーーーーーーーー
大切なのは出来るだけ多くの本を読む事、読むだけでなくサンプルプログラムや練習問題を打つ事、ノート(テキスト)を作って大切な事を書いておく。
練習問題ならこのスレで問題出るし、過去のものはwikiに載ってる(>>5)
後は自分で何も見ずにプログラムを打つ事とか。乱数とか覚えると軽いゲームが作れるから
数当てゲーム製作→条件(当たり外れ・大小)作成→ヒント機能追加→CPU追加(思考ルーチン作成)
とやると意外と面白い。というか、俺がそれに熱中して時間を忘れた事がある。

それと最後。質問できる相手とか協力できる仲間を探す。
入門書なんて分からない内は投げてしまいがちだし、独りで黙々とやるのも寂しい。仲間を探して互いに協力しあうのが最良の勉強法(まあ、それが出来れば誰も苦労しないんだが…
それぞれ違う視点からモノ見れるから、ソースの書き方やバグ発見にはとても有効。そして何より、独りよがりの考えになりにくい。
ここは仲間意識とかそういうのは無い方だから、もし探すならメーリングリスト(ML)とかいいかも。いい所があったら俺も逝くわ。
275デフォルトの名無しさん:2005/10/15(土) 11:45:32
BCCに
http://www.borland.co.jp/cppbuilder/freecompiler/

BCpad
http://hp.vector.co.jp/authors/VA017148/

BCC Developerもあるけど、
makeやリンクの概念がわからない人は、cpadのがとっつきやすい。
http://www.hi-ho.ne.jp/jun_miura/bccdev.htm
276デフォルトの名無しさん:2005/10/15(土) 12:01:24
「K&Rが必読」と言われるけど、皆さんどうやって使ってますか?
私には、どちらかと言うと単なるリファレンスだと思います。

周辺知識の無いプログラミング初心者には難しすぎるし、
ある程度書けるようになってポインタとかも例外的な使い方を覚えれば、
わかりきったこともかなりあるし、「読む」ほどじゃないと思うんですよね。
277デフォルトの名無しさん:2005/10/15(土) 12:01:59
ああ、何か日本語おかしいですねorz 逝ってきます・・・
278ポポ巣 ◆Qgm8RFT0/. :2005/10/15(土) 12:03:05
>>270 >>271
intの桁数をオーバーして入力したら
どうなるのかとおもって試したら
まったく違う数字がでたので、なんでこの数字に?と悩んでおりました
回答ありがとうございます!先生方!
この表示される数値に意味はないんよね?
オーーバーしたから変な数字になったって感じで
理解しておけばいいのかな
279ポポ巣 ◆Qgm8RFT0/. :2005/10/15(土) 12:06:46
>>272
ttp://www.borland.co.jp/cppbuilder/freecompiler/bcc55steps.html
ここ無料だよ
あたいはここのコンパイラつかっとる(^^)/
280デフォルトの名無しさん:2005/10/15(土) 12:25:58
>>278
基本的に意味は無い。
参考までに言っとくと、型の最大値を上回ると今度は桁の最小値に逝くようになってる。
例:short型に最大値の32767を代入、それに1を加えると最小値の-32768になる(初めから32768を代入しても結果は同じ
つまり、269の結果は↑の様な事を何度も繰り返して出てきた値
281デフォルトの名無しさん:2005/10/15(土) 12:27:42
↑間違えたorz「桁の最小値→型の最小値」
282デフォルトの名無しさん:2005/10/15(土) 12:39:21
>>279
ありがとうございます。今やってみたんですが、freecommandcompiler
ってやつですか?これ開こうとすると黒い画面が出てきて、一瞬にして
消えちゃうんですがなんでかわかります?ちなみに別のサイトからそこに行き着いて、
ユーザー登録なしでダウンロードしました
283デフォルトの名無しさん:2005/10/15(土) 12:43:24
>>282
使い方を調べるのも学ぶうちだ
誰かに質問する前にまずは自分で調べろ
284デフォルトの名無しさん:2005/10/15(土) 12:50:07
黒い画面が出てきて、一瞬にして消えちゃうんですが
285デフォルトの名無しさん:2005/10/15(土) 13:23:49
プログラムの開始から終了までが一瞬だから
286デフォルトの名無しさん:2005/10/15(土) 13:29:46
>>283
うーんプロパティでいろいろいじったんですけどよくわかりません。

>>285
その設定ってかえれるんですか?
287デフォルトの名無しさん:2005/10/15(土) 13:30:53
こういうときのためにコマンドプロンプトがある。
288デフォルトの名無しさん:2005/10/15(土) 14:15:06
プログラムもいいけど、OSの使い方に詳しくなろうよ
289デフォルトの名無しさん:2005/10/15(土) 14:57:12
>>288
きっびしー。時間がさらさらと流れてゆくふーーー

>>287
おお!!なんですかこれは?黒い画面が出てきてかけそうな感じ!
これでいいの?これがコンパイラ???
290デフォルトの名無しさん:2005/10/15(土) 15:00:08
できねーー・・
ちょっとすんげぇ簡単なプログラムさらしてくれない?
なんかホームページに書いてたコンパイルの方法やってもできない。
291デフォルトの名無しさん:2005/10/15(土) 15:12:35
292デフォルトの名無しさん:2005/10/15(土) 15:17:24
>>262
KWSK
293デフォルトの名無しさん:2005/10/15(土) 15:28:27
>>288
同意。
プログラムの使い方も解らないレベルで言語の勉強をしても身に付かないと思われ。
>>289
もう少しぱちょこんの勉強をしてから出直した方がいい。
そのほうが最終的に近道だと思うぞ。
294デフォルトの名無しさん:2005/10/15(土) 15:42:02
>>293
でも、漏れもN88BASICからCを勉強しはじめたとき、
コンパイルやリンクのやり方とかよくわかんなかった。
そういうものの操作とプログラミング自体は、また別のような気がするから、
とにかく操作に詳しい入門書をよく読むことだよな。

コマンドプロンプトの使いかたもよくわからない人は、
HSPあたりから始めるのがよい気がする。
http://www.onionsoft.net/hsp/
295仕様書無しさん:2005/10/15(土) 15:42:13
Cは古すぎる。
296デフォルトの名無しさん:2005/10/15(土) 15:46:18
おまえらが一言教えてやりゃ済む話じゃねーか
297デフォルトの名無しさん:2005/10/15(土) 15:46:45
温故知新
298デフォルトの名無しさん:2005/10/15(土) 15:47:28
なにがうんこちんちんやねん
299デフォルトの名無しさん:2005/10/15(土) 15:50:22
>>298
そういう言葉使いをしていると本当に性根が腐りますよ。
これまでのすべての積み重ねが今のあなたなのですから。
300デフォルトの名無しさん:2005/10/15(土) 15:59:08
知能指数=うんこちんちん
301デフォルトの名無しさん:2005/10/15(土) 15:59:37
>>294
コマンドプロンプトがわからないからと言ってHSPを勧めるのもどうかと思う。
302254:2005/10/15(土) 17:30:40
>>274さん ありがとうございます。
それから読んでみますね。
しかし、結構たかいんですね。でも、買って見ますね。
友達にいってもやるって行ってくれそうに無いなぁ…。
そのときはここに居るみんなが友達だ!
303デフォルトの名無しさん:2005/10/15(土) 17:31:55
世の中は完全にGUIに移行しちゃってるから
どうしても無理がある。
304デフォルトの名無しさん:2005/10/15(土) 18:59:58
<余談>
漏れはCの初心者本は一切読んでない。
問題は多くの本を読むことではなく、如何に本から情報を漏れなく読み取るかだと思う。
つまり、一冊の本から読み取れる量が少ないからたくさん読まなければならないんでないか?
</余談>
305デフォルトの名無しさん:2005/10/15(土) 19:03:41
>>304
読んだ本教えて
306デフォルトの名無しさん:2005/10/15(土) 19:33:35
みんな結局どんな本読むの?
漏れは、猫でも分かるを買った。
307デフォルトの名無しさん:2005/10/15(土) 19:56:02
>>306
10年くらい前だけど、記述評論社のすぐわかるC/C++という本を読んで勉強した。
この一冊以外は入門書は読んでない。
この本、解りやすく書いてあるのはいいんだが、当時のPC-9801とボーランドの
Turbo Cにべったり依存した内容なので、あまり今の人には勧められない。方言が強くてね。
この本で覚えたことを当たり前だと思って組んでいたプログラムを他人に見せて
えらく驚かれた記憶があるよ。

#include <pc98.h>ってなんだよ、とかw
308デフォルトの名無しさん:2005/10/15(土) 19:59:50
前スレは見れないの?誰かhtml化してくれよぉ。
309デフォルトの名無しさん:2005/10/15(土) 20:13:36
>>293
いや、確かにぱちょこんも必要かもしれんが、大学の授業でいるからそうも言ってらんねんだ。

>>294Cが必要なんです。

コマンドプロンプトはわからないけどコンパイルのやり方ぐらいはちょっとはわかるんだ。
ただ、大学ってやつはなぜかマックだからウィンドウズじゃわかんねぇーんだよぉ。
マックにあたるターミナルがウィンドウズでどれなのか教えてよ。
周りの俺の友だちに負けたくないんだまじ頼む。
310304:2005/10/15(土) 20:32:09
>>309
>マックにあたるターミナル
それがコマンドプロンプト(DOSプロンプト)。若干乗りは違うが、まぁ似たもんだ。
#その違いが気になり始めたらCygwinをインストールすればいい。

>>305
Cの本で買ったのは、K&RとAsciiから出てたDOSプログラミングの本。
会社で拾い読みしたのが、藤原の翁の診断室にパズル本。
C++の本ではEffectiveC++のみ。
#勿論マニュアル、WebSiteは除く。
リクエストがあれば言語歴と書籍歴を纏めてもいいけど参考にはなりそうもないね。
311デフォルトの名無しさん:2005/10/15(土) 21:02:18
>>266
式を再帰処理していくって方向は合ってると思います。
もうちょっとエラー処理やら入力に自由が有ると良いけど。

あとは乗除算や括弧のサポートなんか入れていくと
面白くなっていきますよ。余裕有れば数学関数とかも。

この手問題はコンパイラ、インタプリタの基礎技術なんで
字句解析、構文解析、でググれば色々夢が広がるかと。
exprコマンドのソース読んでみるのも良いかと思います。
312デフォルトの名無しさん:2005/10/15(土) 21:27:33
>>309
> マックにあたるターミナルがウィンドウズでどれなのか教えてよ。

WindowsXPだったら、
「スタート」→「すべてのプログラム」→「アクセサリ」→「コマンドプロンプト」
で出てくる。
GUIしか知らない人は、意外と見つけにくいのかもw
313デフォルトの名無しさん:2005/10/15(土) 21:59:59
>>306
俺は、『Cの絵本』で今現在勉強中。
ただ、俺の場合は大学の講義の副読本だったから、全くの独学の人に薦められるかは分からん。
314デフォルトの名無しさん:2005/10/15(土) 22:25:55
>>310>>312
あれ、そーなんだ?コンパイルしようとしたらできなかったから別物かと思った。
わかったもっぺんやってみるよ。ほんとうにありがとう!

315デフォルトの名無しさん:2005/10/15(土) 22:28:47
Cのエロ本
316デフォルトの名無しさん:2005/10/15(土) 22:36:24
>>314
> あれ、そーなんだ?コンパイルしようとしたらできなかったから別物かと思った。

bccにパスが通ってないかもしれん。
とりあえずフルパスを書いて、

C:\borland\bcc55\Bin\bcc32 hogehoge.c

とかやってミソ。
317デフォルトの名無しさん:2005/10/15(土) 22:55:12
それが面倒ならファイルをコマンドプロンプトのウィンドウへドラッグアンドドロップすれば、
フルパスが入力される。もちろんどんなファイルでもできる。
318デフォルトの名無しさん:2005/10/16(日) 00:01:00
319デフォルトの名無しさん:2005/10/16(日) 00:08:19
コンパイラインタプリタ〜ってなるとオートマトンとか文法とかまで勉強してる漏れは負けですか?
320デフォルトの名無しさん:2005/10/16(日) 00:12:57
>>316
うーわかんねぇ。すいませんせっかく教えてもらってんのに。
というわけで直接見てください。

一応本にあるとおりにやってみました
#include <stdio.h>

int main(void)
{
printf("bigmac\n");

return 0;
}

をexamine.cで保存
そしてコマンドプロンプトで
gcc -o examine examine.c
ってうってコンパイルしようとしたら
gccは内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ
ファイルとして認識されていませんってでました。なんのこっちゃ抹茶に紅茶
321デフォルトの名無しさん:2005/10/16(日) 00:16:30
gcc
の部分を
C:¥borland¥bcc55¥Bin¥bcc32
に置き換えてやってみれ
322デフォルトの名無しさん:2005/10/16(日) 00:23:25
>>304がCをやる以前にプログラミング経験があったのかどうか知りたいんですが
323デフォルトの名無しさん:2005/10/16(日) 00:28:06
指定されたパスは存在しませんだって。なにこれどういうこと?
324デフォルトの名無しさん:2005/10/16(日) 00:29:14
あっはっは。
大変だな、おい。
325デフォルトの名無しさん:2005/10/16(日) 00:30:19
これ以上は、お金が発生します。
326デフォルトの名無しさん:2005/10/16(日) 00:31:58
>>323
オマイさんはいったい何処にbccをインスコしたのかと
327デフォルトの名無しさん:2005/10/16(日) 00:36:10
>>323
C:\borland\bcc55\Bin\bcc32.exeってファイルがあるのかどうかを確認したほうがいいな
328デフォルトの名無しさん:2005/10/16(日) 00:37:00
>>327
ファイルの確認もできない悪寒
329304:2005/10/16(日) 00:38:39
>>322
世代的にパソコンと同時にワンボードマイコンに触れた世代なもんで、
cをやる頃には何十人もの人間をダンプリストと格闘させる原因を作る側にはなっていた。
だがしかし、当時basicやアセンブラの初心者本なんて存在さえしていなかった。
330デフォルトの名無しさん:2005/10/16(日) 00:45:47
Cの本少し古本屋で売ってこようっと。
331デフォルトの名無しさん:2005/10/16(日) 00:54:40
応募葉書まで入ってる処女本がときどき古本屋に売ってるよなw
332デフォルトの名無しさん:2005/10/16(日) 00:59:17
しょっ、しょっ、しょじょじって歌何のやつだっけか?
333デフォルトの名無しさん:2005/10/16(日) 01:07:16
>>332
たしかハマコーの地元にある寺の歌だな

334デフォルトの名無しさん:2005/10/16(日) 01:09:30
初めましてプログラムを作りたいと思い始めた初心者です
どうかプログラムのつくりからを一から簡単に教えてくれる人はいませんか?
いたら救いの手を差し伸べてください
335デフォルトの名無しさん:2005/10/16(日) 01:41:04
336デフォルトの名無しさん:2005/10/16(日) 02:36:23
>>334
ぐぐってどこかいいサイト見つけなよ
337デフォルトの名無しさん:2005/10/16(日) 04:06:54
最近Cの勉強やり始めたんだけど
wikiの問題ってそこらの教本読んだだけでもできる問題なのかな?
もしそうならやる気出てくる
338デフォルトの名無しさん:2005/10/16(日) 04:23:13
構文解析うんぬんってのを除けば、ほぼ全て入門書レベル。
339デフォルトの名無しさん:2005/10/16(日) 06:19:17
今って書籍が溢れ過ぎて逆に何やったらいいかわからん人もいそうだな
初心者と銘打ってMFCやSTLがいきなりでてる本とかあるし
340デフォルトの名無しさん:2005/10/16(日) 07:55:05
いや、少なくともそれらの書籍はC言語の初心者本ではないから何の問題もないと思うが。
#CとC++の区別ができてない書籍だと言うのなら話は別だが。
341デフォルトの名無しさん:2005/10/16(日) 08:34:47
>>338
とんくす
とりあえず本1冊終わらせてみる
342デフォルトの名無しさん:2005/10/16(日) 10:10:44
#Cって何ですか?(><)
343デフォルトの名無しさん:2005/10/16(日) 10:48:43
>>342
マジレスすると、だいたいの場合コメント(追記・チラ裏)という意味。
344デフォルトの名無しさん:2005/10/16(日) 11:17:02
問題。
質問にYes,Noで答えていくと、おすすめのC言語入門書を教えてくれるプログラムを作れ。
次のような形式のファイルを読み込んで処理を行うこと。
ファイル形式の仕様が気にいらなければ変えて良い。

----------------------- qa.txt -----------------------
# 番号:表示する文章:Yesの時に進む先,Noの時に進む先
# 番号:表示する文章:0
# 空行や#で始まる行はコメント扱い。

1:hello, world と表示するプログラムなら、よそ見しながらでも作れる。:2,5
2:ポインタがわからない。:3,4
3:前橋和弥著「C言語 ポインタ完全制覇」:0
4:B.W.カーニハン/D.M.リッチー著「プログラミング言語C」:0
5:前橋和弥著「C言語 体当たり学習 徹底入門」:0
----------------------- qa.txt -----------------------
↑データの形式を示したいだけであって、それ以上の意味はない。どれも読んだことないし。
345デフォルトの名無しさん:2005/10/16(日) 11:37:33
ウァ-
346デフォルトの名無しさん:2005/10/16(日) 11:39:04
isam
347デフォルトの名無しさん:2005/10/16(日) 11:56:55
一つ提案。 ノ
ttp://www.freeml.com/
↑ここでC初心者のML作ってみようと思うんだがどうだろう。
最近のここは問題のレベルも高いし、せいぜいあって他の誰かの解答とそれのチェック程度しか無いから学べる事が少ない、つまり、結局は入門書に頼りがちになる。
時折為になる情報は出てくるが、それ以外はほとんど勉強になってないのが現状だと思う。

もちろん入門書での独学は必須。それと平行して質問や返答・雑談を行い、C勉強の為の良い環境を作る。要は「ここ」に仲間意識をプラスしたものと考えればいい。
一つ言いたいのは、この提案はこのスレを否定するものではないという事。
前スレと比べて明らかに敷居の高くなったこの現状に付いていけない初心者の為のものであり、仲間なんて必要無い、参考書とこのスレで十分だという奴は対象にしていない。また、ここの内容にもついていけるならMLと平行して使える。

本気でやろうという奴、聞いてばかりでなく自分で調べようとする意欲のある奴は挙手頼む。
348デフォルトの名無しさん:2005/10/16(日) 12:55:32
>>325
教えてくれたら君は幸せになれるよ

>>326
え、インスコ????

>>327-328
えっと、ファイルの確認ってlsでいいんですか?これはマック限定??

だめだなさすがにすごい迷惑な気がしてきた。もう少し勉強してからきまつね(´・ω・`)
349伝説新人タクシ:2005/10/16(日) 17:11:21
>>348
bcc32.exe を検索して、コマンドプロンプトにドラッグアンドドロップ。
半角スペースを入力。またコマンドプロンプトにプログラムを書いた
ファイルをドラッグアンドドロップ。そして、Enter
これでとりあえず動くはずだから、参考まで。
手入力で走らせられたほうが後々いいんだけどね。
350デフォルトの名無しさん:2005/10/16(日) 20:31:56
誰か長さん呼んできて!
351デフォルトの名無しさん:2005/10/16(日) 23:53:04
>>347
だから、今の段階は前スレとここまでのレスを追いかけて来いって事だ
俺の始めたタイミングと違うからすれ立てる/ML作るじゃ知識が分散するだけ
どうせこのスレはパート4位で自然消滅するから、その後また1からやり直せばよい

初心者は何時になったって居なくならないんだから
352デフォルトの名無しさん:2005/10/16(日) 23:57:10
みんなどういうきっかけでCを習い始めた?
俺は、プログラムってどんなのか興味もったから。
353デフォルトの名無しさん:2005/10/17(月) 00:20:15
>>352
マイコンのプログラム書きたくて習ってる途中。
354デフォルトの名無しさん:2005/10/17(月) 00:40:25
>>352
pascalのコンパイラが手に入らなかったからかな
355デフォルトの名無しさん:2005/10/17(月) 00:52:00
もう雑談で埋めなのか?
356デフォルトの名無しさん:2005/10/17(月) 00:58:21
Windowsに入ってるコマンドプロンプトじゃlccが反応しませんって出てきました。
そこらへんはどうしたら良いのでしょうか?教えてください
357デフォルトの名無しさん:2005/10/17(月) 01:08:45
>>356
本当にそんなメッセージが出たのか?
358デフォルトの名無しさん:2005/10/17(月) 01:24:37
すみません間違いました
本当は対応してませんでした
359359 ◆q6iymjq9dk :2005/10/17(月) 13:17:43
今日から始めたいと思います。
開発環境:VC++6.0で
360359 ◆q6iymjq9dk :2005/10/17(月) 13:19:20
とりあえず、課題@
これでいいのかな?
#include<stdio.h>
int main(void)
{
printf("HelloWorld\n");
return 0;
}
361デフォルトの名無しさん:2005/10/17(月) 13:22:10
OK
362デフォルトの名無しさん:2005/10/17(月) 13:32:08
いいよー
363359 ◆q6iymjq9dk :2005/10/17(月) 13:34:23
次の課題答えあっているかどうか不安だが・・。
#include<stdio.h>
int main(void)
{
int a,b=0;
for(a=1;a<50;a++)
b=b+a;

printf("1から50までの合計は%dです。",&b);
return 0;
}
364デフォルトの名無しさん:2005/10/17(月) 13:50:41
printf文でちゃんと合計値は表示されてますか?
365359 ◆q6iymjq9dk :2005/10/17(月) 13:54:22
1245048と表示されます。明らかに大きいですね。見直して
来ます。
366デフォルトの名無しさん:2005/10/17(月) 13:54:47
それだと1〜49のような気がする
367デフォルトの名無しさん:2005/10/17(月) 13:57:26
>>363
それだと変数bのアドレスを渡してることになるよ。
scanfとprintfの違いに注意。
368デフォルトの名無しさん:2005/10/17(月) 14:00:02
ちなみに1から50までの合計値っていくつ?w
それがわかってないと、>>366の指摘って
気づかないことあるよね。
369359 ◆q6iymjq9dk :2005/10/17(月) 14:01:57
ご指摘ありがとうございます。
テキスト片手に色々弄くった結果。
何とか正常な値がでました。
int a=0,b=0;
for(a=1;a<51;a++){
b=b+a;
printf("%d",b);
printf("%d\n",a);
}
printf("1から50までの合計は%dです。",b);

>>367変数bのアドレスが1245048何ですか?
370デフォルトの名無しさん:2005/10/17(月) 14:03:58
1/2*50*(1+50)
371デフォルトの名無しさん:2005/10/17(月) 14:04:22
>>369
そうですね。
372デフォルトの名無しさん:2005/10/17(月) 14:04:45
>>369
for(a=1;a<51;a++)
より、
for(a=1;a<=50;a++)
のほうが、「1から50まで」ってわかりやすいと思うけど、どう?
373359 ◆q6iymjq9dk :2005/10/17(月) 14:08:43
>>372
そうします。

ってここまでやったけど次は何やろう?
374デフォルトの名無しさん:2005/10/17(月) 14:14:38
>>5のwikiの順にやるわけじゃないんだ?
375359 ◆q6iymjq9dk :2005/10/17(月) 14:22:38
>>374
うーん、ファイル処理とか難解なアルゴリズム
を駆使する物は未だ良く解らないので遠慮したいです。
376デフォルトの名無しさん:2005/10/17(月) 17:44:28
ファイル処理の問題での質問なんですが、
ファイルから読み込んだ数字は配列に入れるべきか、
ポインタを使うべきなのか、
どちらの方がいいのでしょうか?
377デフォルトの名無しさん:2005/10/17(月) 17:48:18
試しにポインタに入れてみてください
378デフォルトの名無しさん:2005/10/17(月) 17:51:04
>>377
そうですね、とりあえず両方やってみます!
379デフォルトの名無しさん:2005/10/18(火) 11:35:08
>ポインタを使うべき
どゆこと?もちっと詳しく

配列だと大きさをコンパイル前に決めておく必要があるけど、
大きさを実行時に決めて動的に確保する、ってこと?
380デフォルトの名無しさん:2005/10/18(火) 12:17:25
[問題]調査のサンプリング
unsigned long のM,Nを入力し、0〜Nの中から重複しないM個の整数を表示するプログラムを作れ
381デフォルトの名無しさん:2005/10/18(火) 12:47:57
>>380
よくわかりません。もちっと詳しく
382デフォルトの名無しさん:2005/10/18(火) 16:28:04
>>381
例えば、m=5、n=3000のときだと 0から3000の範囲の5個の重複しないランダムな数字、
0, 12, 543, 1015, 2020 みたいなの表示しろってことでしょう。
383デフォルトの名無しさん:2005/10/18(火) 16:56:28
unsigned long だといろいろめんどいな
わざとか?
384デフォルトの名無しさん:2005/10/18(火) 17:35:52
なにこの糞問題
4294967295個以上もの管理テーブルでも作れって?
385デフォルトの名無しさん:2005/10/18(火) 17:38:26
高々M個かN個ジャン。
386デフォルトの名無しさん:2005/10/18(火) 18:18:32
問題にはランダムとは書いてないから連続でいいんだろ
387デフォルトの名無しさん:2005/10/18(火) 18:46:17
べつに(>>382の例で言えば)randの出力値域を0〜3000
の値域に写像して取得して重複しないように5個取れば良いような気が
ところで昇順にしないと×?
388デフォルトの名無しさん:2005/10/18(火) 18:57:10
いや、その理屈はおかしい。
389デフォルトの名無しさん:2005/10/18(火) 19:25:19
一次元配列と比べて、二次元配列のポインタとの関係はどうなってるんですか?
ソース
#include<stdio.h>
int main(void)
{
int ki[4][4] ={ {01,02,03,04}, {11,12,13,14}, {21,22,23,24}, {31,32,33,34} };

int *p_ki[4][4];

p_ki[0][0] = &ki[0][0];

printf("%d",*ki[2][2]);

return 0;
}

エラー E2062 popo.c 12: 無効な間接参照(関数 main )
390間違えた^^;:2005/10/18(火) 19:30:41
#include<stdio.h>
int main(void)
{
int ki[4][4] ={ {01,02,03,04}, {11,12,13,14}, {21,22,23,24}, {31,32,33,34} };

int *p_ki[4][4];

p_ki[0][0] = &ki[0][0];

printf("%d",*p_ki[2][2]);

return 0;
}

エラー E2062 popo.c 10: 無効な間接参照(関数 main )
391デフォルトの名無しさん:2005/10/18(火) 19:37:36
p_ki[0][0] = &ki[0][0];
p_ki[0][1] = &ki[0][1];


これを全て書けばいいんだろうけど、何か良い方法ないんかな??
392デフォルトの名無しさん:2005/10/18(火) 19:38:17
他に・・・
393デフォルトの名無しさん:2005/10/18(火) 19:46:26
>>391
4×4の2次元配列へのポインタを定義したいなら

int ki[4][4] ={ {01,02,03,04}, {11,12,13,14}, {21,22,23,24}, {31,32,33,34} };
int (*p_ki)[4][4];

p_ki = &ki;
printf("%d", (*p_ki)[2][2]);

で、ポインタ経由でkiを参照できる。
配列のポインタと、ポインタの配列の定義の違いは仕様も見た目も分かりづらい所だし、
普通のポインタで取り出した方が分かりやすい、、かも。

int ki[4][4] ={ {01,02,03,04}, {11,12,13,14}, {21,22,23,24}, {31,32,33,34} };
int *p_ki;
p_ki = ki;

printf("%d", *(p_ki + 2*4 + 2)); //[2][2]を参照
394デフォルトの名無しさん:2005/10/18(火) 19:47:12
スマソ、後半は
p_ki = &ki[0][0];
395391:2005/10/18(火) 19:56:50
>>393さん
わかりやすく、そして丁寧な解説をありがとうございます。

int (*p_ki)[4][4]; と*(p_ki + 2*4 + 2)を参考にさせて頂いております。
396デフォルトの名無しさん:2005/10/18(火) 20:34:28
どんなときにそんなポインタの使い方すんだよ・・・
397デフォルトの名無しさん:2005/10/18(火) 21:45:51
>>393>>395
これがCでは最も一般的。
int ki[4][4] = {略};
int (*p_ki)[4];
p_ki = ki;
printf("%d", p_ki[2][2]);

typedefを使って書き換えるとこうなって一次元配列のときと同じく、
配列がその先頭要素へのポインタとして扱える規則が当てはめられる。
typedef int ki_t[4];

ki_t ki[4]  = {略};
ki_t *p_ki;
p_ki = ki;
398オーイオチャ:2005/10/18(火) 21:50:32
この前初めてCに触った。
399デフォルトの名無しさん:2005/10/18(火) 21:55:15
俺も満員電車で偶然触っちゃった……
それから癖になっちゃってやめられない
400デフォルトの名無しさん:2005/10/19(水) 01:09:19
手の甲でゆっくり摩るのまでは犯罪じゃ無いよな
401デフォルトの名無しさん:2005/10/19(水) 01:28:35
じゃあ、ティムポをさりげなく押し付けるのは?
402デフォルトの名無しさん:2005/10/19(水) 01:30:25
OK
403デフォルトの名無しさん:2005/10/19(水) 01:54:37
何の話をしている
404ポケコソ:2005/10/19(水) 02:29:33
#include <stdio.h>
void main(void)
{
int a;
long b;
char *ms="何でC言語からティムポの話になるのかと小1時間(ry\n";
for(a=0;ms[a]!=NULL;a++){
printf("%c",ms[a]);
for(b=0;b<30000000;b++);
}
}
405デフォルトの名無しさん:2005/10/19(水) 02:33:56
>4294967295個以上もの管理テーブル
はぁ?そんなコトスル香具師はまぬけwwww

テーブル無しでできる (ヒント:残りR個の中からS個選ぶにはS/Rの確率で)
どうしてもどうしてもどうしてもテーブルが欲しいならビットという手もあるが...
406デフォルトの名無しさん:2005/10/19(水) 03:31:46
>>405 がお手本を見せてくれるそうです
407デフォルトの名無しさん:2005/10/19(水) 03:50:50
>>380
できた

#include <stdio.h>
#include <limits.h>

int main()
{
    unsigned long n, m, num=0, i;

    scanf("%d", &n);
    scanf("%d", &m);

    for (i=0 ; i<m ; i++)
    {
        num += rand()%(ULONG_MAX/m);
        printf("%d\n", num);

    }

    return 0;
}
408デフォルトの名無しさん:2005/10/19(水) 04:18:39
>例えば、m=5、n=3000のときだと 0から3000の範囲の5個の重複しないランダムな数字、
>0, 12, 543, 1015, 2020 みたいなの表示しろってことでしょう。

3000 ← これを入力
5 ← これを入力
0
622772474
849156758
1260379561
1592777631


...orz
409デフォルトの名無しさん:2005/10/19(水) 04:59:44
#include <stdio.h>
#include <stdlib.h>

int main()
{
unsigned long n;
unsigned i,j,m;

scanf("%ld", &n);
scanf("%d", &m);
if(m > (unsigned)n){
fprintf(stderr,"error\n");
exit(-1);
}
unsigned long *arg = (unsigned long*)malloc(sizeof(unsigned long)*m);
for(i=0;i<m;++i){
begin:
arg[i] = ((unsigned long) rand() << 16L | rand()) % n;
for(j=0;j<i;++j)
if(arg[i] == arg[j])
goto begin;

}
for(i=0;i<m;++i)
printf("num %d : %ld \n",i,arg[i]);
free(arg);
}

でいいんか? goto文使ってるけど
410デフォルトの名無しさん:2005/10/19(水) 08:03:11
>>405
ホームラン級の馬鹿だな
411デフォルトの名無しさん:2005/10/19(水) 10:50:10
>>405
俺に答えを教えてくれ
412デフォルトの名無しさん:2005/10/19(水) 17:58:01
0..n-1 の数列を作る。
それを完全にシャッフルする。
先頭から m 個取る。

というのを考えたが、n が大きいとつらいな。
413デフォルトの名無しさん:2005/10/19(水) 20:04:14
学校の宿題なんですけどまったくわかりませんorz
どなたか教えてくださいm( __ __ )m

@円柱の体積を求めるプログラムを作りなさい
 ただし半径と高さはキーボードから入力する(変数の型をfloatにする)
A時速(km/時)をキーボードから入力し、時速(m/秒)に変換して出力するプログラム作りなさい
 (変数の型をfloatにする)

以上の2問でつ
お願いします
414デフォルトの名無しさん:2005/10/19(水) 20:07:36
宿題スレがあるのにわざわざここで質問する神経が理解できない。
415デフォルトの名無しさん:2005/10/19(水) 20:09:15
>>413
まさか計算式までわからないとは言わないよな?
416デフォルトの名無しさん:2005/10/19(水) 20:27:27
>>414
あっ あったのか… スマソ
>>415
言いませんよ
417伝説新人タクシ:2005/10/19(水) 20:55:58
そして、マルチなの。
418デフォルトの名無しさん:2005/10/19(水) 21:35:13
>>413
もう絶対レスしないでね(`・ω・´)
419デフォルトの名無しさん:2005/10/19(水) 21:35:39
>>413みたいなのがわからない人は入門本でも入門サイトでも見ればすぐ解決するのにな。
420デフォルトの名無しさん:2005/10/19(水) 22:01:15
413みたいのばかりだからC言語厨は痛い
421デフォルトの名無しさん:2005/10/20(木) 02:28:22
しょーがねーなー、答えてあげるよ

  unsigned long Select,Remaining,i;

  Select=m; Remaining=n;
  for(i=0; i<=n; ++i){
   if(rand()/((double)RAND_MAX+1) < (double)Select/Remaining){
   printf("%lu\n", i); --Select;
   }
   --Remaining;
  }
422デフォルトの名無しさん:2005/10/20(木) 03:29:58
>>421
正直感動した
勉強になった
ありがとう




なんでそれだけの頭もってながら、
人を煽って優位に立つことでしか快感を覚えられないくだらない人間になったんだ?
423デフォルトの名無しさん:2005/10/20(木) 03:42:24
俗人は、ついつい、自分はこういう事を知っていると言いたくなってしまう、
嫌な癖があるのさ…
424デフォルトの名無しさん:2005/10/20(木) 10:11:31
答えを教えてもらっても理解できないorz
425デフォルトの名無しさん:2005/10/20(木) 10:39:24
helloworldしか出来ない俺だけど
コンソールの簡易スレッドビューア作ることにした

渡されたスレッドのurlに接続して
レスを取得してくるだけで良いんだけど
さっぱりワカンネ。
426デフォルトの名無しさん:2005/10/20(木) 10:51:57
ほとんどネットワークスレ的なコードになっちゃいそう。
427デフォルトの名無しさん:2005/10/20(木) 12:08:09
>>425
C言語を覚えたいのか、ネットワークプログラムをしたいのかによるが
単純にネットワークプログラムしたいだけならその程度の物はJavaで書いた方が楽
428デフォルトの名無しさん:2005/10/20(木) 12:11:41
>>427
C言語を覚えたいんだけど
偏っているかな?

もうちょいバランス良く覚えられて、面白い物があれば良いんだけど…
429デフォルトの名無しさん:2005/10/20(木) 13:38:27
>>428
それならこのスレの>>28-でも見てくれ
430デフォルトの名無しさん:2005/10/20(木) 18:52:52
ネットワークプログラミングがしたいのだけど
Cはあまり向いてないの?
Windowsネイティブで作りたいのでC+winsockで勉強中です
他に選択肢があれば教えてください
431デフォルトの名無しさん:2005/10/20(木) 19:19:14
>>430
サーバならCで書くが、クライアントなら何でもいいよ
432デフォルトの名無しさん:2005/10/20(木) 19:22:23
C言語にはネットワークの概念はないよ
だからネットワークに向いてないかといったら、全然そんなことなくて
インターネットなんかは元々Cで開発されてきたわけだから
433デフォルトの名無しさん:2005/10/20(木) 22:52:34
>>425
C言語とは何の関係もないが、それ便利だよ。頑張って作れ。

私は、Perl+(wget+nkf+jless)で作ったのを使ってる。
等幅フォントのターミナルで見てるから、AAはちゃんと見れないけど、
プログラム板ではAAなんかどうでもいいし、プログラムは見やすい。

(書き込むときは「おちゅーしゃ」を起動してます。書き込み機能書けよな>自分)
434デフォルトの名無しさん:2005/10/21(金) 01:21:28
>>421みたいな面白いソースが載ってる本かウェブサイトないですか?
435デフォルトの名無しさん:2005/10/21(金) 01:43:59
>>380
できましたー!!
#include <stdlib.h>
#include <limits.h>
#include <set>

using namespace std;

int main()
{
    set<int> random_table;
    set<int>::iterator p;
    unsigned long n,m;

    printf("範囲:");
    scanf("%d", &n);
    printf("個数:");
    scanf("%d", &m);

    do
    {
        random_table.insert(rand() % n);
    }
    while (random_table.size() < m);

    for (p=random_table.begin() ; p!=random_table.end() ; p++)
    {
        printf("%d\n", *p);
    }

    return 0;
}
436405:2005/10/21(金) 02:53:00
>>406
>>410
>>411
さらしあげwwwww
437デフォルトの名無しさん:2005/10/21(金) 08:37:00
>>435
C言語で書いて来い
438デフォルトの名無しさん:2005/10/21(金) 08:47:25
問題点が理解できないかわいそうな>>436がいるスレはここですね
439デフォルトの名無しさん:2005/10/21(金) 09:09:40
>>435
せめて380の仕様内の事が動くソース貼ってくれ・・・
440デフォルトの名無しさん:2005/10/21(金) 14:52:02
>>439
動くつもりでうぷした奴にそんな事を言っても無駄だろうよ
441デフォルトの名無しさん:2005/10/22(土) 19:57:32
なんつうか、Cでこんな書き方しちゃだめだよ。という見本。でもちゃんと核のめんどくさい
#include <stdio.h>
#include <stdlib.h>

void random_sampling(unsigned long max, unsigned long count_of_samples, void f(unsigned long)) {
  if (count_of_samples) {
    if (rand() % (max + 1) < count_of_samples) {
      random_sampling(max - 1, count_of_samples - 1, f);
      f(max);
    } else {
      random_sampling(max - 1, count_of_samples, f);
    }
  }
}

void print(unsigned long x) {
  printf(" %lu", x);
}

int main(void)
{
  unsigned long M, N;
  printf("M> "), scanf("%lu", &M);
  printf("N> "), scanf("%lu", &N);
  random_sampling(N, M, print);
  puts("");

  return 0;
}
442デフォルトの名無しさん:2005/10/22(土) 20:09:42
443デフォルトの名無しさん:2005/10/22(土) 20:22:12
メトロイドみたいなゲーム作りたい。
スーパーメトロイドを考えた人は凄い。あのクオリティはヤバイ。
helloworldしかできないけど、メトロイドクローンを作ってみたい。
444デフォルトの名無しさん:2005/10/22(土) 22:37:59
>>443
アクション系はゲームの中でもかなり難い分類だからな。
俺もまだ未熟だが、その手の物は作ってみたいと思ってる。

どうでもいいが、デカいプログラム一人で作るには結構な時間と労力がいるみたいだな。
本気でやるなら仲間ぐらい作っといた方がいいかも。
445デフォルトの名無しさん:2005/10/22(土) 22:39:49
アクション系って障害物との当たり判定どうやってんの?
当たってもとの場所に戻すだけだと隙間できるじゃん
あれがうまくいかねー
446デフォルトの名無しさん:2005/10/22(土) 22:45:10
>>445
基本は座標と方向ベクトルと衝突判定
背景との当たり判定は仮想画面のオブジェクト配置を当たり判定に使うと衝突判定で手抜きが出来る
447デフォルトの名無しさん:2005/10/23(日) 01:05:31
これをコンパイルして実行しても
segmentation faultとか言われるんですが何が原因かわからないんです
誰か教えてください・・・

#include<stdio.h>
int main(){

float hour, second;

printf("時速(km/h)を入力してください。\n秒速(m/s)に変換します\n");
scanf("%f", hour);
second = (hour * 1000.0) / 3600.0;
printf("秒速は%f(m/s)です。\n", second);

return 0;
}
448デフォルトの名無しさん:2005/10/23(日) 01:11:59
[問題](ほかのスレで見たような気がするが)
"いち たす に は"とか入力すると"さん"と表示するプログラム
数字は"れい","いち","に","さん","よん","ご","ろく","なな","はち","きゅう"
取り敢えず1桁の加減算ができればいいか "たす","ひく"


[応用]
・加減乗除に対応
・他に"し"とか"しち"とか"ひ","ふ","み"とか複数パターンの入力に対応できる
・2桁以上 "じゅう" とかも使えるようにする
449デフォルトの名無しさん:2005/10/23(日) 01:21:35
>scanf("%f", hour);

あどれすを渡さなきゃ
450デフォルトの名無しさん:2005/10/23(日) 01:22:31
>>447
× scanf("%f", hour);
○ scanf("%f", &hour);
451447:2005/10/23(日) 01:30:58
わかりました!こんなミスするのはポインタとかがよくわかってないからですね
精進します。
452デフォルトの名無しさん:2005/10/23(日) 13:25:48
てかdebag汁よ
ウィンならturbodebagger
unixならlintでエラー判るだろ
453デフォルトの名無しさん:2005/10/23(日) 14:06:30
>>452
>unixならlintでエラー判るだろ
lintはねぇ。「出力が多すぎて全部見る気がしない」という問題点があってねぇ。
この発言をする人間は「lintクリーンなコードを書く習慣を身に付けている」という資格が必要だ
と思うのだけど。どうか?
454デフォルトの名無しさん:2005/10/23(日) 16:15:10
gccで事が足りる。
455デフォルトの名無しさん:2005/10/23(日) 21:25:00
数字を入れればその階乗を計算するプログラミングってどうすればいい?
再起つかわず
456デフォルトの名無しさん:2005/10/23(日) 21:30:25
>>455
ループで計算する。
457デフォルトの名無しさん:2005/10/23(日) 21:31:54
int n, i, result;
scanf("%d", &n);
for(i=result=1;i<=n;i++) result*=i;
458デフォルトの名無しさん:2005/10/23(日) 21:35:51
>>448
おもしろそうですね
勝手にやってもいいんですかね?
459デフォルトの名無しさん:2005/10/23(日) 21:46:03
>>456
具体的に頼む
460デフォルトの名無しさん:2005/10/23(日) 21:48:48
>>459
>>457でOKじゃね?何が問題なんだ?
461デフォルトの名無しさん:2005/10/23(日) 21:50:49
n!=n*(n-1)*(n-2)*・・・*1
462デフォルトの名無しさん:2005/10/23(日) 21:51:39
まさか階乗の意味が分からないとか?>>459
463デフォルトの名無しさん:2005/10/23(日) 21:52:30
そうだとしたらヒドイぞ・・・
464デフォルトの名無しさん:2005/10/23(日) 21:54:24
>>457
揚げ足取りだと思うけど、intだと実際問題使い物にならないと思うが・・・
465デフォルトの名無しさん:2005/10/23(日) 21:55:11
12か13くらいで変な数字が出ました
466デフォルトの名無しさん:2005/10/23(日) 21:55:23
>>464
longにしろってこと?
467デフォルトの名無しさん:2005/10/23(日) 21:59:22
>>465
どのぐらいの数まで階乗を求めたいんだ?
それによって、用いる型が変わると思うがね。

>>466
大差なし。つか、longって・・・俺の環境だとintと同じサイズですが……
468デフォルトの名無しさん:2005/10/23(日) 22:00:22
>>448
"いちたすいちは"
"いちたすには"
"いちたすさんは"
・・・・
・・・・
"きゅうたすきゅうは"
"いちひくいちは"
"いちひくには"
・・・・
・・・・
・・・・
"きゅうひくきゅうは"

に対応する答えを全部用意しておくっていうのはダメですよね
469457:2005/10/23(日) 22:01:25
質問の意図が再帰せずに階乗を算出する方法だったから適当に書いた。
反省はしていない。
470デフォルトの名無しさん:2005/10/23(日) 22:02:54
初心者の俺が予想するに、いち〜じゅうを作っておいて
結合するんだな!!
だからマクロをつかうんですよね?先生!
471デフォルトの名無しさん:2005/10/23(日) 22:05:43
>>466
まぁ俺もそうだけど、俺の少ない脳味噌じゃそれくらいしか考えられなかったんで。
472デフォルトの名無しさん:2005/10/23(日) 22:21:30
>457で、doubleを使えばそれなりに計算できる。
もしかしたらループの方向を逆にした方がいいかも知らん。
473デフォルトの名無しさん:2005/10/23(日) 22:42:50
なんでdoubleなん?
474デフォルトの名無しさん:2005/10/23(日) 23:05:02
今問題なのは有効桁数じゃない
475デフォルトの名無しさん:2005/10/24(月) 02:31:01
>474
>465
476デフォルトの名無しさん:2005/10/24(月) 06:55:30
12! = 479001600
13! = 6227020800
2^31 = 2147483648

>>457の実装で表示がおかしくなるのは当たり前。
だが>>455は非再帰での階乗算出法を問うているのだから
有効桁数は問題ではない。
477デフォルトの名無しさん:2005/10/24(月) 07:12:17
>>455
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>

int main()
{
    int i, num, sum=1;
    scanf_s("%d", &num);

    printf_s("1");
    for (i=2 ; i<=num ; i++)
    {
        if( (INT_MAX/i) < sum)
        {
            printf_s("=%d\n", sum);
            printf_s("もう限界(´・ω・`)ショボーン\n");
            exit(1);
        }
        printf_s("*%d", i);
        sum*=i;
    }
    printf_s("=%d\n", sum);

    return 0;
}
478デフォルトの名無しさん:2005/10/24(月) 07:21:52
doubleで表現できる数値は
正の数 4.940656458412465×10の-324乗〜1.797693134862316×10の308乗
負の数 -1.797693134862316×10の308乗〜-4.940656458412465×10の-324乗

2147483648以上の数値を扱いたければdouble使っとけ。>>455
479デフォルトの名無しさん:2005/10/24(月) 21:51:58
>>455です。
>>457ありがとうございます。でも当方あまりにも初心者のためできません。
なにが間違えてるか見てくれませんか?

include<stdio.h>
int main(void)
{

int n, i, result;
scanf("%d", &n);
for(i=result=1;i<=n;i++) result*=i;

return 0;
}

なぜかコンパイルできない・・・
480デフォルトの名無しさん:2005/10/24(月) 21:55:43
>>479
#include
481デフォルトの名無しさん:2005/10/24(月) 21:56:09
最初の行を
include<stdio.h>
から
#include <stdio.h>
にしましょ〜
482デフォルトの名無しさん:2005/10/24(月) 22:23:18
>>479
エラーメッセージを貼りましょう。
483デフォルトの名無しさん:2005/10/24(月) 22:40:30
>>480-481
あ、そーだ。ほかになにか教えてください。
もしかしてプリントFじゃないですか?にしても書き方がわからないんですが
484デフォルトの名無しさん:2005/10/24(月) 22:42:20
2chに来れるくらいなら、そんくらい自分でできませんか?
485デフォルトの名無しさん:2005/10/24(月) 23:10:54
>>479
それ位で人を頼るな!そんなんじゃ上達しないぞ!自分の頭を使え!
目的を明白にしろ!方法を考えろ!分らなきゃ調べろ!
エラーメッセージを見ろ!参考書片手に文法間違えてないか確認しろ!
単位が欲しいだけなら誰かのコピーしろ(lol)
486デフォルトの名無しさん:2005/10/24(月) 23:21:49
>>485
まずお前が落ち着k
487デフォルトの名無しさん:2005/10/24(月) 23:39:49
>>484-486
いや、ごめんまじわかんねぇんだ。頼むから教えて。
>>457が書いてくれた文の意味はわかるんだけど、それだけになんで実行できないのか
わかんない。ほんとお願い!
488デフォルトの名無しさん:2005/10/24(月) 23:46:27
i=result=1がまずいんだろな
489デフォルトの名無しさん:2005/10/24(月) 23:48:16
>>488
どこが?

>>487
>>482
490デフォルトの名無しさん:2005/10/24(月) 23:51:09
>>488
どこがまずいんだ?
単に1行目の#がないだけだろ
491デフォルトの名無しさん:2005/10/24(月) 23:54:50
>>479
どこに出力されるんだろう・・・
492デフォルトの名無しさん:2005/10/24(月) 23:56:21
>>488
二重代入は何も問題ない。
result=1が行われた後にi=resultが行われる。
493デフォルトの名無しさん:2005/10/24(月) 23:57:07
488は皮肉?
俺はそう理解してた
494デフォルトの名無しさん:2005/10/25(火) 00:00:13
きっと、return 0;の前の行にprintf("result:%d\n", result);を書けばいいって話なんだよ。
495デフォルトの名無しさん:2005/10/25(火) 00:04:20
もう眠いから問題出して寝るわ ノシ
1、文字列を入力し、文字列の長さを調べるコードを作成
2、文字列を入力し、文字列にいくつ「a」の文字が含まれるかを調べるコードを作成
3、文字列を入力し、文字列中の「a」という文字を「b」に置き換えるコードを作成
いずれもstdio.h以外のヘッダを使用しないで作る事
496デフォルトの名無しさん:2005/10/25(火) 00:52:17
>>448
キーボードからひらがなを入力する方法が分かりません
DOS窓で半角英数を入力する方法しか分かりません
497デフォルトの名無しさん:2005/10/25(火) 00:58:39
>>496
Alt+半角全角キーじゃね?
498デフォルトの名無しさん:2005/10/25(火) 01:01:30
>>497
できました ありがとう
499デフォルトの名無しさん:2005/10/25(火) 01:02:39
500デフォルトの名無しさん:2005/10/25(火) 01:04:14
501デフォルトの名無しさん:2005/10/25(火) 01:09:16
釣りだと思ったのにそうじゃなかったの「!」。
502デフォルトの名無しさん:2005/10/25(火) 04:08:06
>>495
#include <stdio.h>

int main(){
char str[250];
int i, cnt_a = 0;
printf("文字列を入力-> "); scanf("%s", str);
for (i = 0; str[i] != '\0'; i++){
if (str[i] == 'a'){
cnt_a++;
str[i] = 'b';
}
}
printf("\n文字列の長さは%d\n", i);
printf("「a」の数は%d個\n", cnt_a);
printf("「a」を「b」に置換え-> %s\n", str);

return 0;
}
503デフォルトの名無しさん:2005/10/25(火) 07:26:17
>>495の1
#include <stdio.h>

//文字列の長さを返す変数
int string_length(char *string)
{
    int len=0;
    
    while (*string != '\0')
    {
        string++;
        len++;
    }

    return len;
}

int main()
{
    char *buf="hello, world";
    int len;

    len=string_length(buf);
    printf("%sの長さは%dです\n", buf, len);

    return 0;
}
504デフォルトの名無しさん:2005/10/25(火) 07:30:37
>>495の2
#include <stdio.h>

//aの数を返す変数
int count_a(char *string)
{
    int count=0;
    
    while (*string != '\0')
    {
        if (*string == 'a')
        {
            count++;
        }
        string++;
    }

    return count;
}

int main()
{
    char *buf="an an an tottemo daisuki doraemon.";
    int count;

    count=count_a(buf);
    printf("%sのaの数は%dです\n", buf, count);

    return 0;
}
505デフォルトの名無しさん:2005/10/25(火) 07:35:52
ageんなバカ
空気嫁
506デフォルトの名無しさん:2005/10/25(火) 07:48:20
>>495の3
先生!質問です
関数の中で文字を置換する方法がわからないので教えてください

#include <stdio.h>

//aをbに置換する関数
void replace_a_to_b(char *string)
{
    while (*string != '\0')
    {
        if (*string == 'a')
        {
            *string='b'; //うまくいかない
        }
        string++;
    }
}

int main()
{
    char *buf="an an an tottemo daisuki doraemon.";

    printf("%s -> ", buf);
    replace_a_to_b(buf);
    printf("%s\n", buf);

    return 0;
}
507デフォルトの名無しさん:2005/10/25(火) 07:54:31
>>506
そこでコケてるかどうかは別にして常識として
char *buf="an an an tottemo daisuki doraemon.";


これだと書き換え可能であることが保障されない。
文字列定数へのポインタという意味になる。

正しくはこう。
char buf[] = "an an an tottemo daisuki doraemon.";

bufはchar型配列でmain関数上の自動変数であり書き換えが可能。
配列長は文字列幅によってコンパイル時に自動的に設定される。

508デフォルトの名無しさん:2005/10/25(火) 08:03:51
>>507
うまくいきました
ありがとうございます
509デフォルトの名無しさん:2005/10/25(火) 10:03:12
この問題を解いていただけませんか

1)プログラムに0以上59以下の値をとる二つの整数を与える.これらの2数を順にm, nとする.これらをm分n秒と解釈する.
与えられた時間の(秒単位で)半分となる時間をコロン(:)で区切られた二組の二桁の整数で表示するプログラムを作成しなさい.
課題実行においては以下の点に注意すること.
表示する分数、秒数が9以下のときは10の桁にはスペースを置く.
秒数が2で割り切れないときは切り捨てを行う.
m,nのどちらかが0以上59以下でなければ,errorのみを表示すること.

2)プログラムに三つの整数を与える.これらの数を順にならべたとき,
最初から大きさが2番目にあたる数を表示するプログラムを作成しなさい.

3)3個の整数を入力し(順に a, d, n とする),初項 a ,項差 d の等差数列を
n 項表示するプログラムを作成しなさい.ただし,項数が 0 以下の場合は,
何も表示しないもの(改行のみ)とする.また,数列を表示するときは,
数の前に1文字のスペースを挿入することとし,最後の数を表示したところで改行すること.
プログラムを作成するとき,初項 a の等差数列の第 i 項
(これを a(i) と表す)を求める関数 int ap( int a, int d, int i ) を定義し,
これを main 関数から呼び出し,結果の表示は main 関数内で行うものとする.
また,関数 ap は,第一引数に初項 a ,第二引数に項差 d ,
第三引数に求める項の番号 i を与えると,戻り値として等差数列の
第 i 項 a( i ) を返すものとする.
510デフォルトの名無しさん:2005/10/25(火) 10:07:34
自分でやれよ
学ぶ気が無い奴がどうしてこのスレに?
511デフォルトの名無しさん:2005/10/25(火) 10:12:58
>>509
宿題スレ逝け。まあ一応打ってはみるが。
512デフォルトの名無しさん:2005/10/25(火) 12:19:57
>>509
めちゃ簡単じゃんwww
513デフォルトの名無しさん:2005/10/25(火) 17:06:07
>>509
馬鹿だなー。
「この問題を解いていただけませんか」じゃなくて、「問題を出してやろう」と言うんだよ。
あとは問題文を如何にも宿題なその文章からもっと柔らかい自分で考えた文章にする。
そうすりゃ誰かが解いたかもしれないだろ?
でも一番簡単なのは適当な入門本を買って軽く勉強することだよ。
解いてもらったって、今回は良くても次からは問題の難易度も上がっていくのに対応できないっしょ。
514デフォルトの名無しさん:2005/10/25(火) 22:15:29
>>509
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int m,n;
    int half_m, half_n;
    int sum;

    //mとnの入力
    printf("m(分)=");
    scanf("%d", &m);
    if (!(m>=0 || m<=59))
    {
        printf("error\n");
        exit(EXIT_FAILURE);
    }
    
    printf("n(秒)=");
    scanf("%d", &n);
    if (!(n>=0 || n<=59))
    {
        printf("error\n");
        exit(EXIT_FAILURE);
    }
515デフォルトの名無しさん:2005/10/25(火) 22:16:00
    //半分を計算
    sum=m*60+n;
    sum=sum/2;

    half_m=sum/60;
    half_n=sum%60;

    //結果表示
    printf("%d分%d秒の半分は%d分%d秒\n", m, n, half_m, half_n);

    return EXIT_SUCCESS;
}
516デフォルトの名無しさん:2005/10/25(火) 22:18:40
>>515
課題を隅までよく読みましょう。
517デフォルトの名無しさん:2005/10/25(火) 22:26:57
>>516
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int m,n;
    int half_m, half_n;
    int sum;

    //mとnの入力
    printf("m(分)=");
    scanf("%d", &m);
    if (!(m>=0 || m<=59))
    {
        printf("error\n");
        exit(EXIT_FAILURE);
    }
    
    printf("n(秒)=");
    scanf("%d", &n);
    if (!(n>=0 || n<=59))
    {
        printf("error\n");
        exit(EXIT_FAILURE);
    }
518デフォルトの名無しさん:2005/10/25(火) 22:27:27
    //半分を計算
    sum=m*60+n;
    sum=sum/2;

    half_m=sum/60;
    half_n=sum%60;

    //結果表示
printf("%2d:%2d\n", half_m, half_n);

    return EXIT_SUCCESS;
}
519デフォルトの名無しさん:2005/10/25(火) 22:34:04
>>518
未だ未だw
520デフォルトの名無しさん:2005/10/25(火) 22:38:41
>>519  P
ヽ(`Д´)ノ 降参
521デフォルトの名無しさん:2005/10/25(火) 22:42:06
%02d
522デフォルトの名無しさん:2005/10/25(火) 22:42:39
>>521
それ問題と違う。
523デフォルトの名無しさん:2005/10/25(火) 22:44:40
>>520
> if (!(m>=0 || m<=59))
この論理式を日本語で書き直して見ましょう。
524デフォルトの名無しさん:2005/10/25(火) 22:45:02
>>520
面白杉
525デフォルトの名無しさん:2005/10/25(火) 23:20:20
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char ** argv)
{
  int m, n, m2, n2;
  char dummy;

  if (argc != 3 ||
      sscanf(argv[1], "%d %c", &m, &dummy) != 1 ||
      sscanf(argv[2], "%d %c", &n, &dummy) != 1 ||
      !(0 <= m && m <= 59) || !(0 <= n && n <= 59)) {
    fprintf(stderr, "error\n");
    return -1;
  }

  m2 = m / 2, n2 = n / 2 + m % 2 * 30;

  printf("%2d'%2d\"\n", m2, n2);

  return 0;
}
526デフォルトの名無しさん:2005/10/25(火) 23:23:12
#include <stdio.h>

int main(int argc, char ** argv)
{
  int x, y, z;
  char dummy;

  if (argc != 4 ||
      sscanf(argv[1], "%d %c", &x, &dummy) != 1 ||
      sscanf(argv[2], "%d %c", &y, &dummy) != 1 ||
      sscanf(argv[3], "%d %c", &z, &dummy) != 1) {
    fprintf(stderr, "error\n");
    return -1;
  }

  printf("%d\n", x < y != x < z ? x : y < z != y < x ? y : z);

  return 0;
}
527デフォルトの名無しさん:2005/10/25(火) 23:27:23
>>525-526
初っ端からerror出るじゃねえかw
528デフォルトの名無しさん:2005/10/25(火) 23:40:56
//つーか、もっと簡単な記述でいいのでは?
#include <stdio.h>

void main(void){
int m, n;
scanf("%d%d", &m, &n);
if(m < 0 || m > 59 || n < 0 || n > 59){
printf("error\n");
return;
}
m = (m*60+n)/2;
printf("%2d:%2d\n", m/60, m%60);
}
529デフォルトの名無しさん:2005/10/25(火) 23:45:29
#include <stdio.h>
int input(int * var, const char * msg)
{
  char dummy, buf[256];
  printf("%s> ", msg);
  if (fgets(buf, sizeof(buf), stdin) == NULL || sscanf(buf, "%d %c", var, &dummy) != 1)
    return 0;
  return 1;
}

int ap(int a, int d, int i)
{
  return a + d * i;
}

int main(void)
{
  int a, d, n;
  int i;

  if (!input(&a, "a") || !input(&d, "d") || !input(&n, "n")) {
    fprintf(stderr, "error\n");
    return -1;
  }

  for (i = 0; i < n; i++) {
    printf(" %d", ap(a, d, i));
  }
  puts("");

  return 0;
}
530デフォルトの名無しさん:2005/10/25(火) 23:47:13
>>527
問題をよく読め。
「プログラムに..与える」って書いてあるだろ
531デフォルトの名無しさん:2005/10/26(水) 00:33:59
#include<stdio.h>
#include<stdlib.h>
void swap(int *a, int *b) {
  int tmp; tmp = *a; *a = *b; *b = tmp;
}
void sort3(int *x, int *y, int *z) {
  if (*x>*y) swap(x, y); if (*x>*z) swap(x, z); if (*y>*z) swap(y, z);
}
int main(int argc, char **argv) {
  int x, y, z;
  if (argc != 4) {
    fprintf(stderr, "usage: %s num1 num2 num3\n", argv[0]); return 1;
  }
  x=atoi(argv[1]); y=atoi(argv[2]); z=atoi(argv[3]);
  sort3(&x, &y, &z);
  // この時点で x <= y <= z
  if (x==z) return 0; // 全部同じ。二番目に大きな数は無い
  if (x==y) { // 3 3 5 二番目に大きいのは x と y
    printf("%d\n", x);
    return 0;
  }
  if (y==z) { // 3 5 5 二番目に大きいのは x
    printf("%d\n", x);
    return 0;
  }
  // 3 4 5 二番目に大きいのは y
  printf("%d\n", y);
  return 0;
}
ふざけすぎ?
532デフォルトの名無しさん:2005/10/26(水) 01:19:24
>>509の3番は
#include<stdio.h>

int ap(int a, int d, int i);

int main(void){
    int a, d, n, i ,*x;
    
    printf("a,d,n= ");
    scanf("%d,%d,%d", &a, &d, &n);
    
    if(n > 0){        
        for (i=1; i <= n; i++){
            printf(" %d", ap(a, d, i));
        }
    }
    printf("\n");
    return;
    
}

int ap(int a, int d, int i){
    int x;
    x = a + d * (i - 1);
    return x;
}

こんな感じで良いのかな。
533デフォルトの名無しさん:2005/10/26(水) 03:09:20
>>509の2
#include <stdio.h>
#include <stdlib.h>

int cmp(int *l, int *r)
{
    if (*l < *r)
        return -1;
    else if (*l > *r)
        return 1;
    return 0;
}

int main()
{
    int num[3],i;

    for (i=0 ; i<3 ; i++)
    {
        printf("%d個目の数字を入力してください。\n", i+1);
        scanf("%d", &num[i]);
    }

    qsort(num, 3, sizeof(int), cmp);

    printf("2番目の数は%dです\n", num[1]);
    
    return EXIT_SUCCESS;
}
534デフォルトの名無しさん:2005/10/26(水) 05:15:59
>>448
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int jap2keisan(char *jap)
{
    const char suuji[2][5]={"たす","ひく"};
    int i=0;

    while (strcmp(jap, suuji[i]) )
    {
        i++;
        if (i>2)
            break;
    }

    return i;
}

const char *int2jap(int num)
{
    static const char suuji[10][7]={"れい","いち","に","さん","よん","ご","ろく","なな","はち","きゅう"};
    return suuji[num];
}
535デフォルトの名無しさん:2005/10/26(水) 05:17:02
int jap2int(char *jap)
{
    const char suuji[10][7]={"れい","いち","に","さん","よん","ご","ろく","なな","はち","きゅう"};
    int i=0;

    while (strcmp(jap, suuji[i]) )
    {
        i++;
        if (i>9)
            break;
    }

    return i;
}

int main()
{
    int a ,b;
    char command[]="いち たす に は";

char *pToken;
    int keisan, kekka;

    printf("%s ", command);
pToken = strtok( command, " " );
    a=jap2int(pToken);

    pToken = strtok( NULL," " );
    keisan=jap2keisan(pToken);
536デフォルトの名無しさん:2005/10/26(水) 05:17:32
    pToken = strtok( NULL," " );
    b=jap2int(pToken);

    if (keisan==0)
        kekka=a+b;
    else if (keisan==1)
        kekka=a-b;

    printf("%s\n", int2jap(kekka));
    
    return EXIT_SUCCESS;
}
537デフォルトの名無しさん:2005/10/26(水) 12:06:39
起動してから入力するのはプログラムに与えるのとは違う。
>>509の正解は
>>525>>529>>531-532だけ
538デフォルトの名無しさん:2005/10/26(水) 12:13:46
>>537
どう違うの?
539デフォルトの名無しさん:2005/10/26(水) 12:25:31
>>537
「コマンドラインから与える」という意味なら>>526も合っているようだが?
540デフォルトの名無しさん:2005/10/26(水) 12:31:05
「プログラムに与えて」なんて要求仕様でプログラムを作らせる事をさせているから
コンピュータ業界はダメになるんだよな。
ここはやはりきちんと与える方法の定義を引き出さずに回答したらすべてNGにするくらいで無いと
541デフォルトの名無しさん:2005/10/26(水) 12:47:52
ソースばっかりでみにくいな、このスレ
542デフォルトの名無しさん:2005/10/26(水) 12:52:21
543デフォルトの名無しさん:2005/10/26(水) 13:01:15
日本人なら醤油とソースは区別しろ
544デフォルトの名無しさん:2005/10/26(水) 13:35:30
おとついから始めたんだけど、ポインタがよくわからない
ググったらいろいろ見つかるんだけど、どのサイトがわかりやすいか教えてください。
545デフォルトの名無しさん:2005/10/26(水) 13:40:47
おとついから始めていきなりポインタを理解しようとは豪気な奴だ
http://kmaebashi.com/programmer/pointer.html

>>543
「ソースばっかり」っていってるのにさらにまたソースを出せと?
546デフォルトの名無しさん:2005/10/26(水) 13:42:20
しょーゆー屁理屈ばっかりいってるとママにしかってもらいますよ
547デフォルトの名無しさん:2005/10/26(水) 13:42:26
>>545
サンクス
やっぱり結構な分量あるんですね。とりあえずがんばってみます。
548デフォルトの名無しさん:2005/10/26(水) 13:58:24
>>547
>545のページは初心者向けでないばかりか、誤解を招きかねない表現も含まれるのでお勧めできない。
549デフォルトの名無しさん:2005/10/26(水) 14:02:23
ポインタは最近になって良い書籍がたくさん出てる
550デフォルトの名無しさん:2005/10/26(水) 14:10:25
そんなことはない
551デフォルトの名無しさん:2005/10/26(水) 14:13:29
そうだな
552デフォルトの名無しさん:2005/10/26(水) 16:41:01
ポインタは、変数の定義や関数の引数定義、
そして、キャストするときの定義で、

int *

とかやるときと、ポインタの指し示すデータを見る演算子

*

が、別物だということがわかると、だいたい意味がわかってくる。
漏れ自身、それがわかってから、やっと使えるようになった。
553デフォルトの名無しさん:2005/10/26(水) 16:42:12
自分語りオツ
554デフォルトの名無しさん:2005/10/26(水) 16:44:43
C以外の言語でポインタ覚えりゃどうって事ないんだがな
Cは他の言語じゃやっちゃいけない事がポインタ使って出来てしまう所が良い所でも有り悪い所でもある
555デフォルトの名無しさん:2005/10/26(水) 20:14:04
他言語でやっちゃいけない事って何さ?
556デフォルトの名無しさん:2005/10/26(水) 20:15:46
メモリ内の任意の領域にAPIを経由せずアクセスするとか?
557デフォルトの名無しさん:2005/10/26(水) 20:23:01
ん?そんなもんCでもやっちゃイカンよ。
558デフォルトの名無しさん:2005/10/26(水) 20:23:41
組み込み系では普通に使うが。
メモリマップドIOとか
559デフォルトの名無しさん:2005/10/26(水) 20:35:25
VRAM書いたりとか普通にやってたな。
560デフォルトの名無しさん:2005/10/26(水) 21:56:52
おまいら実メモリへのアクセスと仮想メモリへのアクセスがごっちゃになってるだろ
561デフォルトの名無しさん:2005/10/26(水) 22:01:10
>>560
実も仮想もC言語には関係ねえよ
562デフォルトの名無しさん:2005/10/26(水) 22:24:12
言語仕様として許されているかどうかの話であって
実行環境がどうなのかは関係ないからな
563デフォルトの名無しさん:2005/10/26(水) 22:46:46
次の問題まだぁ〜?
564デフォルトの名無しさん:2005/10/26(水) 23:44:37
じゃあ軽く一つ。以下の動作を行うプログラムを作成せよ。
配列(10)を作成、それに値を入力し別の関数で合計を求め、戻り値を返し出力
565デフォルトの名無しさん:2005/10/26(水) 23:45:21
つまらん
566デフォルトの名無しさん:2005/10/27(木) 00:01:06
>>455ですおひさしぶりです。あほな質問をくりかえしまくって一時はなれて勉強して
まいりました。ここでいただいたアドバイスをそのまま使ってプログラミングしてみた
のですが、どの数字を入れても
result=1
にしかなりません。どこがまずいかどなたかお願いできないでしょうか?

#include(stdio.h)
int main(void)
{
int n,i,result;
scanf("%d",&n);
for(i=result=1;i<=n;i++)
result*=1;

printf("result:%d\n",result);

retur#include <stdio.h>
n 0;
}
567デフォルトの名無しさん:2005/10/27(木) 00:01:55
result*=1; ←これ調べれ
568デフォルトの名無しさん:2005/10/27(木) 00:10:13
>>567
ありがとう!ほんとありがとう!!
でもこれ50とか計算できない・・・どうすれば?
569伝説新人タクシ:2005/10/27(木) 00:34:59
return *= i; に修正したなら、バッファオーバーフローを
起こしたんだろ。int が扱える範囲を超えた。
570デフォルトの名無しさん:2005/10/27(木) 00:38:34
概数でいいなら浮動小数使うといい。
多倍長整数はC++のほうがいいね。
571伝説新人タクシ:2005/10/27(木) 00:53:07
言い忘れた。Long型とかunsigned頭につけるとかある。調べてみ。
572デフォルトの名無しさん:2005/10/27(木) 01:07:38
GCCはlong long、VCは__int64だったかな。

ちなみにrubyだとこんな感じ

irb(main):001:0> def kaijo(n)
irb(main):002:1> n > 1 ? n * kaijo(n-1) : 1
irb(main):003:1> end
=> nil
irb(main):004:0> kaijo(50)
=> 30414093201713378043612608166064768844377641568960512000000000000
irb(main):005:0>



こんなん64bit整数使っても表現不可能だろ。
573デフォルトの名無しさん:2005/10/27(木) 01:31:07
>>564
#include <stdio.h>
#include <stdlib.h>

int sum(int *int_array, int size)
{
    int i, sum_num=0;

    for (i=0 ; i<size ; i++)
    {
        sum_num += int_array[i];
    }

    return sum_num;
}
574デフォルトの名無しさん:2005/10/27(木) 01:31:39
int main()
{
    int int_array[10], size, sum_num, i;

    for (i=0 ; i<10 ; i++)
    {
        int_array[i]=rand()%100;
    }

    size=sizeof(int_array) / sizeof(int);

    sum_num=sum(int_array, size);

    i=0;
    while (1)
    {
        printf(" %d ", int_array[i]);
        i++;
        if (i>9)
            break;
        printf("+");
    }
    printf("= ");

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

    return EXIT_SUCCESS;
}
575伝説新人タクシ:2005/10/27(木) 12:33:19
それでは出題。
AとBの戦闘。
それぞれのライフをA_HP,B_HPとする。
どちらかのライフがなくなるまで実行する。
次のコマンドを選択させる。攻撃かなにもしない。
さて、どのように書く?
また、次のターンのダメージを軽減する「防御」コマンドの追加。
576伝説新人タクシ:2005/10/27(木) 12:37:08
ナップザック問題。
商品の代金を与えるとお札、ないしコイン枚数が最少となる自作関数。
577デフォルトの名無しさん:2005/10/27(木) 13:17:41
説明がヘタクソすぎてやる気がでない
578デフォルトの名無しさん:2005/10/27(木) 13:18:45
それには同意せざるを得ない
579伝説新人タクシ:2005/10/27(木) 13:40:36
自分の言葉を意訳して(ということが間違いだった)
短く書いたんだが、以下>>575を書き直す。

AとBが戦闘をする。AとBは交互に行動する。
行動の内容は選択を促すことで選ぶ。
その行動には、「攻撃」と「なにもしない」があり、
毎ターンどちらかを1回行動する。
この行動選択はどちらかのライフがなくなるまで選択を促す。
このAとBそれぞれのライフはA_HP, B_HP に保持する。
また、次のターンに相手の「攻撃」によって与えられるダメージを
無効ないし半減する「防御」行動を追加する。
580デフォルトの名無しさん:2005/10/27(木) 13:56:30
学校の宿題は自分でやるものだ。
581デフォルトの名無しさん:2005/10/27(木) 14:48:23
>>579
伝説になってよかったな( ^ω^)
582デフォルトの名無しさん:2005/10/27(木) 22:09:46
>>572
VCもlong longだ。ただしVC7以降。
583デフォルトの名無しさん:2005/10/27(木) 22:22:53
>>579
HPはどれぐらい減るの?
584デフォルトの名無しさん:2005/10/28(金) 00:04:28
>>579
>行動の内容は選択を促すことで選ぶ。
「促す」のは誰? 「選ぶ」のは誰?

「主語」と「述語」について中学校辺りからやり直せ。
585デフォルトの名無しさん:2005/10/28(金) 03:40:11
>>579
半減か無効なのかどっち
586伝説新人タクシ:2005/10/28(金) 06:46:44
>>584
ユーザーとかプログラマーとか言いたくなく、
しかし別の言葉が思いつかなかった。

>>583 >>585
初期HPを10 として「攻撃」で与えるダメージが2、
相手が「防御」していたら1。
587デフォルトの名無しさん:2005/10/28(金) 12:22:05
>>579の1つ目の問題
#include <stdio.h>
#include <stdlib.h>

typedef struct status_tag
{
    int hp;
    int attack;
} STATUS;

STATUS status[2];

void init_game()
{
    int i;

    for (i=0 ; i<2 ; i++)
    {
        status[i].hp=10;
        status[i].attack=2;
    }
}

void show_status()
{
    int i;

    for (i=0 ; i<2 ; i++)
    {
        printf("Player %d\n", i+1);
        printf("hp:%d\n", status[i].hp);
588デフォルトの名無しさん:2005/10/28(金) 12:22:36
        printf("attack:%d\n\n", status[i].attack);
    }
}

int main()
{
    int player=1, command;

    init_game();

    while(status[player].hp>0)
    {
        player=1-player;
        show_status();
        printf("Player %d コマンド?\n1:戦う\n2:なにもしない\n", player+1);
        scanf("%d", &command);
        switch(command)
        {
        case 1:
            printf("Player %dの攻撃\n", player+1);
            printf("Player %dに%dポイントのダメージをあたえた\n\n", (1-player)+1, status[1-player].attack);
            status[player].hp-=status[1-player].attack;
            break;
        case 2:
            switch(rand()%3)
            {
589デフォルトの名無しさん:2005/10/28(金) 12:23:12
            case 0:
                printf("Player %dはようすをみている\n", player+1);
                break;
            case 1:
                printf("Player %dはぼーっとしている\n", player+1);
                break;
            case 2:
                printf("Player %dはあわてふためいている\n", player+1);
                break;
            }
            break;
        }

    }

    return EXIT_SUCCESS;
}
590伝説新人タクシ:2005/10/28(金) 14:19:07
>>589
DQコマンド、ナツカシス。
Cは長らくやってないが、STATUS構造体定義のところで
} STATUS; を
} STATUS[2]; にすれば
STATUS status[2]; を省ける。
591デフォルトの名無しさん:2005/10/28(金) 14:27:59
>>590
そういう拡張性を損なう最適化は施す意味が無い
592デフォルトの名無しさん:2005/10/29(土) 01:16:45
>>579の2つ目の問題です
>>590さんのアドバイス通りやってもエラーがでてうまくいきませんでした
#include <stdio.h>
#include <stdlib.h>

typedef struct status_tag
{
    int hp;
    int attack;
    int defense;
} STATUS;

STATUS status[2];

void init_game()
{
    int i;

    for (i=0 ; i<2 ; i++)
    {
        status[i].hp=10;
        status[i].attack=2;
        status[i].defense=1;
    }
}

void show_status()
{
    int i;

    for (i=0 ; i<2 ; i++)
    {
593デフォルトの名無しさん:2005/10/29(土) 01:17:28
        printf("Player %d\n", i+1);
        printf("hp:%d\n", status[i].hp);
        printf("attack:%d\n\n", status[i].attack);
    }
}

int main()
{
    int player=0, enemy=1, command, damage;

    init_game();

    while(status[player].hp>0)
    {
        status[player].defense=1; //防御解除
        show_status();
        printf("Player %d コマンド?\n1:戦う\n2:なにもしない\n3:防御\n", player+1);
        scanf("%d", &command);
        switch(command)
        {
        case 1:
            damage = status[player].attack / status[enemy].defense;
            printf("Player %dの攻撃\n", player+1);
            printf("Player %dに%dポイントのダメージをあたえた\n\n", enemy+1, damage);
            status[1-player].hp -= status[player].attack / status[1-player].defense;
594デフォルトの名無しさん:2005/10/29(土) 01:18:42
            break;
        case 2:
            switch(rand()%3)
            {
            case 0:
                printf("Player %dはようすをみている\n", player+1);
                break;
            case 1:
                printf("Player %dはぼーっとしている\n", player+1);
                break;
            case 2:
                printf("Player %dはあわてふためいている\n", player+1);
                break;
595デフォルトの名無しさん:2005/10/29(土) 01:19:13
            }
            break;
        case 3:
            status[player].defense=2;
            printf("Player %dはみをまもっている\n", player+1);
            break;
        }
        player=1-player;
        enemy=1-enemy;
    }

    return EXIT_SUCCESS;
}
596デフォルトの名無しさん:2005/10/29(土) 02:00:18
597デフォルトの名無しさん:2005/10/29(土) 02:40:17
調べてみました
statusの宣言が省略できてないですがこれでよかったでしょうか

typedef struct status_tag
{
    int hp;
    int attack;
    int defense;
} STATUS[2];

STATUS status;
598デフォルトの名無しさん:2005/10/29(土) 02:42:59
元も子もないけど
今更C言語なんか学んでどうするの?
599デフォルトの名無しさん:2005/10/29(土) 02:46:13
・プログラミングの基本はC言語
・潰しが利く
・世界で一番使われている
600デフォルトの名無しさん:2005/10/29(土) 02:56:13
・プログラミングの基本はJava
・潰されます
・組み込み・制御・ゲームでしか使われてない(しかもハードの知識がないと意味がない)
601デフォルトの名無しさん:2005/10/29(土) 02:57:08
602デフォルトの名無しさん:2005/10/29(土) 12:04:49
>>599-600
どっちが現実に近い?
599はよく聞くけど
603デフォルトの名無しさん:2005/10/29(土) 12:43:26
立場が違うだけで、どちらも現実
604デフォルトの名無しさん:2005/10/29(土) 13:56:23
Javaは今Web系で使われまくりなんだが。
605デフォルトの名無しさん:2005/10/29(土) 13:59:22
>>604
C厨に言わせると、WebサーバはCで書いてるからWeb系もCらしいよ
実際はJava>JSP>COBOL>VB>Cの順じゃね?仕事の量的に
606デフォルトの名無しさん:2005/10/29(土) 14:08:29
Cで作ったソフトならいくらでも知ってるけど
Javaで作ったソフトってほとんど知らない。
607デフォルトの名無しさん:2005/10/29(土) 14:26:06
>>606
CとJavaは対象があまり重ならないからそうなる。
608デフォルトの名無しさん:2005/10/29(土) 15:17:15
Javaでの仕事はWeb関係しかないってこと?
609デフォルトの名無しさん:2005/10/29(土) 15:20:46
>>608
最近の仕事はイントラでもWeb使っちゃう事が多い
610デフォルトの名無しさん:2005/10/29(土) 16:32:42
>>608
逆にWEB以外の仕事ってあるのか?
611デフォルトの名無しさん:2005/10/29(土) 16:34:21
その中で一番しんどいのはCだけどな
612デフォルトの名無しさん:2005/10/29(土) 16:57:58
>>610
あるだろ
613デフォルトの名無しさん:2005/10/29(土) 16:59:36
>>612
つまり、無いんですね。
614デフォルトの名無しさん:2005/10/29(土) 17:04:03
>>605
それってWindowsがCで書かれてるから世の中の95%はCだっていうぐらい乱暴な話だな
Apacheなんてソースすら見たことがない奴ばかりだろうに
615デフォルトの名無しさん:2005/10/29(土) 17:05:06
>>613
家電製品にJAVA使われてる。
ポットとか電気釜とかね。
616デフォルトの名無しさん:2005/10/29(土) 17:06:01
そしてCellにも・・・
617デフォルトの名無しさん:2005/10/29(土) 17:07:57
WEB以外にプログラミングの仕事があるのか?って意味かと思ったw
618デフォルトの名無しさん:2005/10/29(土) 17:08:24
WindowsがC#で書かれる様になるのはいつ頃の予定ですか?
619デフォルトの名無しさん:2005/10/29(土) 17:11:01
>>615
実際にどの製品でJavaが使われているんですか?
620デフォルトの名無しさん:2005/10/29(土) 17:19:47
C#は多品種少量生産向け
Windowsみたいな大量生産には向かない
621デフォルトの名無しさん:2005/10/30(日) 00:28:22
いわゆる、パッケージとなってる製品にJavaはほとんどないのは事実。
バーチャルマシーンがないと動かないからなw

でもオラクルの設定プログラムとかはJavaだと思った。
オープンオフィスもJava使ってるみたい。
C#.netやVB.netは.netフレームワークがどれだけ浸透するかだろう。
100メガ以内のランタイムで動くようになれば普及すると思う。
今はそうなのかもしれないが、.netフレームワークを知っている人は
ほとんどいないのが現状なのでは。
Javaよりさらにわかりにくいのが.netの使用環境。
622デフォルトの名無しさん:2005/10/30(日) 01:16:20
>>619
身近な例だと携帯電話か
623デフォルトの名無しさん:2005/10/30(日) 01:48:33
>>622
どのポットとか電気釜にJavaが使われてるんですかと聞いているんです
携帯なんて出されても当たり前すぎなんですが。
624デフォルトの名無しさん:2005/10/30(日) 02:01:11
WindowsUpdateすれば勝手に.NETがインスコされるお
625デフォルトの名無しさん:2005/10/30(日) 16:50:32
Rubyマンセー
626デフォルトの名無しさん:2005/10/30(日) 16:57:34
pythonやろーぜ
627デフォルトの名無しさん:2005/11/01(火) 07:07:39
次の問題まだー?
628デフォルトの名無しさん:2005/11/01(火) 07:14:22
【問題】
わかったから初心者どもはまず”HelloWorld!”を画面に出すプログラムを作りやがれ

【言語】
python

【回答】
print '”HelloWorld!”'
629デフォルトの名無しさん:2005/11/01(火) 07:17:33
【問題】
1から50までの和を計算して表示

【言語】
python

【回答】
sum=0
for i in range(51):
    sum+=i
print sum
630デフォルトの名無しさん:2005/11/01(火) 07:47:16
【問題】
ファイルから数字を読み込み大きい数から順に並べて画面に表示するプログラムを書け
http://gamdev.org/w/?%5B%5B%A4%AA%A4%DE%A4%A4%A4%E9%A1%AA%BA%A3%C6%FC%A4%AB%A4%E9C%B8%C0%B8%EC%A4%F2%B3%D8%A4%F3%A4%C7%A4%A4%A4%AF%A4%BE%A1%BC%A1%AA%5D%5D#content_1_18

【言語】
python

【回答】
filename='numbers.txt'
num=[]
fp=open(filename)
for line in fp:
    num.append(int(line))
fp.close

#print sorted(num)

for i in range(len(num)):
    for j in range(i):
        if num[i]<num[j]:
            tmp=num[i]
            num[i]=num[j]
            num[j]=tmp
print num
631デフォルトの名無しさん:2005/11/01(火) 11:52:42
>>626,628-630
スレ立てろや
632デフォルトの名無しさん:2005/11/01(火) 16:19:29
Python組は速やかにこちらへ移動してください
廃棄スレだったのですがスレタイが良いので再利用します
スレタイにPythonの名前がありますが多言語で競ったほうがおもしろいので
C言語以外はあちらでやりたいと思っています(特にRuby)
今後ともよろしくお願いします

Pythonについて0から教えてください
http://pc8.2ch.net/test/read.cgi/tech/1126073956/
633デフォルトの名無しさん:2005/11/01(火) 18:53:44
C言語はこちらでやりますので移動してください
このスレは破棄します

VIPPERでもわかる C言語プログラミング
http://pc8.2ch.net/test/read.cgi/tech/1129913775/
634デフォルトの名無しさん:2005/11/01(火) 20:40:44
ところで>>1はどこ行った?
635デフォルトの名無しさん:2005/11/01(火) 22:16:44
アイツは星になったんだよ・・・。マリアンヌー!!
636デフォルトの名無しさん:2005/11/02(水) 01:23:42
次の問題まだぁ〜?
637デフォルトの名無しさん:2005/11/02(水) 02:12:15
そろそろC言語っぽい問題にするか
環境依存だろうがこんな感じで

数字を漢数字の文字列に変換するライブラリを作れ

条件は以下で
1.動作確認用のテストプログラムを作る事
2.テストプログラムと変換のモジュールは別ファイルとする事
3.ヘッダーファイルを作る事
638デフォルトの名無しさん:2005/11/02(水) 03:04:38
もうちっと簡単そうな香具師

某表計算ソフトはセルの横軸が A,B,C,...,Z,AA,AB,AC,...,ZZ,AAA,AAB,...
といった表記になっている
これを数字1〜と相互に変換できるプログラム2つ
639デフォルトの名無しさん:2005/11/02(水) 07:25:45
ぜんぜんわからね〜w
640デフォルトの名無しさん:2005/11/02(水) 09:35:34
>>638
//とても難しい
//2桁以上になる数字が変換できなかった
#include <stdio.h>
#include <stdlib.h>

#define KETA_MAX 3

// 数字からAAA形式に変換するプログラム
int main()
{
    const char *alpha="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    int num;
    int AAA[KETA_MAX];
    int keta=0;
    int keta_num=26;
    int i;

    scanf("%d", &num);
    
    if (num<1)
    {
        return EXIT_FAILURE;
    }

    num--;

    do
    {
        AAA[keta]=num%keta_num;
        num=num/26;
        keta++;
641デフォルトの名無しさん:2005/11/02(水) 09:36:04
        if (keta>KETA_MAX)
        {
            return EXIT_FAILURE;
        }

        printf("num(10進数)%d桁目:%d\n", keta, num);
    }
    while(num!=0);

    for (i=0 ; i<keta ; i++)
    {
        printf("%c", alpha[AAA[i]]);
    }
    printf("\n");

    return 0;
}
642640:2005/11/02(水) 09:42:09
//今ふと思いついた
//最後の表示する部分を訂正します
//これでうまくいくはず!!
    for (i=0 ; i<keta ; i++)
    {
        if (i>0)
        {
            printf("%c", alpha[AAA[i]]-1);
        }
        else
        {
            printf("%c", alpha[AAA[i]]);
        }
    }
    printf("\n");
643デフォルトの名無しさん:2005/11/02(水) 10:52:41
windows依存でいいからゲーム作りたい
644デフォルトの名無しさん:2005/11/02(水) 13:05:51
>>637
正の整数限定版。少数はマンドクセ。あと「じょ」が漢字変換できんかった。

#include <stdio.h>
#include <string.h>
#include "digit2ksuji.h"
int main(int argc, char **argv)
{
charin[128], out[1024];

while(1) {
scanf("%s", in);
if(!strcmp(in, "q")) {break;}
if(digit2ksuji(in, out) < 0) {fprintf(stderr, "error\n"); continue;}
printf("%s\n", out);
}
return 0;
}
645デフォルトの名無しさん:2005/11/02(水) 13:08:20
/* digit2ksuji.h */
#ifndef DIGIT2KSUJI_H
#define DIGIT2KSUJI_H
extern int digit2ksuji(const char *in, char *out);
#endif /* #ifndef DIGIT2KSUJI_H */

変換モジュール本体
#include <stdio.h>
#include <string.h>
#include <ctype.h>

const char *number[] = {"","一","二","三","四","五","六","七","八","九"};
const char *fig1[] = {"","十","百","千"};
const char *fig2[] = {"","万","億","兆","京","垓","じょ","穣","溝","澗","正","載","極","恒河沙","阿僧祗","那由他","不可思議","無量大数"};

int digit2ksuji(char *in, char *out)
{
int i, fig;

fig = strlen(in);
for(i = 0, out[0] = '\0'; i < fig; i++) {
if(!isdigit(in[i])) {return -1;}
if(!((fig-i-1)%4) || in[i] != '1') {strcat(out, number[in[i]-'0']);}
if(in[i]!='0') {strcat(out, fig1[(fig-1-i)%4]);}
if(!((fig-i-1)%4)) {strcat(out, fig2[(fig-1-i)/4]);}
}
if(strlen(out) == 0) {strcat(out,"零");}
return 0;
}
646デフォルトの名無しさん:2005/11/02(水) 13:38:19
試してみたら一億万とか出るわ、73桁以上でぬるぽだわで訂正。
int digit2ksuji(const char *in, char *out)
{
inti, fig, disp_fig2 = 0;

if((fig = strlen(in)) > 72) {return -1;}
for(i = 0, out[0] = '\0'; i < fig; i++) {
if(!isdigit(in[i])) {return -1;}
if(!((fig-i-1)%4) || in[i] != '1') {strcat(out, number[in[i]-'0']);}
if(in[i]!='0') {disp_fig2 = 0; strcat(out, fig1[(fig-1-i)%4]);}
if(!disp_fig2 && !((fig-i-1)%4)) {disp_fig2 = 1;strcat(out, fig2[(fig-1-i)/4]);}
}
if(strlen(out) == 0) {strcat(out,"零");}
return 0;
}
647デフォルトの名無しさん:2005/11/02(水) 20:37:01
>>637
千百十なども使うの?それとも
「一九四二」のようにただアラビア数字を漢数字に置換するだけ?
648デフォルトの名無しさん:2005/11/02(水) 20:39:02
千百十も使わないとつまらないだろう。
649デフォルトの名無しさん:2005/11/02(水) 21:07:11
.netは、なんで定数テーブルを勝手にconstと判断するんだ?
650デフォルトの名無しさん:2005/11/02(水) 23:47:30
  int           value = 0, i;
  const char    table[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

  for (i = 0, value = 0; src[i] != '\0'; i++) {
    char        *p = strchr(table, src[i]);
    if (p == NULL)
      return NULL;
    value = value * strlen(table) + 1;
    value += p - table;
  }

  if (pow(10, size) <= value)
    return NULL;

  sprintf(dest, "%d", value);
  return dest;
}

int main(int argc, char ** argv) {
  int   i;
  char  str[30];
  for (i = 1; i < argc; i++) {
    if (digit2alpha(str, argv[i], sizeof(str))) {
      printf("%s=>%s\n", argv[i], str);
    } else if (alpha2digit(str, argv[i], sizeof(str))) {
      printf("%s=>%s\n", argv[i], str);
    }
  }
  return 0;
}
651デフォルトの名無しさん:2005/11/02(水) 23:48:08
>>638
#include <stdio.h>
#include <string.h>
#include <math.h>

char * digit2alpha(char * dest, const char * src, int size) {
  int           temp, i, value;
  const char    table[] = "ZABCDEFGHIJKLMNOPQRSTUVWXY";
  char          dummy;

  if (sscanf(src, "%d %c", &value, &dummy) != 1 || value <= 0)
    return NULL;

  for (i = 0, temp = value; temp; i++) {
    temp = (temp - 1) / strlen(table);
  }
  if (i >= size)
    return NULL;

  dest[i--] = '\0';
  for (; i >= 0; i--) {
    dest[i] = table[value % strlen(table)];
    value = (value - 1) / strlen(table);
  }

  return dest;
}

char * alpha2digit(char * dest, const char * src, int size) {
652651-650:2005/11/02(水) 23:50:29
てすと
bash-2.05$ a.out 26 27 28 hoge 702 703 AAA ZZZ 18279
26=>Z
27=>AA
28=>AB
702=>ZZ
703=>AAA
AAA=>703
ZZZ=>18278
18279=>AAAA
653デフォルトの名無しさん:2005/11/03(木) 02:17:12
>>647
己のレベルに合わせて実装すればよろし
654デフォルトの名無しさん:2005/11/03(木) 18:54:32
>>637
文字列を返す関数の作り方がわからなかったので表示だけ

//lib.h
#ifndef _lib_c_
#define _lib_c_

#include <stdio.h>

extern void draw_kansuji(int num);

#endif



//lib.c
#include "lib.c"

void draw_kansuji(int num)
{
    const char kanji[10][3]={"零","壱","弐","参","四","五","六","七","八","九"};

    if (num==0)
        return;

    draw_kansuji(num/10);
    printf("%s", kanji[num%10]);
}
655デフォルトの名無しさん:2005/11/03(木) 18:55:48
#include <stdio.h>
#include <stdlib.h>

#include "lib.h"

int main()
{
    int input_num;

    scanf("%d", &input_num);
    draw_kansuji(input_num);

    return EXIT_SUCCESS;
}
656デフォルトの名無しさん:2005/11/03(木) 18:57:32
>>654の#include "lib.c"は.hの間違いです
なぜかワーニングもなく動いてたけど
657デフォルトの名無しさん:2005/11/03(木) 20:12:50
【問題】1から50までの和を計算して表示

#include <stdio.h>

int main()
{
    int sum=0;
    _asm
    {
        mov eax, 0
        mov ecx, 50
LOOP1:
        add eax, ecx
        loop LOOP1
        mov sum, eax
    }
    printf("%d\n", sum);
    return 0;
}
658デフォルトの名無しさん:2005/11/03(木) 20:39:43
【問題】 1+3-5+7-9+11-13+・・・を50回計算した合計を出力するプログラムを。
#include <stdio.h>

int main()
{
    int sum;
    _asm
    {
        mov ecx, 25
        mov eax, 1
        mov ebx, 3
LOOP1:
        add eax, ebx
        add ebx, 2
        sub eax, ebx
        add ebx, 2
        loop LOOP1
        mov sum, eax
    }
    printf("%d\n", sum);
    return 0;
}
659デフォルトの名無しさん:2005/11/03(木) 20:47:48
>>654
> 文字列を返す関数の作り方がわからなかった

私もC言語勉強中なので、関数から文字列を返す方法を書いてみる。
間違ってたら指摘よろしく > 詳しい人。

関数から、「文字列そのもの」を返そうとするとC言語的には無理だと思う。

私が思い付く、可能な方法は、
方法1、char の配列の先頭アドレスを関数が受け取って、そこに書き込む。
方法2、関数内で malloc で領域を確保して、そこに書き込んで、そのアドレスを返す。

あってます?
660デフォルトの名無しさん:2005/11/03(木) 20:50:18
static な配列なら
661デフォルトの名無しさん:2005/11/03(木) 21:00:30
>>659
2つも正解。そして>>660の方法もあるが最近の流行ではない。
どちらかというと前者の方式が使われていることが多い気がすると俺は思う。
662デフォルトの名無しさん:2005/11/03(木) 21:03:30
後者の場合、mallocで確保した文字列はやっぱりどこかで解放しないとダメなの?
663デフォルトの名無しさん:2005/11/03(木) 21:13:02
staticだと再帰できない気がする
664デフォルトの名無しさん:2005/11/03(木) 21:19:33
>>662
ユーザがfreeしなきゃいけない。WIN32APIとかは前者が多いね。
665デフォルトの名無しさん:2005/11/03(木) 21:21:04
static版作った

//lib.h
#ifndef _lib_c_
#define _lib_c_

#include <stdio.h>

extern char *draw_kansuji(int num);

#endif

//lib.c
#include "lib.h"

char *draw_kansuji(int num)
{
    const char kanji[10][3]={"零","壱","弐","参","四","五","六","七","八","九"};
    static char str[80]="";

    if (num==0)
        return 0;

    draw_kansuji(num/10);
    strcat(str, kanji[num%10]);
    return str;
}
666デフォルトの名無しさん:2005/11/03(木) 21:21:36
#include <stdio.h>
#include <stdlib.h>

#include "lib.h"

int main()
{
    int input_num;

    scanf("%d", &input_num);
    printf("%s\n", draw_kansuji(input_num));

    return EXIT_SUCCESS;
}
667デフォルトの名無しさん:2005/11/03(木) 21:31:12
方法1版

#ifndef _lib_c_
#define _lib_c_

#include <stdio.h>

extern char *draw_kansuji(int num, char *str);

#endif

#include "lib.h"

char *draw_kansuji(int num, char *str)
{
    const char kanji[10][3]={"零","壱","弐","参","四","五","六","七","八","九"};

    if (num==0)
        return 0;

    draw_kansuji(num/10, str);
    strcat(str, kanji[num%10]);
    return str;
}
668デフォルトの名無しさん:2005/11/03(木) 21:31:42
#include <stdio.h>
#include <stdlib.h>

#include "lib.h"

int main()
{
    int input_num;
    char str[80]="";

    scanf("%d", &input_num);
    printf("%s\n", draw_kansuji(input_num, str));

    return EXIT_SUCCESS;
}
669デフォルトの名無しさん:2005/11/03(木) 21:48:03
方法2、関数内で malloc で領域を確保して、そこに書き込んで、そのアドレスを返す。

//lib.h
#ifndef _lib_c_
#define _lib_c_

#include <stdio.h>

extern char *draw_kansuji(int num, char *str);

#endif

//lib.c
#include "lib.h"

char *draw_kansuji(int num, char *str)
{
    const char kanji[10][3]={"零","壱","弐","参","四","五","六","七","八","九"};

    if (num==0)
        return 0;
    if (str==NULL)
        str=calloc(80, sizeof(char));
    draw_kansuji(num/10, str);
    strcat(str, kanji[num%10]);
    return str;
}
670デフォルトの名無しさん:2005/11/03(木) 21:48:54
#include <stdio.h>
#include <stdlib.h>

#include "lib.h"

int main()
{
    int input_num;
    char *pStr;

    scanf("%d", &input_num);
    pStr=draw_kansuji(input_num, NULL);
    printf("%s\n", pStr);
    free(pStr);

    return EXIT_SUCCESS;
}
671デフォルトの名無しさん:2005/11/03(木) 22:00:20
【問題】 100までの合計を求めよ
for、while、gotoを使った3通りのプログラムを作成せよ

//loop命令を使いました
#include <stdio.h>

int sum(int num)
{
    _asm
    {
        mov eax, 0
        mov ecx, num
LOOP1:
        add eax, ecx
        loop LOOP1
    }
}

int main()
{
    printf("%d\n", sum(100));
    return 0;
}
672デフォルトの名無しさん:2005/11/03(木) 22:03:08
【問題】 100までの合計を求めよ
for、while、gotoを使った3通りのプログラムを作成せよ

//jnz命令を使いました
#include <stdio.h>

int sum(int num)
{
    _asm
    {
        mov eax, 0
        mov ecx, 0
LOOP1:
        add ecx, 1
        add eax, ecx
        cmp ecx, 100
        jnz LOOP1
    }
}

int main()
{
    printf("%d\n", sum(100));
    return 0;
}
673デフォルトの名無しさん:2005/11/03(木) 22:06:10
static版の欠点は、>663もあるがマルチスレッド環境で使えないということもある。
malloc版の欠点であるオーバヘッドと解放義務の発生についても回避できない。
呼び出し側確保版の欠点であるバッファオーバランの可能性は、確保した長さも渡すことである程度回避できる。
674デフォルトの名無しさん:2005/11/03(木) 22:21:18
【問題】数字を入れればその階乗を計算するプログラミングってどうすればいい?
再起つかわず

#include <stdio.h>

int kaijou(int num)
{
    _asm
    {
        mov eax, 1
        mov ecx, num
LOOP1:
        mul ecx
        loop LOOP1
    }
}

int main()
{
    printf("%d\n", kaijou(10));
    return 0;
}
675デフォルトの名無しさん:2005/11/03(木) 22:52:51
【問題】
1、文字列を入力し、文字列の長さを調べるコードを作成
2、文字列を入力し、文字列にいくつ「a」の文字が含まれるかを調べるコードを作成
3、文字列を入力し、文字列中の「a」という文字を「b」に置き換えるコードを作成
いずれもstdio.h以外のヘッダを使用しないで作る事

// 1、文字列を入力し、文字列の長さを調べるコードを作成
#include <stdio.h>

int len(const char *str)
{
    _asm
    {
        mov eax, 0
        mov esi, str
LOOP1:
        cmp [esi], 0
        jz END
        add eax, 1
        add esi, 1
        jmp LOOP1
END:
    }
}

int main()
{
    const char *str="123456789012345678901234567890";
    printf("%d\n", len(str));
    return 0;
}
676デフォルトの名無しさん:2005/11/03(木) 23:07:36
>>674
何故アセンブラみたいなコードが混じってるのですか。
677デフォルトの名無しさん:2005/11/03(木) 23:11:10
>>676
インラインアセンブラでオナニーしたい(精神的)年頃なんだろう。ほっといてやれ。
678デフォルトの名無しさん:2005/11/03(木) 23:31:57
【問題】2、文字列を入力し、文字列にいくつ「a」の文字が含まれるかを調べるコードを作成
#include <stdio.h>

int count(const char *str, char alpha)
{
    _asm
    {
        mov eax, 0
        mov bl, alpha
        mov esi, str
LOOP1:
        cmp [esi], 0
        jz END
        cmp [esi], bl
        jnz SKIP
        add eax, 1
SKIP:
        add esi, 1
        jmp LOOP1
END:
    }
}

int main()
{
    const char *str="abracadabra";
    printf("%d\n", count(str, 'a'));
    return 0;
}
679デフォルトの名無しさん:2005/11/03(木) 23:39:06
なんでも良いが、インラインアセンブラ使うんなら環境とコンパイラ名位書いとけな
ポータビリティないから他の人が試せないから正しいかどうかの指摘も出来ないな
680デフォルトの名無しさん:2005/11/03(木) 23:43:07
VC
681デフォルトの名無しさん:2005/11/04(金) 00:00:55
【問題】 3、文字列を入力し、文字列中の「a」という文字を「b」に置き換えるコードを作成
//windowsでVCです
#include <stdio.h>
char *replace(char *src, char alpha1, char alpha2)
{
    _asm
    {
        mov eax, 0
        mov bl, alpha1
        mov dl, alpha2
        mov esi, src
LOOP1:
        cmp [esi], 0
        jz END
        cmp [esi], bl
        jnz SKIP
        mov [esi], dl
SKIP:
        add esi, 1
        jmp LOOP1
END:
    }
    return src;
}

int main()
{
    char str[]="abracadabra";
    printf("%s\n", replace(str, 'a', 'b'));
    return 0;
}
682デフォルトの名無しさん:2005/11/04(金) 01:12:42
Intel形式ダサス
683デフォルトの名無しさん:2005/11/04(金) 01:30:41
コンパイルは出来たのに、実行したら何も表示されないのはどのような原因が考えられるでしょうか?
○○が原因で、○○.exe にエラーが生じましたとなるのですが。
3次元問題を差分法で解くために、時間と含めて4次元配列をつくりましたが、メモリのことも考慮して、時間の配列要素は2つにしました。
つまり3次元分の必要メモリ数*2だけのメモリが必要なのですが。。。
684デフォルトの名無しさん:2005/11/04(金) 01:34:11
>>683
mallocつかえば?
685デフォルトの名無しさん:2005/11/04(金) 02:54:47
VCでインライン使ってるならfastcallも使えよ
686デフォルトの名無しさん:2005/11/04(金) 10:10:21
>>671を__fastcallを使って書き直した
引き数がecxに代入されて便利

#include <stdio.h>

int __fastcall sum(int num)
{
    _asm
    {
        mov eax, 0
LOOP1:
        add eax, ecx
        loop LOOP1
    }
}

int main()
{
    printf("%d\n", sum(100));
    return 0;
}
687デフォルトの名無しさん:2005/11/04(金) 11:34:34
「便利」はいいけど、そんな関数ループで作るようなもんじゃないだろう……
688デフォルトの名無しさん:2005/11/04(金) 12:31:05
//ループが無くなるように変更

#include <stdio.h>

int __fastcall sum(int num)
{
    _asm
    {
        mov eax, ecx
        add eax, 1
        mul ecx
        shr eax,1
    }
}

int main()
{
    printf("%d\n", sum(100));
    return 0;
}
689デフォルトの名無しさん:2005/11/04(金) 12:38:38
>>638
lea命令を使うほうがいいですよ。

int __declspec(naked)__fastcall sum(int num)
{
    _asm
    {
        lea eax,[ecx+1]
        mul ecx
        shr eax,1
        ret
    }
}
690689:2005/11/04(金) 12:39:36
×638
>>688の間違い
691デフォルトの名無しさん:2005/11/04(金) 12:42:34
なにこのアセンブラスレ
692デフォルトの名無しさん:2005/11/04(金) 14:51:05
インラインアセンブラやりたいなら他所でやってろ
C関係ねーだろ
693デフォルトの名無しさん:2005/11/04(金) 15:15:56
次の問題まだぁ〜?
694デフォルトの名無しさん:2005/11/04(金) 17:20:00
いんらいんアセンブラとやらを使うと何かいいことありますか?
695デフォルトの名無しさん:2005/11/04(金) 17:58:27
>>694
淫乱になります
696デフォルトの名無しさん:2005/11/04(金) 17:59:45
>>694
・最適化しにくくなる。
・ポータビリティが落ちる。
697デフォルトの名無しさん:2005/11/04(金) 18:01:30
>>694
MMXやSSEなどコンパイラが利用してくれない機能を使える
698デフォルトの名無しさん:2005/11/04(金) 18:33:30
>>697
性能がアップしたと思っているとcpuが変わった時に性能激減でもう一度書き直す羽目になる
699デフォルトの名無しさん:2005/11/04(金) 18:57:42
>>694
素人が使うと遅くなる
700デフォルトの名無しさん:2005/11/05(土) 00:24:01
>>699
凄く分かりやすい例えですね。
つまり698のことなんですね!
701デフォルトの名無しさん:2005/11/05(土) 01:35:13
>>693
> 次の問題まだぁ〜?

じゃあ、点を動かしていく問題。
点の初期座標は xy 平面上の (0, 0) とする。
プログラムには、点を動かす指令と、方向転換の指令がコマンドライン引数として交互に与えられる。
点を動かす指令は、ゼロより大きい整数で与えられる。
方向転換の指令は、文字 t (turn の略) で与えられる。

例:
> program.exe t 50 t 50 t 50
150

点は、「動く方向」を持っており、初期値は「上向き」である。
点を動かす指令が与えられるたびに点は、xy 平面上を指定された距離だけそのときの「動く方向」に動く。
動く方向は、方向転換の指令が与えられるたびに、上(初期値)→右→下→左→上と、90度変化する。
上記の例では、コの字を描くように、点が動く。

点がそれまでに描いた軌跡の上を、再度、点が通過しようとした場合、衝突と判断し、
衝突した旨を表示し、衝突までに点が移動した距離を表示し、プログラムを異常終了すること。
全ての指令を衝突無しで完了した場合は、点が移動した距離を表示し、プログラムを正常終了すること。

2種類の指令は必ず交互に与えられる。(ある種類の指令が連続して与えられたかどうかを考慮しなくて良い。)
2種類の指令のうちどちらが先に与えられるかはわからない。(どちらが先に与えられても正しく動くように書くこと。)
指令の個数はゼロ個かも知れない。(移動しないので衝突もしない。移動距離はゼロになるはず。)
点が動いて行く様子を表示する必要はない。
702デフォルトの名無しさん:2005/11/05(土) 01:54:34
【問題】
以下の構造体を用いて、単方向リストを作れ。
struct field_t {
    int val;
    struct field_t *next;
}

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

struct field_t {
    int val;
    struct field_t *next;
};

void draw_field(struct field_t *head)
{
    struct field_t *field;

    field=head->next;
    while (field!=NULL)
    {
        printf("%d\n", field->val);
        field=field->next;        
    }
}
703デフォルトの名無しさん:2005/11/05(土) 01:55:09
void add_field(struct field_t *head, int num)
{
    struct field_t *field;

    field=head;
    while (field->next!=NULL)
    {
        field=field->next;        
    }

    field->next=malloc(sizeof(struct field_t));

    field=field->next;
    field->val=num;
    field->next=NULL;
}

void delete_all_field(struct field_t *head)
{
    struct field_t *field, *beforeField;

    field=head;
    while (field!=NULL)
    {
        beforeField=field;
        field=field->next;
        free(beforeField);
    }
}
704デフォルトの名無しさん:2005/11/05(土) 01:55:40
struct field_t *init_field(struct field_t *head)
{
    delete_all_field(head);
    head=malloc(sizeof(struct field_t));
    head->val=0;
    head->next=NULL;
    return head;
}

int main()
{
    struct field_t *head=NULL;
    int i;

    head=init_field(head);

    for (i=0 ; i<100 ; i++)
    {
        add_field(head, i);
    }

    draw_field(head);

    delete_all_field(head);

    return 0;
}
705デフォルトの名無しさん:2005/11/07(月) 22:50:36
過疎ってんな。
VIP Cスレは夜帰りにはとても追い付かないスピードだぞ。
706デフォルトの名無しさん:2005/11/08(火) 18:29:32
新しいネタを次々と潰すんだもの
しかも当人たちはダンマリ
これじゃ盛り上がれっていうほうが無理だ
707デフォルトの名無しさん:2005/11/08(火) 20:50:29
ネタでいいんなら>>701
#include <stdio.h>

typedef struct Point { int x,y,dx,dy; struct Point *prev; } Point;
void turn(Point * p) { int temp = p->dy; p->dy = -p->dx; p->dx = temp; }

int move(Point * p, int rest, char ** step_list, int step) {
  Point p2, *temp;

  if (!rest) {
    if (*step_list == NULL)
      return step;

    turn(p);
    sscanf(*step_list++, "%d", &rest);
  }
  p2 = *p, p2.x += p2.dx, p2.y += p2.dy, p2.prev = p;
  for (temp = p; temp != NULL; temp = temp->prev) {
    if (p2.x == temp->x && p2.y == temp->y)
708デフォルトの名無しさん:2005/11/08(火) 20:50:56
      return -step;
  }
  return move(&p2, rest - 1, step_list, step + 1);
}

int main(int argc, char ** argv)
{
  int   i = 1, j = 0, step;
  Point p = {0,0,1,1};
  for (; i < argc; i++) {
    if (argv[i][0] != 't') {
      argv[j++] = argv[i];
    }
  }
  argv[j] = NULL;
  step = move(&p, 0, argv, 0);
  if (step < 0) printf("%d(clashed!)\n", -step);
  else printf("%d\n", step);
  return 0;
}
709デフォルトの名無しさん:2005/11/10(木) 10:43:11
//衝突させるとこでわけわかんなくなったから
//距離の計算までやったよ
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define ARRAY_SIZE 255

struct dot_tag
{
    int x;
    int y;
    int direction;
};


void push_data(struct dot_tag *dot_dest, struct dot_tag *dot_src)
{
    memcpy(dot_dest, dot_src, sizeof(struct dot_tag));
}


int check(struct dot_tag *dot_array, int dp)
{
    int i;

    for (i=0 ; i<=dp ; dp++)
    {
        /*
        if (collision())
        {
            exit(EXIT_FAILURE);
710デフォルトの名無しさん:2005/11/10(木) 10:43:41
        }
        */
    }
    return 0;
}

int main(int argc, char *argv[])
{
    struct dot_tag dot={0,0,0};
    struct dot_tag dot_array[ARRAY_SIZE];
    int dp=0;

    int distance=0;
    int ax[]={0,1,0,-1};
    int ay[]={-1,0,1,0};
    int i;
    int sum=0;

    push_data(&dot_array[dp++], &dot);

    for (i=1 ; i<argc ; i++)
    {
        printf("\ncommand:%s\n", argv[i]);
        if (!strcmp(argv[i], "t"))
        {
            dot.direction++;
            if(dot.direction>3)
            {
                dot.direction=0;
711デフォルトの名無しさん:2005/11/10(木) 10:45:14
            }
        }
        else
        {
            distance=atoi(argv[i]);
            dot.x+=ax[dot.direction]*distance;
            dot.y+=ay[dot.direction]*distance;
            sum+=distance;
            push_data(&dot_array[dp++], &dot);
            /*
            if (check(dot_array, dp-1))
            {
                printf("衝突しました\n");
                printf("総移動距離:%d\n", sum);
                return EXIT_FAILURE;
            }
            */
        }
        printf("argv:%s\n", argv[i]);
        printf("dis:%d\n", distance);
        printf("dir:%d\n", dot.direction);
712デフォルトの名無しさん:2005/11/10(木) 10:45:45
        printf("x:%d\n", dot.x);
        printf("y:%d\n", dot.y);
    }

    printf("\n\n全データ\n");
    for (i=0 ; i<dp ; i++)
    {
        printf("%d番目\n", i);
        printf("dir:%d\n", dot_array[i].direction);
        printf("x:%d\n", dot_array[i].x);
        printf("y:%d\n", dot_array[i].y);
    }

    printf("\n\n\n結果\n");
    printf("dir:%d\n", dot.direction);
    printf("x:%d\n", dot.x);
    printf("y:%d\n", dot.y);
    printf("総移動距離:%d\n", sum);

    return EXIT_SUCCESS;
}
713半ばニート1号 ◆pnCm4bpG3Y :2005/11/10(木) 15:42:20
[マイスペック]
24歳。
フリーター。
PC、インターネット暦5年。文系。
[備考]
バイトやめてから2ヶ月程ひきこもっていた。
--------------------------------------
俺も今日からC言語学ぶべ!

因みに自分、上記の通り文系で数学は高1で終了してしまってるもののふ。
そんな自分が今日からがんがってみようと思う。皆さんよろすく。

本は「やさしいC(第2版)」を購入。
>>274氏の書き込みになにやら惹かれるものがあったので。

数学苦手な自分がどこまで根をあげずできるか試してみるYO。

とりあえず今日のところは、
この本が難しくなってきたなと感じるところまで読んでみる事にする。
714デフォルトの名無しさん:2005/11/10(木) 16:55:31
>>713
お前の態度が気に入らない
715半ばニート1号 ◆pnCm4bpG3Y :2005/11/10(木) 17:46:42
>>714
C言語を学ぶ姿勢が気にいらないのか、
ただ単に苛立ちを感じる書き込みになっていただけなのか・・・
どちらにしてもスマンかった。ん、マジメにやる。

やさしいC、とりあえずLESSON2まで読み終わる。
ここまで読んで感じた事は、今まで立ち読みしたC言語入門の中では
一番読み易かったって事。

なかでも、二進数やら八進数やらの表し方まで丁寧に説明してくれていたのが
個人的に嬉しかった。
今まで俺の頭は「二進数とは食べれるのですか?」という認識だったからw
これだけでもこの本で良かったなぁと思う。>>274氏に拝む。

ところで、
こんな感じで頻繁にチラシの裏しに来るつもりなんだけどいいのかな・・・?
イマイチこのスレの基盤が見えないのでそこら辺が少し心配。
716デフォルトの名無しさん:2005/11/10(木) 18:09:54
>>715
頑張れ、ニート!
717デフォルトの名無しさん:2005/11/10(木) 19:30:03
>>713
高1の数学じゃ役に立たんだろ
線形代数必須
718デフォルトの名無しさん:2005/11/10(木) 19:43:03
高3ぐらいだっけ
SINCOSで悩んでた直後にやった気がする
そういえばSINCOSってマンコクサインに似てるよね
719274:2005/11/10(木) 19:59:32
>>714
拝むってw俺年下だよw

まあ、俺のレスでやさC読者が増えたのは良かったと思う。少し根気があればそうなかなか投げ出さない本だと思うから。
それと、二進八進は情報技術検定3級の方がよっぽどkwsk説明してる。何か資料とか参考書があったら是非とも学んでおくべし。

やさCの事で何か質問あったら言って(まず無いか; 「やさしい」だし
出来る限り協力するわ。
720デフォルトの名無しさん:2005/11/10(木) 20:30:14
wikiの過去問2問目で詰まりました。
何だよファイル処理って・・・orz
721デフォルトの名無しさん:2005/11/10(木) 20:33:40
ちなみに麻奈タンは男だよ
722デフォルトの名無しさん:2005/11/10(木) 20:34:34
>>720
何か本を買いな。Wikiは(今のところ)過去問を置いているに過ぎないから、
あれだけ見ていればできるようにはなれない。
723デフォルトの名無しさん:2005/11/10(木) 20:44:37
>>722
そうしてみます。。
724デフォルトの名無しさん:2005/11/10(木) 20:55:40
>>721
 〃∩ _, ,_    /)    〃∩ _, ,_    /)    〃∩ _, ,_    /)゛
⊂⌒( `Д´)ミ( ⌒ヽつ⊂⌒( `Д´)ミ( ⌒ヽつ⊂⌒( `Д´)ミ( ⌒ヽつ
 `ヽ._つ⊂ノ⊂( ,∀、)つ.`ヽ._つ⊂ノ⊂( ,∀、)つ.`ヽ._つ⊂ノ⊂( ,∀、)つ
     ソンナノヤダアアアアアァァァァァァァァ!!!!!!!!
725デフォルトの名無しさん:2005/11/10(木) 21:00:05
まぁテキストファイルをstdin/stdoutと同様に扱うだけなら以下を押さえればおk
・FILE構造体へのポインタを宣言する(これをfpとする)
・fpにfopen関数でファイルを結びつける
 - fopen("FILENAME", "MODE");
 - MODEには読み込みならr, 書き込みならw(このとき既存ファイルは消去される)
  追記ならaを指定する
・printf/scanfの代わりにfprintf/fscanfを使う
 - 変更点は第一引数としてfpが来る
  ex) fprintf(fp, "%d\n", 123);
・使い終わったファイルはちゃんとfclose関数で閉じる
 - fclose(fp);
726274:2005/11/10(木) 21:46:54
やべ、気付けよ俺
>>719
>>714>>715
727半ばニート1号 ◆pnCm4bpG3Y :2005/11/10(木) 23:12:00
>>716
ありがとう。
C言語ど素人のニートがどこまで頑張れるか、
生暖かい目で見守ってくれると嬉しいw

>>717
( д) ゚ ゚  
ソレ、タベレマスカ?
一日で基礎だけでも覚えれるようなものなら良いけどと思ってググったら、
全くそんな気がしなくてワラタwでも必須ならこれもやらにゃなぁ。

>>719
良いモン紹介してくれた上に
協力までとは・・・その心意気にホント感謝・゚・(ノ∀`)
お言葉に甘えまする。拝むもんに年の差なんてー(ry
今、資格の本見て探してたら情報技術検定見つけた。
取る取らんは別として年に二回しか試験やってないのって
結構厳しいね(´・ω・`)
-------------------------
あれから、本書に載ってなかった(と思われる)
n進法を10進法にする公式とその逆の公式をググッて覚える。

その後「プログラムを打って」と書いてる所は打ちながら、
なんとかLesson3まで読み終わる。まだ本にはついていけそうな感じ。

scanfとprintf使って、文字入れたら返答するとこまではいけました。
小さいながらもこの達成感。こんな感覚いつぶりの事だろう。
明日も頑張りたい。今日はもう寝ます。
728デフォルトの名無しさん:2005/11/10(木) 23:33:00
<HTML><HEAD><TITLE>例8</TITLE></HEAD>
<BODY>
<FORM NAME="TEST">
調べたい数=
<INPUT TYPE="TEXT"NAME="NYURYOKU"onChange=
"x=TEST.NYURYOKU.value;
TEST.KEKKA.value=Math.sqrt(x);">
<HR>
あなたが入力した数の平方根は
<INPUT TYPE="TEXT"NAME="KEKKA">
です。
</FORM>
</BODY></HTML>

と、

<HTML><HEAD><TITLE>例8</TITLE></HEAD>
<BODY>
<SCRIPT language="javascript">
x=5;
y=1;
s=0;
while(y<=x){
s=s+y;
y=y+1;
}
alert("1から"+x+"までの合計は"+s+"です。");
</SCRIPT>
</BODY></HTML>

を組み合わせて、1からユーザーの入力した数までの合計値を求めて表示する
javascriptを作ってください!
729デフォルトの名無しさん:2005/11/10(木) 23:45:09
>>728
スレ違い
730デフォルトの名無しさん:2005/11/10(木) 23:49:56
>>728
<HTML><HEAD><TITLE>例8</TITLE></HEAD>
<BODY>
<FORM NAME="TEST">
調べたい数=
<INPUT TYPE="TEXT"NAME="NYURYOKU"onChange=
"x=eval(TEST.NYURYOKU.value);
TEST.KEKKA.value=x*(x+1)/2;">
<HR>
あなたが入力した数の合計は
<INPUT TYPE="TEXT"NAME="KEKKA">
です。
</FORM>
</BODY></HTML>
731デフォルトの名無しさん:2005/11/11(金) 00:39:42
>>727
>>716ではないが、俺も4月から始めたばかりの初心者だ。(しかも、バリバリの文系。数学は数2Bまでしかやってない)
夏までは『Cの絵本』と大学の講義で基礎部分を学んだ。今は『猫でもわかる〜』を使って独学している。
今日は『Cの絵本』だと今一つぴんとこなかったポインタの基礎を、やっと理解できた。
まだまだ先は長いが、お互い頑張ろう。
732デフォルトの名無しさん:2005/11/11(金) 00:52:52
>>697
っ[Intel C++][xmmintrin.h]
733デフォルトの名無しさん:2005/11/11(金) 00:56:23
学校の数学ってそんなに大切なの?
C言語覚えるのと同じでやりながら必要なもの覚えればいいんじゃない?
734デフォルトの名無しさん:2005/11/11(金) 00:59:23
>>733
何が大切な事がわかってない人ですか?
735デフォルトの名無しさん:2005/11/11(金) 01:01:51
やりながら覚えるっていうのは仕事に追われた場末のマが自虐的に言う台詞だぞ
あまり真剣に受け止めるな
736デフォルトの名無しさん:2005/11/11(金) 01:14:49
>>727
線形代数って名前でもメインは行列とベクトルだけどな
数Cの教科書で基礎、線形代数のでその他をやるが吉
アルゴリズム考えるときに結構応用が利く
737デフォルトの名無しさん:2005/11/11(金) 02:09:44
>>730
スレ違いの中、本当にありがとうございました(/_;)
助かりました!
738デフォルトの名無しさん:2005/11/11(金) 02:52:37
935 名前: デフォルトの名無しさん [sage] 投稿日: 2005/11/06(日) 15:25:10
このsageない基地外なんか過去から全部同じ椰子じゃないかとまで思ってしまう。
(ネタがつまらんのが致命的にキモイ)
739半ばニート1号 ◆pnCm4bpG3Y :2005/11/11(金) 14:32:50
こんにちは。

>>731
こちらこそ(_ ´∀`)_
朝方、WIKIと前スレ読んでたんだけども
「猫でもわかる〜」っていうのは前スレで紹介されてたやつですな。
まだ見てないけれど、自分もこの本読破できたら行ってみようと思っとります。
同じ文系の人がいた事に親近感(*´Д`*)

>>736
なるほど、全部が全部でなく、抑えるべき要所を覚えれば良いのですな。
覚えるのはまだ先の話だけど、やる気出てきた(`・ω・´)
--------------------------

朝の9時から13時過ぎまでやって、LESSON4がようやく終了。
重ねて言ってるけどこの本(やさしいC)、ホント親切。
自分が疑問に思った事を見透かしたかのように次のページには
その解が書いてある。図解も分かり易く、よほど俺には合うみたい。

今回は式と演算子の章だったので、数学苦手な人間としては
突然難易度を上げられた感じ。まだどうにか食いついていってるが。

「キーボードで五科目のテストの点数を入力して、
合計値と平均値を求めるコードを記述しろ」
って問題には、息も絶え絶えクリアできたものの、

「整数を入力した際、正負を反転して出力するコードを記述しろ」
には頭抱えてましたw解答見た時は唖然「ははは!こやつめ!(AA略」

昼飯食べたら関係演算子やらif文やらのLESSON5に入ります。
740デフォルトの名無しさん:2005/11/11(金) 20:33:37
参考書で理解できない所があるので質問させて下さい

↓文字列sの複製を作る関数です
char *strdup(const char *s)
{
   char *p = (char *)malloc(strlen(s) + 1);
   return (strcpy(p, s))
}
↑の関数の内容は理解できますが、strdupの関数名に
なぜ*がつくのか理解できません。
なんで*strdupになるのですか?
741デフォルトの名無しさん:2005/11/11(金) 20:43:13
これが噂の関数ポインタって奴ですか?
まったく知らないけど。
742デフォルトの名無しさん:2005/11/11(金) 20:53:52
戻り値が文字列の先頭を指すポインタ
743デフォルトの名無しさん:2005/11/11(金) 21:00:49
>>742さん
>戻り値が文字列の先頭を指すポインタ

というのはstrdupがsを指すポインタという事ですか?
744デフォルトの名無しさん:2005/11/11(金) 21:03:50
>>743
char *func();の書き方がわかりにくいなら
char* func();だと考えてくれ
要はchar*型を戻り値にもってるってこと


つーか、いくら入門書とはいえ(むしろ入門書だからこそ)
malloc後のNULLチェックを飛ばすのはダメだろ
745デフォルトの名無しさん:2005/11/11(金) 21:12:09
>>744
ああぁあっ!!分かった気がします!
戻り値が文字列なので*strdupは先頭を指すポインタの
意味がたぶんわかりました!
NULLチェックの重要性について丁寧にやってみます!

答えてくださってありがとうございます
かなり興奮中です(゚∀゚)
746デフォルトの名無しさん:2005/11/11(金) 21:14:46
return strcpy(malloc(strlen(s) + 1), s);

むしろここまでやってくれたら尊敬する

ちなみにstr[a-z].*という名前の外部関数をプログラム側で定義するのはだめだって話を宿題スレでやってた。
747デフォルトの名無しさん:2005/11/11(金) 21:23:03
>>746
そこまで短縮できるまでの頭のキレがほしいです!
これまたレベル高い情報で尊敬の眼差しが・・・
本当にありがとうございます、やる気でてきました(`・ω・´)
748デフォルトの名無しさん:2005/11/11(金) 21:36:46
>>747
>>746は絶対にやっちゃダメだろ
strcpyは領域チェックをしない
NULLにコピー何てしたら何が起こるかシラネ
749デフォルトの名無しさん:2005/11/11(金) 21:39:02
ちなみにWindowsではヌルポインタにアクセスしようとすると例外が飛ぶ。
ただNullPointerExceptionでないのが惜しい。
750デフォルトの名無しさん:2005/11/11(金) 21:39:21
明日のための鉄則その1
mallocの戻り値は必ずチェックしろ
751デフォルトの名無しさん:2005/11/11(金) 21:44:07
>>749
そういやCじゃ例外機構ないよな
例外発生すると有無を言わさず強制終了?
752デフォルトの名無しさん:2005/11/11(金) 21:48:48
>>751
VCやBCCではCにもWin独自の例外機構(SEH)が備えられている。(__try〜__except/__finally)
C++ではC++の例外とSEHをまぜて使える。
753デフォルトの名無しさん:2005/11/11(金) 21:53:23
>NULLにコピー何てしたら何が起こるかシラネ
って事は領域確保したら安全性のため領域確保できたか
チェックもいれなければだめなんですね。参考になります。
754デフォルトの名無しさん:2005/11/11(金) 23:12:29
半ばニート頑張るなw
755デフォルトの名無しさん:2005/11/12(土) 00:00:51
C言語を学び始めて2日目です。
このスレに書いてある事がサッパリわからない。
今現在「ネコでもわかる〜」のC言語編第八章です。
ってか「ネコでもわかる〜」すげー難しいんですけど・・・
百章まであると思うとクラクラする。

11月22日にテストなのにヤヴァイ・・・
756デフォルトの名無しさん:2005/11/12(土) 00:07:50
>>755
8,9,10は後でやることを先にやってるだけだから飛ばそう。
猫でも〜は何が言いたいのか良く分からないけど。
757デフォルトの名無しさん:2005/11/12(土) 04:12:57
>>755
俺もそれ思ったw
ネットでならネコやる前に苦Cのが分かりやすかったよ
758デフォルトの名無しさん:2005/11/12(土) 10:01:08
>>756>>757
マジでぇえ?情報をどーもです。
他のもイロイロ見てみよう。わかんないとこがわからん・・・

今日はC言語勉強3日目です。
あと9日でCの基礎、制御文、データ型、変数、式の詳細を学ばなければならない。
今日と明日は会社が休みなのでひきもって勉強するつもり。
今から勉強します。
759デフォルトの名無しさん:2005/11/12(土) 10:02:25
>>755
猫でもは非初心者向け。面倒だと思わずに入門書を買うなり図書館から借りるなりした方が懸命。
つーか、前にも言ってただろ確か。
760半ばニート1号 ◆pnCm4bpG3Y :2005/11/12(土) 12:59:56
こんにちは。

>>754
わかる間は面白いです。全く理解できなくなった時がコワス(´・ω・`)

>>758
勉強始めた日が同じだw
(*´∀`)人(´∀`*)ナカーマ

本なら>>274氏同様、やさしいCを超オススメ。
これなら、覚えの良い人なら二日漬けで内容3分の2以上は消化できるかと。
覚え悪い俺でも今日で半分まで進めました。
日にちが差し迫ってるのが辛いトコだけど、がんがって!
----------------------------
昨日はLesson5を消化してから、マ版に行ってました。
半端な知識でプログラマーになるって事がどうゆう末路を辿るのかを理解完了orz

最初は「これで就職を・・・」と思っていたけれども、
今それを考える事は後回しにする。働く事も後回しにしたi(ry

昨日同様朝9時から今さっきまでで、ようやくLesson6終了。
繰り返し文についてだったんだけども、応用がやたらと利くのか、
練習問題はほとんどクリアできず(´-ω-`)

解を見ればしくみは理解できるんだけど、
問題見てそういうしくみを自分で閃けなかった。
こんなので大丈夫なんだろかなぁ・・・。

全Lesson、12に対し半分を終えれました。
ずっとこもってたので今日は外出。走る。泳ぐ。筋トレしてみる。
帰ったら配列のLesson7に挑戦。
761274 ◆Hv1CCCx/1M :2005/11/12(土) 16:56:51
>>760
乙。結構頑張ってるみたいで。

>半端な知識でプログラマーになるって事がどうゆう末路を辿るのかを理解完了orz
PGは理想と現実のギャップが激しいからな;俺は「それでもSEになりたいか」という本を読んで概要を知った口。>残業とバグと納期との戦い までは読んださ。

>練習問題はほとんどクリアできず(´-ω-`)
ちょっと待てwそれじゃ先進む意味無いだろw
時間かけてでも内容をしっかりと把握するべし。
仕組み、というか文の流れをイメージできる様にすれば割と簡単に覚えられると思う。丁度、やさCの解説絵みたいな漢字。
762ミスター文系:2005/11/12(土) 22:19:01
>>758
俺は猫Cの本の方を今読んでいるが、正直言ってWEBの内容も本の内容も、全くの初学者(特に文系の人)が手を付けるには少しわかり辛い気がする。
というか、初学者は素直に入門書を買った方が良いぞ。
WEBに挙がっているテキストは、編集者の目が入っていないのでわかり辛くなっているものも多い。

お勧め本としては、『Cの絵本』あたりかな。
ただ、これは練習問題が入っていないので、そこら辺を上手く補強する必要があるが。
『やさC』も>>274氏や半ばニート氏が言うように良い本なんだろうが、俺は買ったことがないので薦めることはしない。
(別に>>274氏や半ばニート氏を信用していないのではなくて、俺は本屋で立ち読みした程度なので、薦めると無責任になってしまうから。)

>>760
>>761(273氏)も言っているように、解けない問題は自力で解けるまでやり直した方が良いと思う。
急がば回れじゃないけど、焦って急ぐと後で大変になるから。
人の話の受け売りだが、良いプログラマの条件はアルゴリズムのネタを多くもっていることらしいし。


初心者が偉そうなこと書いてスマソ。orz
763デフォルトの名無しさん:2005/11/12(土) 22:22:32
>>762

printf("(273氏)は(274氏)の間違えです。\nスレ汚しスマソ。orz\n");
764半ばニート1号 ◆pnCm4bpG3Y :2005/11/13(日) 00:00:51
走って泳いで腕立てふせ辺りで疲れ果てて居眠りこいてました、
あきれ果てた顔のドラえもんAAが頭よぎった半ばニート24歳です。

>>761
>>762
ども(´∀`)ノ
ちょっと離れた間に心配かけてたみたいで恐縮(´・ω・`)

お二人の言う通り「これわからないので後回し」ってのは
昔からよくありました。これを機に脱したい。気ぃつけます(`・ω・´)ゝ

今のところ一度解答さえ見れば、
>>274氏の言う「流れ」がなんとか見え隠れしているのか、
二度目同じ問題をやるとできているようです。
明日もっぺんやってちゃんと理解できてるか確認してみます。

ただ、初挑戦の段階でその流れを閃く事ができなかったってのがどうにも。
基礎の構文覚えても応用をまるで利かせれない自分の頭にアワレワロス。
慣れなのかな。ネタ、一つでも多く持ちたいです。がむばる。

今日は結局Lesson6のみでした。明日この章の練習問題を経てLesson7行きます。
765デフォルトの名無しさん:2005/11/13(日) 00:03:45
>>764
読んでる本は猫だっけ?
あの本はscanfかなんかの危険性を指摘せずに使ってるというのを見たから
全く読んだこと無いけど、とりあえずリストとかの基本的なデータ構造を
一回自分で作ってみるといい
一度書けば、どんな物なのかというのが理解できるし、それが必要となったときに
楽に実装できるようになる
766デフォルトの名無しさん:2005/11/13(日) 00:05:44
Webの猫では意味深にそのようなことを示唆する文章が初めに書かれていなくもない。
http://www.kumei.ne.jp/c_lang/intro/no_06.htm
767デフォルトの名無しさん:2005/11/13(日) 00:50:34
>>751
setjmp/longjmpで似たようなもの実装できるし現にRubyがそうやってる。
あとこのへんの実装はOS依存だがシグナルとか。
768274 ◆Hv1CCCx/1M :2005/11/13(日) 02:58:43
今レポートやっつけ中。VBなんて窓から放り投げてCがやりたい…

>>762
解答なんて全章終わった後に読むぐらいのつもりでないと。っつか、俺が現にその状態なんだが。
正常に動けば形がどうであれ正解なんだし、分かるまでやってみたらどう?必要なら応用問題も出すよ。
769半ばニート1号 ◆pnCm4bpG3Y :2005/11/13(日) 04:30:23
変な時間に睡眠とったんで、寝れそうで寝れないorz

>>765
読んでるのは、やさしいCっす。
なるほど、練習問題なら複数回やったことはあれど、自分で作った事はマダーです。

そうですな、明日(というよりもう今日)早速その方法を参考にさせて頂きつつ、
ちょっとノートかPCにまとめてみます。アドバイスどもです(`・ω・´)ゝ

>>768
アンカー違うけど、俺宛ぽいので。

うーん、確かに。
・・・ニート属性として「諦め早い」のスキル持ってるのですが、
俺はここから一歩でも前へ進みたい。この際です。捨ててみます。

応用問題とはありがたい!俺は今の段階では答えられそもありませんが、
問題を出すなら今でもいいぽいと思われます。

ここ数日、俺ばかり奇襲して暴れ放題チラシ放題ですが、
このスレには自分以外にも問題を待ってる人、沢山いると思うんで。
元々ここはそういうスレだと、昨日WIKIで見かけました。

俺はスレのログは残してるので、
然るべき日(基礎ができたかなと自分で納得できた辺り)になれば
後でこっそりやりますよー。
770デフォルトの名無しさん:2005/11/13(日) 11:16:48
おはようございます。>>755 >>758です。
今日はC言語勉強4日目。今日は制御文forループってのからやってみるつもり。

>>759
本は「独習C」ってゆー黄色い本を持ってます。
ってかテストがこの本の第1〜第4まで出ます。
チンプンカンプンなのでC初心者HPを参考に並行して勉強してる次第であります。

>>760
おお、勉強をはじめた日が同じなんて奇遇ですね。共に頑張りましょう。
私のほうが先に脱落するかもだけど。
初心者本は明日仕事中(営業マンなので自由がきく)に見てこようと思います。

今から勉強します。また夜きます。では。
771デフォルトの名無しさん:2005/11/13(日) 12:18:55
お前らたまにはageないと埋もれますよ
772デフォルトの名無しさん:2005/11/13(日) 13:17:35
じゃあage
773ミスター文系 int hoshu:2005/11/13(日) 14:41:23
>>764

>「流れ」がなんとか見え隠れしているのか〜

手間と時間と金が惜しくなければ、例題や解答のソースを自分で打って何枚か印刷し、それぞれ、赤ペンで使って線を引きながら、処理ごとにプログラムの動きを追ってみると良いかも。
例えば、

int main(){

int a;
printf("aさんの出席番号を入力して下さい。>>");
scanf("%d",&a);
printf("aさんの出席番号は%dです。\n",&a);

returne 0;
/*適当に書いたので、細かいツッコミはしないでね。*/
}

というプログラムだったら、main関数に入る所から線を引き始めて、int a;の所に来たら「int型の変数aをつくる」、最初のprintfの所に来たら、「番号の入力を求めるのか〜」、
scanfの所に来たら「さっきのaにキーボードから入力するのか…とりあえず、1を入れとこ。すると、今のaは1だな。」、
printfの所に来たら「%dに入るのは…&aだからaの値で…1か」みたいな。
俺は普段頭の中でやって、良く分からない時だけ紙に書いてるけど、これをやるとコメント(/*〜*/)を書くのが少し上手くなる(気がする)。
何故線を引くのかは、条件分岐やループなんかを入れたソースでやってみると、良くわかると思う。

ついでに、暇だったらそれをフローチャートに起こしてみる。
そうすると、自分が1からフローチャートを起こす時にも多少は役立つのではないかと。
初心者対して、よく「フローチャートを書いてから作れ」という人が居るけど、俺の場合はそれはしなかった。(というか、できなかった)
俺自身、フロチャを起こすようになったのはつい最近、CやVBで複雑なプログラムを組み始めてからだった。
アルゴリズムのネタが少ない内は、かえって混乱するから、"自分でソースを書く時に限っては"フロチャを書かないほうが良いかもしれないね。

以上、あくまでもいい加減な主観だから、参考にもならんが。
774デフォルトの名無しさん:2005/11/13(日) 14:56:36
>>770
どこまで進んだかだけでなく、どの程度理解しているかも書くとスレの住民も反応しやすいかと。
レベルは「本の練習問題を数回やって解けるレベル」とか、「まとめwikiの○番目の問題が解けた」とか。
775デフォルトの名無しさん:2005/11/13(日) 15:01:02
>>770
ついでに、独習Cの練習問題とかの質問だったら、以下のスレも覗いて見るとよろしいかと。

【独習C】本を読んで質問【独習C】
http://pc8.2ch.net/test/read.cgi/tech/1112760409/
776半ばニート1号 ◆pnCm4bpG3Y :2005/11/13(日) 15:26:01
こんにちは。

>>770
俺も朝方ようやくforループに一区切りつけたトコです。
whileやらdo whileやら複数種類あってややこしかったーヽ(`Д´)ノ

>>773
おお、アドバイスどもです。俺とよく似た方法ですね。
自分はまだ脳内のみでやり始めると
文字達が勝手に頭の中でBダッシュジャンプしてどっか行くので
わかるのもわからないのもノートに手書きで書き写して、
上から順に「ここがどうでそこがああで」と音読しながら線引いてます。

フローチャートの意味を知らなかったのでググりました。
なるほど図形に起こすのか。新鮮です。
確かにこれは慣れてからの方が良さそうですが、良い事聞きました(*´∀`)
----------------------
繰り返し文もちょっとずつ見えて来ました。
んで、今Lesson7にいます。早くも壁来ましたorz もう同じ問題に早や2時間。
ついに低学歴がアダになる時が来たか、と。ウワアアアアン。
「Lesson7の7.5です」と言うと内輪な話になるので
本書から抜粋しました。

C言語質問スレ【激初心者】に行くべきか迷いましたが、
せっかく>>274が協力して下さるとの好意に甘えたいので今回のみここで。
以後、この手の質問は上記スレ行こうと思ってます。
777半ばニート1号 ◆pnCm4bpG3Y :2005/11/13(日) 15:34:43
#include<stdio.h>
#define NUM 5

int main(void)
{int test[NUM];
int tmp;
int i,j,s,t;
printf("%d人の点数を入力して下さい。\n",NUM);
for(i=0; i<NUM; i++){
scanf("%d", &test[i]);
}
for(s=0; s<NUM-1; s++){ /*この行と*/
for(t=s+1; t<NUM; t++){/*この行が問題*/
if(test[t] > test[s]){
tmp = test[t];
test[t] = test[s];
test[s] = tmp;
}
}
}
for(j=0; j<NUM; j++){
printf("%d番目の人の人数は%dです。\n", j+1, test[j]);
}
return 0;
}

上記コメント二行の部分、
繰り返しの流れが理解できず悶絶してます。
本書にも「ちょっとややこしいですが」と図解付きの説明がありますが、
それでもこの脳では許容できずorz
778半ばニート1号 ◆pnCm4bpG3Y :2005/11/13(日) 15:37:24
× >>274
○ >>274氏が
779デフォルトの名無しさん:2005/11/13(日) 15:42:27
バブルソート
780デフォルトの名無しさん:2005/11/13(日) 16:01:07
仮に上のループを条件1として下のループを条件2と考えて
まず
for(s=0; s<NUM-1; s++) 条件1 は5回のループを意味する
このループの間for(t=s+1; t<NUM; t++) 条件2 を繰り返す。
if(test[t] > test[s]) は初めの値(配列0番目)と次の値
(t=s+1によって)を比較して交換する意味
0番目と1番目、0と2・・・0と4(配列にして5番目の値)の比較が
終わったら条件1の判定に戻りsの値を1増やして、繰り返す
と言う事。の説明でオッケ−だと思われ? 初心者の説明でスマン
781デフォルトの名無しさん:2005/11/13(日) 16:02:52
はう!!交換のとことか間違えた('A`)
でもいっかwwwwwwww
782半ばニート1号 ◆pnCm4bpG3Y :2005/11/13(日) 16:51:25
>>779
調べて意味を見てたら開眼できました(゚∀゚)!
ありがとうございますm()m

>>781
ちょwwwwwww
でもわざわざ助力頂き助かりましたm()m
------------------
>>779氏の一言のおかげの開眼と、>>780氏の説明部分のおかげで
自分の質問がずれている事に気がつけました。
コメント入れた部分自体は前Lessonで把握済みでした。

全体の流れがしっかり把握できてなく曖昧であったのに、
無理にどこがわからないのか具体的な目星をつけた事が、
ずれを引き起こした原因だったようです。
バブルソート、覚えました。

>>274氏、申し訳ない。まだ頑張れそうです。
783274 ◆Hv1CCCx/1M :2005/11/13(日) 20:11:02
>>773
細かい揚げ足取ると
・returne
・printfに&a使うとアドレスが出力される、aだけで十分

>>778
氏付けなくていいって。大した事やって無い&&年下だし…と言いたいが、俺も小手で呼ぶ時は「半ニ氏」みたいになりそうだな…
777の問題は俺も時間かかったな。ソースと解説だけでしつこくやってたらいつの間にか完璧にソース覚えちまった。
簡素な処理ばかりだった初期の頃で「プログラムすげぇw」と思えた初めてのソースだったな。

さて、そろそろ練習問題逝っとく?
784274 ◆Hv1CCCx/1M :2005/11/13(日) 20:12:08
やべ、細かいツッコミはタブーだったかorz
785デフォルトの名無しさん:2005/11/13(日) 20:17:07
(  ̄∀ ̄) <問題!問題!
786ミスター文系:2005/11/13(日) 20:55:22
>>783
おお、ご指摘どうもです。
&aはscanfを書いた後に書いたので、うっかりしてました。

returnのスペルミスは、普段int main()ではなくvoid main()で書いているので、これまた単純ミスです。

わざわざ、すいませんです。orz
787デフォルトの名無しさん:2005/11/13(日) 20:58:13
問題…多次元配列で>>777の類似問題とか?
788ddd:2005/11/13(日) 21:05:28
>>787
問題
キキキキタタタタ━━━(((((゚(゚(゚(((゚゚∀∀゚゚)))゚)゚)゚)))))━━━!!!!!!
んっ?多次元?点数を配列に格納するんですか?
789デフォルトの名無しさん:2005/11/13(日) 21:06:24
すいません
キー連打してたらdddとか打っちゃった
790ミスター文系:2005/11/13(日) 21:24:05
>>788

>>787は俺ね。(コテハン記憶し忘れた)

>>274氏が出す前に初心者の俺が出すのは問題かも知れんが…。
よかったら解いて見てください。
但し、多次元配列とfor文が使えることが前提です。(何度も言うように、俺は『やさC』を持っていないので、Lessonいくつと書かれても、具体的にどこまで出来るのかわからんので。)

問題1

多次元配列を利用して、学生10人分の出席番号・国語の点数・社会の点数・英語の点数を入力し、標準出力でアウトプットするプログラムを作りなさい。

出力例

学生1の国語の点数は100点、社会の点数は100点、英語の点数は100点です。
学生2の国語の点数は90点、社会の点数は75点、英語の点数は100点です。
(以下略)
791ミスター文系:2005/11/13(日) 21:28:35
あ、ちなみに、出力例の「学生」に続いている数字(1とか2とか)が出席番号ね。
ちょっと長いので、項目ごとに改行して出力しても良いです。



学生1
国語100
社会100
英語100

学生2
国語100
社会100
英語65
(以下略)

while文が使えるのであれば、ちょっとした追加問題も用意してるんで言って下さい。
792デフォルトの名無しさん:2005/11/13(日) 21:38:30
問題出現アゲ∩(・ω・)∩
793ミスター文系:2005/11/13(日) 21:42:54
さっきから連レススマソ。orz

もうひとつ補足。
出席番号と点数の入力は標準入力(キーボード)を使って下さい。

入力例はこんな感じで。



出席番号を入力>> 1
国語の点数を入力>> 100
社会の点数を入力>> 100
英語の点数を入力>> 100


スレ汚しスマソ。
794営業マソ@神奈川:2005/11/13(日) 22:01:45
こんばんは。>>755>>758>>770です。
今日は明日の仕事の設計書とかプレゼンの練習であんまり勉強できなかったなぁ。
forループ、演算子、printf()とエスケープ文字をやりました。
wikiの「1から50までの和」が解けました。

>>776
同じ日にはじめたのにもう随分差をつけられちゃったっぽいなー(笑い
因みに24歳なんですね。歳近いですな。私は25歳です。

>>790
うげっ!わからん・・・多次元配列?もっと勉強して解かせて頂きます。
795デフォルトの名無しさん:2005/11/13(日) 22:03:28
問題だああsはうあふああh
やってみるお(´・ω・`)
796274 ◆Hv1CCCx/1M :2005/11/13(日) 22:15:53
>>790
>274氏が出す前に初心者の俺が出すのは問題かも知れんが…。
全然お構いなく。俺もまだ文字列ポインタ・ポインタ配列辺りで苦戦中だから、皆と同じぐらいのレベルだし。
今だ片付かないレポートをよそに俺もやってみるわ>問題
797ミスター文系:2005/11/13(日) 22:53:41
>>794
普通の配列は分かりますか。
それだったらば、ちょっとした問題を出せますが。

>>795
>>796
>やってみるお(´・ω・`)
>今だ片付かないレポートをよそに俺もやってみるわ>問題

そういって頂けると、何だか凄く嬉しいです。
798デフォルトの名無しさん:2005/11/13(日) 23:39:01
まったりいい流れ。

俺も4月からc習い始めてる理系学生です。
蝶初心者向けの本を構造体の前まで(友達にぱくられた)読み終えて、今は猫読んでます。

けど今まで理解した気になってるだけで、実は理解してないんじゃないかと不安になってるんです。
というのも猫をパラ見しながら感じたんですが問題を解いた数が少ないんです。
学校の課題はやるんですけどその時やったことだけだったり、応用的な問題や違う切り口の問題を解くことが少ない。
猫を見てみたら問題が少ない。やっぱ数こなすことも大事だと思うんで・・・
そんな時ここのwiki見つけて喜んでました。問題いっぱい!

最近時間なくて問題は解けないけど通学時間に本読んで勉強する気ではいます。
やっぱ実際打ってみないと力つかないし覚えられないからなぁ・・・

とチラシの裏みたいになったけど用は問題出してくれるこのスレに感謝!ってこと
最近出題が少なくてしょんぼりだけど。
出題者がんばれ!初心者もっとがんばれ!

790の問題時間見つけてやってみます。
799営業マソ@神奈川:2005/11/13(日) 23:39:04
一応>>790の問題をやってみたんだけど、
入力は出来るんだけど何故か「1」が出る。も〜何でw
こんなカンジで↓ 「1」後は普通に入力出来るんだけどなぁ。。。

出席番号を入力>> 1
国語の点数を入力>> 1
社会の点数を入力>> 1
英語の点数を入力>> 1

はぁ、明日仕事なんでもう寝なきゃ。
800ミスター文系:2005/11/13(日) 23:58:56
>>799
ソースコード上げてもらえますか。
これから数日、この板に来れないかもしれないのですが、間に合えば問題点を指摘しますんで。
801ミスター文系:2005/11/14(月) 00:05:50
少し時間が経ったのと問題が補足等で複数レスに渡ってしまったので、整理とヒント、追加問題出しも含めて再書き込み。

>>790の問題
問題1

多次元配列を利用して、学生10人分の出席番号・国語の点数・社会の点数・英語の点数を標準入力(キーボード)から入力し、標準出力(画面)に出力するプログラムを作りなさい。

入力部分の例

出席番号を入力>> 1
国語の点数を入力>> 100
社会の点数を入力>> 100
英語の点数を入力>> 65

出力部分の例

出席番号1の国語の点数は100点、社会の点数は100点、英語の点数は100点です。
出席番号77の国語の点数は90点、社会の点数は75点、英語の点数は100点です。
(以下略)

または

出席番号1
国語100
社会100
英語100

出席番号88
国語100
社会100
英語65
(以下略)
802ミスター文系:2005/11/14(月) 00:16:06
以下は問題1のヒントです。
良く分からない方は、上から順を追って読んでみて下さい。
但し、解き方が何パターンかあると思うので、あくまでも私と同じ解答を導き出すことを前提としたヒントです。(要するに、私と違った解き方をするならば役に立たないよ、ということ)


ヒント1>

配列の次元数は二次元です。

ヒント2>

for文を使うと楽。

ヒント3>

for文は二重になります。

ヒント4>

二重のfor文?…二次元配列…? 同じ2だなぁ。

ヒント5>

二次元配列を宣言する時、配列の後ろの[ ]に入る数字は4。
つまり、4つのデータを格納するということ。

ヒント6>

二次元配列の数がよくわからなかったらば、とりあえず1人分の出席番号と国社英の点数を入力するプログラムを考えてみよう。


今回のヒントはここまで。
803ミスター文系:2005/11/14(月) 00:32:15
ここまで解けた方は、以下の追加問題もどうぞ。

問題2

問題1で作ったプログラムに、ありえないデータが入力された場合のエラー処理を付け加えなさい。
なお、具体的な処理内容は以下の通り。

1.出席番号を入力する際、0以下の値を入力されたらば、「1以上の値を入力して下さい」と画面に出力し、キーボードからデータの再入力を求める。

2.各教科の点数を入力する際、0未満の値と100よりも大きい値が入力されたらば、「0から100までの値を入力して下さい」と画面に出力し、キーボードからデータの再入力を求める。

補足1.上記二つの処理は、文字列が入力されることは想定しなくて良いです。
補足2.エラーの内容(「1以上の値を〜」等)を出力した後は、このプログラムの利用者が正しい値を入力してくれるものと考えて良いです。


問題3

問題2で作ったエラー処理を改良し、エラー内容を出力した後に入力される値が正しい値になるまで同様の処理を続けるようにしなさい。

例(出席番号の場合)
1.出力:「出席番号を入力>>」
2.キーボードから0を入力し、Enterキーを押す
3.出力:「1以上の値を入力して下さい」
4.キーボードから0を入力し、Enterキーを押す
5.出力:「1以上の値を入力して下さい」
(以下、正しい値(この場合は1以上の値)が入力されるまで、同じ処理を繰り返す。)

ヒント>while文を使うと楽かも
804ミスター文系:2005/11/14(月) 00:38:33
まったり系のスレとはいえ、何度も連レスしてしまい、すいませんでした。orz
さっきも書いたように、明日から数日間このスレに来れないかもしれませんが、数日以内に解答のソースは必ず書き込みますのでご勘弁を。
(「俺が書いたる」という方がいらっしゃったらば、書いちゃって頂いても構いません。)

それでは、今晩は寝ます。
805274 ◆Hv1CCCx/1M :2005/11/14(月) 01:16:05
全部集約した解答。無駄に関数加えてソート機能も付けてみた。
ttp://f4.aaa.livedoor.jp/~takibi/phpup/img/021.phps

レ ポ ー ト 終 わ っ た な 。
806デフォルトの名無しさん:2005/11/14(月) 04:37:42
「ミスター」を名乗るからにはもう少し知識を身につけて欲しいなぁ。
或いは自分の書いた文章の間違いに気を配るとか。
#理系だからそれらが許されると言うことでもないが。
807デフォルトの名無しさん:2005/11/14(月) 04:51:46
>>805
ちょっと見ただけだけど。

・main()関数の型が間違っている。
#どこからcharが……
・voidでない関数はreturnで値を返さないといけない。
・別々の配列(少なくとも一つの配列と一つの二重配列)にすべきものを無理矢理二重配列としてしまうのは如何なものか。
#あ〜、ヒントが悪いのか。
・整数定数は、使い回しが利くようにマクロにするほうがいい。
・無限ループはコンパイラによっては無駄な警告が出るwhile (1)よりfor (;;)がお勧め。
#そのためにわざわざ1を書かなくてもいいように仕様が決められているのだから。
・馴れないうちは(俗に言う)一行野郎で書こうとせずに複文化したほうがいい。
#if (...) ...; などね。
・scanf()で数値を入力するのは間違って英字を入力したときに悲惨なので避けた方がいい。
#慣れないと判りにくいから今後の課題と言うことでいいと思うが。
・(固定)文字列の配列は、const char * sub[] = {"...", "...", "...",};とするのが常道。
#人間がわざわざ数を数えることはない。
808274:2005/11/14(月) 09:12:22
>>807
・main()関数の型が間違っている。
これはcharの関数作ろうと思って消し忘れた奴
・別々の配列(少なくとも一つの配列と一つの二重配列)に〜
多次元配列で作れと指定されてる
・馴れないうちは(俗に言う)一行野郎で〜
馴れてるから書いてるだけ。レスで貼付ける時にはスマートかと。
・scanf()で数値を入力するのは間違って〜
つ[スレタイ && 最新100]
809デフォルトの名無しさん:2005/11/14(月) 09:38:22
>>807>>808
惚れたお(´・ω・`)
810807:2005/11/14(月) 11:26:22
>>808
言い訳せんでいいよ。ヒントを書いているだけで教える気があるわけじゃないから。
疑問があるなら質問してくれ。暇があったらスレチェックしているから。
811807:2005/11/14(月) 11:29:43
>>809
漏れに惚れちゃぁいけねぇぜ。

追記。
「多次元配列で作れ」≠「単一の多次元配列に放り込めるものは全て放り込んで作れ」
言い訳を捻出する暇があったら行間を読む努力をする方がいい。
812デフォルトの名無しさん:2005/11/14(月) 12:14:37
>>811
永遠のファンになったお(´・ω・`)
813デフォルトの名無しさん:2005/11/14(月) 12:53:59
Cの勉強中で基本はもう終わったので、プログラムを作ってみたりしてるんですが、
データベースファイルのようなものにCの標準機能だけでプログラムで登録、削除、参照などを
したい場合って、CSV形式のファイルを利用するのが一般的なのでしょうか?
814デフォルトの名無しさん:2005/11/14(月) 12:56:31
データベースにアクセスしたいなら専用ライブラリが無料配布されてるぞ
815813:2005/11/14(月) 13:29:31
データベースにアクセスしたいというよりも、ファイル操作等の練習のためにやってみたいだけなんです。
でも練習なんだし、普通はどうするとか考えるよりもとりあえずやってみればいいですよね。
どうもありがとうございました。
816デフォルトの名無しさん:2005/11/14(月) 13:35:09
>>815
それならCSVでもいいんでない?
できたファイルをExcelで読み込んでもいいし、エディタで開いてもいいし。
#尤も、ただのTSV(項目をカンマではなくタブコードで区切る)でもいいかも知れない。
817274 ◆Hv1CCCx/1M :2005/11/14(月) 17:40:52
>>810
こちとら眠気押さえて打ってたんだ、手直し後にコンパイルしてなければミスに気付かない事もある。
配列分けろだのconst付けろだの、俺はあんたの物差しに沿って打ってる訳でも無いし、あんたがC覚える為に読んできた書籍も知らない。それを皆が皆最善だと思うとは考えにくいが。
自意識過剰を自覚してるのならHCS(ヒューマンコミュニケーションスキル)を学ぶ事から始めたらどうだ?あんたの文面は叩き荒らしの特性によく似ている。
818デフォルトの名無しさん:2005/11/14(月) 17:51:56
不穏な空気になってまいりました。
819デフォルトの名無しさん:2005/11/14(月) 17:58:06
どう見ても精子です。
本当にありがとうございました
820デフォルトの名無しさん:2005/11/14(月) 18:01:45
僕の息子は常時スタンバってます('A`)
821デフォルトの名無しさん:2005/11/14(月) 18:16:30
>>817
同じ学び中の者から少し。
こういう初心者スレでわざわざソースを見てくれて悪いところを指摘してくれる人なんて悪い人じゃないと思うよ。
間違った変な知識で指摘する人もいるかもしれないけど、そういう場合って大概別の知識のある人からの
突っ込みが入ったりする。
匿名のネットで指摘されたって恥をかくわけじゃないんだから、こういうのは謙虚に受け取っとけばいいと思う。
現時点からしたら細かい指摘なのかもしれないけれど、constの件などはおそらく最善の部類に入ることだろうし、
プログラミング時眠かったとか手直し後に再度コンパイルしてないってのは初心者だからとか関係ない。
結果間違ってたところ、改善可能な点を知れたなんて良いことじゃないか。
俺にも参考になったし、今後他の人の参考にもなるかもしれない。
一応固定みたいにしてるなら些細なことでツンケンせずに楽しくいこうぜ!
822デフォルトの名無しさん:2005/11/14(月) 18:28:10
>>821
もう抱いて下さい…(´・ω・`)
823807=810=816≠821:2005/11/14(月) 18:44:45
>>817
>こちとら眠気押さえて打ってたんだ、
私の知ったことではない。嫌ならやらなければいいだろう。
寧ろ、眠気を抑えながらの学習は効果が薄いと思うが如何だろうか。
>手直し後にコンパイルしてなければミスに気付かない事もある。
コンパイラが発見できないようなケアレスミスで苦しむこともなかろうと極力ミスが発生しないやり方を書いている。
>配列分けろだのconst付けろだの、
命令してはいない。参考にするもしないも私の知ったことではない。
>俺はあんたの物差しに沿って打ってる訳でも無いし、あんたがC覚える為に読んできた書籍も知らない。
当たり前だ。私は何冊も読んだわけではないからそれを明かしたところで参考にさえならないだろう。
>それを皆が皆最善だと思うとは考えにくいが。
一部反論もあるだろうが、概ね受け入れられるように書いている積もりだ。
また、>821も書いている通り、問題があるなら他から指摘されるだろう。
>自意識過剰を自覚してるのならHCS(ヒューマンコミュニケーションスキル)を学ぶ事から始めたらどうだ?
その言葉、そのままお返ししよう。
>あんたの文面は叩き荒らしの特性によく似ている。
これもそのままお返ししておこうか。

>疑問があるなら質問してくれ。
あー、一つだけ命令口調になっていたか。これは「疑問があるなら質問してくれても構わない」と言い換えておこう。
たまたま虫の居所が悪いところに紋切り型の口調が気に入らなかったのかもしれないが、
自分が誰のために学習しているのかよく考えてみてみたらどうだろうか。

>>822
気が多いなw
824デフォルトの名無しさん:2005/11/14(月) 18:59:07
もう不倫はしません(´・ω・`)
825デフォルトの名無しさん:2005/11/14(月) 19:11:27
まあ、二人とも落ち着けや
せっかく俺スゲーって作ったらダメだし食らって切れちゃっただけなんだし
826デフォルトの名無しさん:2005/11/14(月) 19:17:04
日本語にコンパイルしてください
でないと、あなたが何者か分か・・・(ry
827デフォルトの名無しさん:2005/11/14(月) 20:00:03
807は命令口調のようだったのがまずかったな。
#しかし2chではあれくらいでも普通だと思うけどな。

とにかく言っていることは正しい。俺も保障する。(保障になっていないってw
828デフォルトの名無しさん:2005/11/14(月) 20:34:05
>>807
一応C99からはintで宣言したmain関数は明示的にreturnしなかった場合0を返すことが保証されている。

まあ個人的には
・C99で追加された機能はできるだけ使わない
・C99で削除された機能は絶対使わない
という態度で書くのが良いとは思うが
829807:2005/11/14(月) 20:42:14
>>828
>一応C99からはintで宣言したmain関数は明示的にreturnしなかった場合0を返すことが保証されている。
ついついそれを忘れちゃうんだよね。フォロー感謝。

>・C99で追加された機能はできるだけ使わない
>・C99で削除された機能は絶対使わない
同意。特に初心者はその方がいいね。
#と言いつつ自分はC99で追加された機能(ブロックの途中での変数宣言や関数のinline指定)を使うけど。
830デフォルトの名無しさん:2005/11/14(月) 20:43:18
むつかしくて何言ってんのかわかんねえや
831デフォルトの名無しさん:2005/11/14(月) 21:00:12
ttp://hs.or.tp/php/uploader/up/code087.c
添削おながいすます。
832デフォルトの名無しさん:2005/11/14(月) 21:13:51
問題:
int配列の重複がないことをチェックする関数
つまり
配列の先頭要素へのポインタと配列の長さを受け取り、
配列中の他の要素と同じ値を持つ要素があれば0を、なければ0以外の値を返す関数を作りなさい

例:
{1,2,3,4,5,6,7,8} => 0以外を返す
{1,2,3,4,5,2,7,8} => 0を返す

もしこの問題が解けて退屈だったら

選択文(if,switch)や条件演算子(?:),繰返し文(for,while,do-while)を使わないで作るってのはどう?
833デフォルトの名無しさん:2005/11/14(月) 21:14:20
俺の場合、C++にあればC99にあろうとなかろうと気にせず使う。
834デフォルトの名無しさん:2005/11/14(月) 21:14:55
>>832
goto禁止を加えないと駄目だろ。
835832:2005/11/14(月) 21:18:42
>>834
あ、、、。orz
後ろの問題はgotoも禁止ね。thx
836832:2005/11/14(月) 21:22:46
連投スマソ
いや、むしろgoto使って書けるもんなら書いてほしいと思ったり
837813:2005/11/14(月) 22:11:47
>>816
区切り文字をタブにした形式もあるんですね。
数字を1,000のように書いたりする場合にはそっちのが良さそう。
ありがとうございます。
838274 ◆Hv1CCCx/1M :2005/11/14(月) 23:12:06
>>823
言い訳を捻出する暇があったら行間を読む努力をする方がいい。
つか、互いに言い訳、互いに屑。そういう事にしとこうか。
839デフォルトの名無しさん:2005/11/14(月) 23:19:30
>>831
ざっと見た範囲で。
・バックスラッシュが2バイト文字になっているけど大丈夫?
・問題の性格上仕方ないけど、memcpy()かぁ……
・点数の入力に関して、条件判断とメッセージの内容が噛みあっていない。
#片や1以上、片や0以上。
・printStudentInfo()はprintf()一文で書いてもいいかも。
#その場合、文字列リテラルが連結できることを利用するといい。
・enumの最後の値の後に','を置くのは間違い。
#コンパイラによっては通るかもしれないが。
・feof()を呼ぶまでもなくfgets()の戻り値を見るだけで充分。
#feof()を禁止するわけではない。
・intValueと言う名前のint変数でlongの値チェックをするのは如何なものかと。

>>838
まだ続けるの? そういうのを恥の上塗りと言うのだよ。
840274 ◆Hv1CCCx/1M :2005/11/14(月) 23:25:50
>>839
もう締めようとしてんだろ屑。
インテリ気取る前に鏡の前に逝けよ
841デフォルトの名無しさん:2005/11/14(月) 23:36:29
>>840
師匠になにを言う(`・ω・´)
ってかそろそろやめなって・・・www
真面目な指摘してくれて、聞く立場からすれば
とても参考になるし、勉強になる。
842デフォルトの名無しさん:2005/11/14(月) 23:44:40
なんだ、スレを通してみたら妙に納得してしまった。

>>274
君、面白いよ。その純粋な子供らしさを失わないようにね。

>>839
>・intValueと言う名前のint変数でlongの値チェックをするのは如何なものかと。
これはどうしろと?
843274:2005/11/14(月) 23:50:39
>>841
勝手な言い掛かりで煽られれば
頭にも来るし、反論したくもなる。

俺は>>808でありのままに答えた(多次元は違っていたとしても)
だがあんたは煽るかの様に言い訳と決めつけた。これが問題。
「初心者には容赦しない知ってる君」みたいな態度に頭が来ただけ。
844デフォルトの名無しさん:2005/11/14(月) 23:55:57
初心者そっちのけで喚き散らしてる時点で言い訳不能だと思うが
845デフォルトの名無しさん:2005/11/15(火) 00:34:25
うぜーよ
846デフォルトの名無しさん:2005/11/15(火) 00:37:22





     盛 り 上 が っ て ま い り ま し た



847デフォルトの名無しさん:2005/11/15(火) 00:38:27
|ω・`)
848デフォルトの名無しさん:2005/11/15(火) 00:51:54
>>847
なんで隠れてるのお前www


ω・` >⊂ おら、出て来いw
849デフォルトの名無しさん:2005/11/15(火) 00:55:42
そういえば>>1はもういないのかな。
850デフォルトの名無しさん:2005/11/15(火) 01:43:44
>>832
やってみました。むずかしーよー。頭テンパった。

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

int CheckSameValue(int *array, int len);

int main(void)
{
int n[] = {1,2,3,4,5,6,1,8};
int len;
int checked;

len = sizeof(n);
len = len / sizeof(int);

checked = CheckSameValue(n, len);
if (checked) {
printf("同じ値無し");
}else{
printf("同じ値あり");
}
return 0;
}
851デフォルトの名無しさん:2005/11/15(火) 01:44:28
int CheckSameValue(int *array, int len)
{
int ret;
int i, j;
for (i = 0; i < len; i++) {
for (j = i + 1; j < len; j++) {
if (i != j) {
if (*(array + i) == *(array + j)) {
return 0;
}else{
ret = 1;
}
}
}
}
return ret;
}
852デフォルトの名無しさん:2005/11/15(火) 02:23:29
>832
思いついたのはソートして隣と不一致な事を確認する、で

>選択文(if,switch)や条件演算子(?:),繰返し文(for,while,do-while)を使わないで作るってのは
思いつかんかった...
853デフォルトの名無しさん:2005/11/15(火) 07:54:24
>>852
ヒント:再帰
854デフォルトの名無しさん:2005/11/15(火) 08:10:29
>>832
再帰書いてたら頭痛くなってきた。
俺には再帰無理かも。
int not_find_int(int array[],int n,int c){
    return n==0 || (array[0]!=c && not_find_int(array+1,n-1,c));
}
int not_find_ints(int array[],int n){
    return n==0 ||(
        not_find_int(array+1,n-1,array[0]) &&
        not_find_ints(array+1,n-1)
    );
}
#include<stdio.h>
int main(){
    int a[]={1,2,3,4,5,6,7,8};/* => 0以外を返す */
    int b[]={1,2,3,4,5,2,7,8};/* => 0を返す */
    printf("%d\n%d",not_find_ints(a,8),not_find_ints(b,8));
}
855デフォルトの名無しさん:2005/11/15(火) 08:29:37
>>832
#include <stdio.h>
#include <stdlib.h>

int greater(const int *l, const int *r)
{
    return (*l-*r);
}

int overlap(int *array, int len)
{
    int i;
    qsort(array, 8, sizeof(int), greater);
    for (i=1 ; i<len ; i++)
    {
        if (array[i-1]==array[i])
        {
            return 0;
        }
    }
    return 1;
}

int main()
{
    int ex1[]={1,2,3,4,5,6,7,8};// => 0以外を返す
    int ex2[]={1,2,3,4,5,2,7,8};// => 0を返す
    printf("%d\n", overlap(ex1, sizeof(ex1)/sizeof(int)));
    printf("%d\n", overlap(ex2, sizeof(ex2)/sizeof(int)));
    return 0;
}
856デフォルトの名無しさん:2005/11/15(火) 12:07:38
>>855
例によってぱっと見で。

・ソート用比較関数の引き数は、qsort()の第4引き数にあわせたほうがいい。
#const int *だと警告が出ると思う。
・int同士の引き算だと、差がINT_MAXを超えてしまうので都合が悪い。
#より大きな型を使うか、一般的には条件文でいいだろう。
##値域が限定されていることが保証されているなら構わないが。
・qsort()の第二引き数の固定値は拙かろう。
#つーか、len使ってないじゃん。
・配列の要素数を求めるのは、sizeof(配列) / sizeof(*配列)の方が一般的。
#sizeof(int)もこの場合は間違いではないが、ex1の型を変更したらアボン。
##どうせそのときはoverlap()自体を変更する必要があるからとやかく言うなという意見もありそうだが。
857デフォルトの名無しさん:2005/11/15(火) 13:01:10
>>856
凄過ぎる・・・
858昨日の一件でちょっと弱気w:2005/11/15(火) 13:18:48
>>857
なんか拙かった?
859デフォルトの名無しさん:2005/11/15(火) 14:25:38
弱気にならんでも。
プログラム書いた人間じゃないけど参考になってるよ。
860デフォルトの名無しさん:2005/11/15(火) 17:21:54
>>858
いやただ尊敬の眼差しでwww
861831:2005/11/15(火) 20:12:13
>>839
添削ありがとうございますた。

>・問題の性格上仕方ないけど、memcpy()かぁ……
memcpy()をつかうと何かマズいんでそーか・・・?
横着せずに、一つずつした方が良いんですか?

>・enumの最後の値の後に','を置くのは間違い。
ずーっとカンマ置いてました。
たぶんココで指摘されなかったら
カンマ要るもんだと思い込んでた鴨。

>・点数の入力に関して、条件判断とメッセージの内容が噛みあっていない。
>・intValueと言う名前のint変数でlongの値チェックをするのは如何なものかと。
うぁ、全く気づきませんですた。
名前重要、名前重要と・・。

何回も見直したつもりでしたが、まだまだのようで。
精進しまつ。
862デフォルトの名無しさん:2005/11/15(火) 21:05:56
>>861
その手のロジックでは、構造体を使うのが一般的。構造体なら、代入が使える。
→しかし、その問題では配列を使うと言う縛りがあるから仕方ないね。
ということです。仕事柄、memcpy()があると注意Lvが一段上がるからw

で、念のために書くけどintValueはlong型でないとダメで、その場合名前が変だと言うことね。
#LONG_MAXなどを扱うのだから。
863831:2005/11/15(火) 21:22:24
>>862
>→しかし、その問題では配列を使うと言う縛りがあるから仕方ないね。
>ということです。仕事柄、memcpy()があると注意Lvが一段上がるからw

なるほどぉ、構造体でつか・・・。
にしてもmemcpy()には要注意とはコレ如何に?
何度もスンマセンです。

>で、念のために書くけどintValueはlong型でないとダメで、その場合名前が変だと言うことね。
>#LONG_MAXなどを扱うのだから。

指摘されて、遅まきながら気づきましたです。ハイ。
864デフォルトの名無しさん:2005/11/15(火) 21:40:52
>>863
memcpy()を使わなければ、転送サイズ間違いなどによるバグは発生しない。
仕事柄他人のソースのバグを探ることが多いのだが、バッファオーバランなどのバグは
「本人は正しいと思い込んでいて」、「簡単な動作確認は問題なく通り」、見つけにくいことが多いからね。
他にも、memset(), strncpy(), strncat(), strdup(), realloc()なども注意Lvが一段上がる。
#malloc(), realloc(), calloc(), strdup(), free()はメモリ管理一般として元々注意Lv高めなのだが。

>>842
スレ見返してたらこれ見落としてた。スマン。
そういうわけで、>862参照で。
865831:2005/11/15(火) 22:19:04
>>864
詳しいフォロー、サンクスでつ。
すんごい勉強になります。

ありがとうございますた。
866デフォルトの名無しさん:2005/11/15(火) 23:33:35
うがっ、>>382の問題漏れには難しすぎるぽぉ。
頭よじれたけど何も出てきませんですた。
867デフォルトの名無しさん:2005/11/15(火) 23:34:56
頭よじれすぎてアンカー間違えたorz.
>>832ですた。
868デフォルトの名無しさん:2005/11/15(火) 23:40:12
俺はこのスレ見てるとC言語やってるのが
馬鹿みたい思えてくるw
だって難しいんだもん・・・こんなの反則だよ('A`)
869デフォルトの名無しさん:2005/11/15(火) 23:59:52
>>868
C言語やってるのが馬鹿じゃなくって
お前が馬鹿なんだよ
870デフォルトの名無しさん:2005/11/16(水) 00:12:21
>>867
382もわからんです。
871文系:2005/11/16(水) 00:22:50
何だか、私の問題が悪かった所為で荒れてしまったようで、申し訳ありません。orz

>>806
すいません。以後、気を付けます。

とりあえず、私の解答例を書いておきます。

#include<stdio.h>

int main(){

int tensuhyo[10][4];
int gakusei,date;

for(gakusei=0;gakusei<10;gakusei++){

for(date=0;date<4;date++){
872文系:2005/11/16(水) 00:23:18
switch(date){
case 0:
printf("出席番号を入力>>");
scanf("%d",&tensuhyo[gakusei][date]);
while(tensuhyo[gakusei][date]<1){
printf("1以上の値を入力して下さい。>>");
scanf("%d",&tensuhyo[gakusei][date]);
}
break;

case 1:
printf("国語の点数を入力>>");
scanf("%d",&tensuhyo[gakusei][date]);
while(tensuhyo[gakusei][date]<0 || tensuhyo[gakusei][date]>100){
printf("0から100までの値を入力して下さい。>>");
scanf("%d",&tensuhyo[gakusei][date]);
}
break;



}
873文系:2005/11/16(水) 00:24:55
case 2:
printf("社会の点数を入力>>");
scanf("%d",&tensuhyo[gakusei][date]);
while(tensuhyo[gakusei][date]<0 || tensuhyo[gakusei][date]>100){
printf("0から100までの値を入力して下さい。>>");
scanf("%d",&tensuhyo[gakusei][date]);
}
break;

case 3:
printf("英語の点数を入力>>");
scanf("%d",&tensuhyo[gakusei][date]);
while(tensuhyo[gakusei][date]<0 || tensuhyo[gakusei][date]>100){
printf("0から100までの値を入力して下さい。>>");
scanf("%d",&tensuhyo[gakusei][date]);
}
break;
}
}
}

for(gakusei=0;gakusei<10;gakusei++){
date=0;
printf("出席番号%dの国語の点数は%d、社会の点数は%d、英語の点数は%dです。\n",tensuhyo[gakusei][date],tensuhyo[gakusei][date+1],tensuhyo[gakusei][date+2],tensuhyo[gakusei][date+3]);

}

return 0;

}
874文系:2005/11/16(水) 00:28:19
本によっては、まだ(自作)関数が分からない方も居ると思うので、エラー処理はそのつど書いてあります。
同様に、今回はヒントの書き方が悪かったので分からなかった方もいらっしゃったようですが、原則として文字列が入力されることは考えなくて良いとしてあるので、scanf関数を使用しています。
勿論、使える方はfgetsとsscanf等の組み合わせを使用して頂いても構いません。

なんか、本当にわかり辛くて申し訳ありませんでした。

反省として、暫く出題は控えさせて頂きます。
875デフォルトの名無しさん:2005/11/16(水) 00:49:19
あの、誤変換や誤用くらいならまだ可愛いもんだと思うのですが、
変数名dateは流石に鼻でせせら笑いたくなるんですけど。
876デフォルトの名無しさん:2005/11/16(水) 00:50:39
きっと宮城県出身なんだよ。
877文系:2005/11/16(水) 00:52:30
>>875
すいません。
英語に弱いもので。

C言語、やめた方が良いかも知れませんね…。orz
878デフォルトの名無しさん:2005/11/16(水) 01:08:09
せめて国語、社会、英語の点数入力くらいはループで処理しても良いと思うんだ。
879デフォルトの名無しさん:2005/11/16(水) 01:12:17
>英語に弱いもので
だったら最初から、「文系」なんて名乗るなよ。
date(日付け)なんて中学英語以下の問題だろうが。
880デフォルトの名無しさん:2005/11/16(水) 01:32:19
>>879
このスレの皆さんには散々迷惑をかけた上、大した解答も出来ず、本当にすいませんでした。
もう二度と書き込まないので、それでどうか許して下さい。

ROMるなと言われれば、ROMもしません。

本当にすいませんでした。
881デフォルトの名無しさん:2005/11/16(水) 03:17:21
>>880
自意識過剰で被害妄想強過ぎ。
882880:2005/11/16(水) 08:26:50
>>881
もう書き込まないと言っておきながら、すいません。
一晩経ったのと>>881さんの書き込みで頭が冷えました。
英語の件と、ソースの件を指摘されてから、もっとスレにとって有意義な方向にもっていくべきだったと思います。(今更遅いですが)
言い訳のしようもありません。

>>878
点数をfor文で回すことは思いつきませんでした。(実を言うと最初は考えたのですが、思い付かなくてswitchに逃げたので。)
もしよかったら、今後の勉強のためにそのアルゴリズムを使ったソースを上げてもらえませんでしょうか。

>>879
ご指摘ありがとうございました。
何度も言うように俺は本当に英語が駄目なので、これを機に英語から逃げず、改めて勉強しなおすことにします。

住民のみなさん
こうしてスレと無関係な話題でスレを汚したり、雰囲気を悪くしてしまい、すいませんでした。
883デフォルトの名無しさん:2005/11/16(水) 09:05:58
884デフォルトの名無しさん:2005/11/16(水) 09:15:29
>>882
3科目の点数の入力処理で異なる部分は、入力を促すメッセージだけでしょ。それなら

const char *subject[3] = {"国語", "社会","英語"}; とか追加してしまえば

入力処理をこんな感じで纏められるでしょ。
for(gakusei=0;gakusei<10;gakusei++) {
  printf("出席番号を入力>>");
  scanf("%d",&tensuhyo[gakusei][0]);
  while(tensuhyo[gakusei][0]<1){
    printf("1以上の値を入力して下さい。>>");
    scanf("%d",&tensuhyo[gakusei][date]);
  }

  for(date=1;date<4;date++) {
    printf("%sの点数を入力>>", subject[date-1]);
    scanf("%d",&tensuhyo[gakusei][date]);
    while(tensuhyo[gakusei][date]<0 || tensuhyo[gakusei][date]>100) {
      printf("0から100までの値を入力して下さい。>>");
      scanf("%d",&tensuhyo[gakusei][date]);
    }
  }
}
885832:2005/11/16(水) 14:18:27
>>850-851

はーい、正解乙。でも気になった点があるのでまずは3つ

・i == j になることってないよね

・*(array + i) という式には syntax-sugar(※)があって、array[i]と書くことができる。こう書くことの方が多分多いよ
※意味は同じだけどもっと書きやすい表現。構文糖、糖衣構文、構文糖衣ともいう
# []演算子は本当は *いつでも* そういう意味なんだけど、説明すると長くなるから最初は「配列にも使えるし、配列の要素を指すポインタにも使える」ということで。

・retを使うより。2重ループを抜けた時点で単に1を返した方がすっきりする。
# 出口を一つに(return文は1つしか書かない)、というコンセプトで書きたいなら話は別だけど

さらに。

俺が出した例が悪かったのかもしれんが、テストパターンが1つというのは寂しいんでない?
int n0[] = {1,2,3,4,5,6,1,8};
int n1[] = {1,2,3,4,5,6,7,1};
int n2[] = {1,2,3,8,5,6,7,8};
int n3[] = {1,2,3,4,5,2,7,8};
int n4[] = {1,2,3,4,5,6,7,8,4};
int len = sizeof(n0)/sizeof(n0[0]);
特に境界部分のチェックは重要。
n4は「指定範囲外を調べないか」をチェックするため。
886832:2005/11/16(水) 15:08:53
int n3[] = {1,2,2,4,5,6,7,8};
こっちの方がいいか。>>885

>>854
「再帰で書こう」ではなく、「重複しないとはどういうことかを説明しよう」と思って書けば簡単だと思う。
not_find_intsを日本語に訳せば
・配列の長さが1以下であるか(あ、0か。これはやめた方がいい。このコードはたまたま大丈夫だけど(※))、または
・先頭要素が残りの部分に含まれず、残りの部分でも重複がない
って書いてるだけだよね。たまたま説明が再帰的なだけ。

ループだけでなく条件分岐も排除したのはそういう考え方で書かせたかったから。
「こうだったらああしてそうじゃなかったらこうする」みたいな(つまり手続き的な)考え方はして欲しくなかった。
# 書いていい文はreturn文だけ。条件演算子は使用禁止。で良かったかも
# 勿論これは普通の書き方で書けた上での応用問題

※ この書き方だと要素数が1のときnot_find_intに1番目の要素を指すポインタが渡される。
つまり配列の範囲外を指すポインタになるわけで、そういう(実際には何も指していない)ポインタは生成するだけで未定義動作を引き起こす(注:ヌルポインタは別)。
ただ、例外があって、配列の最後の要素の次の要素を指すポインタは生成するだけなら問題ない。
でも指しているオブジェクトの中身を覗こうとするとやっぱり未定義動作になる。
で、not_find_intの定義をみると覗こうとはしていないから実際には大丈夫。だけど呼び出し先の関数にそんなことは期待しちゃいけない。ブラックボックスのように取り扱うべきだ、と。
887832:2005/11/16(水) 16:08:47
はう、見難くてすまん。

>>855
STL(C++)のuniqueと同じ考え方だね。(あれは予めソートしなきゃいかんが)

基本的に>>856なんだけど
>・ソート用比較関数の引き数は、qsort()の第4引き数にあわせたほうがいい。
あわせた方がいいというか、あわせなきゃいかんのよ。処理系によっては「引数や戻り値の型が一部異なっていてもそれがポインタなら大丈夫」というのもあるが、一般には保証されない。

>・int同士の引き算だと、差がINT_MAXを超えてしまうので都合が悪い。

<チラシの裏>
時々比較関数を、*第1引数 - *第2引数 の結果を返す。
という風に説明しているのを見かけるが、悪い説明の典型だと思う。
引き算で書いても大丈夫だとわかった上で自分で書くのは問題ないが、初心者にはそんな説明はしちゃいかんよな。

・符号付きの型だとオーバー/アンダーフローする(かもしれない)
・符号なしの型だと負数が返らない
・引き算のない型だと書き様がない

とかで初心者がはまったらそういう説明をした奴の責任は重いと思う。
</チラシの裏>

あと、greaterという名前はやめた方がいい compare_int_in_ascending あたりが妥当かな。長いか?
greaterだと述語みたいだし、qsortの比較関数だということがわかったとしても降順だと思われそうだ。
888デフォルトの名無しさん:2005/11/16(水) 21:40:09
>>884
なるほど、勉強になりました。
ありがとうございました。
889デフォルトの名無しさん:2005/11/17(木) 00:03:58
読みづらい。
890850:2005/11/17(木) 02:07:39
>>885
>・i == j になることってないよね
あ、あれ?もう頭こんがらがっていつの間にか入ってた・・・

>・*(array + i) という式には syntax-sugar(※)があって、array[i]と書くことができる。こう書くことの方が多分多いよ
すいません。array[i]を*(array + i)で書けること最近覚えたんですが
その逆もまたできることに気づかなかった頭の固さが憎い。

>・retを使うより。2重ループを抜けた時点で単に1を返した方がすっきりする。
最初 return 0 を ret = 0 にしてて有り得ない挙動だったから思い切ってここでループ抜けて
他のは直して無かったです。でもこれってgoto文と変わらないですね。
891デフォルトの名無しさん:2005/11/17(木) 08:17:58
>>890
>でもこれってgoto文と変わらないですね
だから嫌う人もいるけど、私は手頃な妥協だと思う。
何よりも、retを使って見通しを悪くしてバグの原因を増やすことはない。
#勿論、このケースではgotoを使うべきではないのは言うまでもないけど。
892デフォルトの名無しさん:2005/11/17(木) 12:11:29
「複数の出口」と「goto」を同一視するのは間違いだと思うけど。
breakやcontinueをgotoと同一視するならまだしも
893デフォルトの名無しさん:2005/11/17(木) 12:23:35
returnは関数出口へのgotoとも言えるべ。
#実装も普通そう作るし。
894デフォルトの名無しさん:2005/11/17(木) 14:50:40
gccで遊んでたのですが、以下のソースで
/tmp/cclObBZ1.o: In function `main':
/tmp/cclObBZ1.o(.text+0x20): the `gets' function is dangerous and should not be used.
と怒られました。何が原因ですか?
#include<stdio.h>
void cpt(char *str);
int main(void)
{
char ms[50];
printf("暗号化プログラム\n文字?:");
gets(ms);
cpt(ms);
printf("暗号化\n\t%s\n",ms);
return 0;
}
void cpt(char *str)
{
while(*str!='\0'){
*str=(*str+3);
str++;
}
}
895デフォルトの名無しさん:2005/11/17(木) 15:07:41
>>894
そのくらいの英語、判らないならExcite翻訳にでも掛けなさいよ。
余りにも簡単すぎるから敢えてノーヒントで。
896デフォルトの名無しさん:2005/11/17(木) 15:55:15
897デフォルトの名無しさん:2005/11/17(木) 16:07:00
>>895
ええ、「危険だから使うべきでない」って書いてるのは分かりますが、
どう危険なのかなと思って。"原因"です。
>>896
なるほど、バッファオーバーランが起こる危険性があるですね。
898デフォルトの名無しさん:2005/11/17(木) 16:25:21
gets()が危険だと警告が出ているのに、なんでソース貼るかな。
つーか、どうせしょぼい暗号を試すなら+3じゃなくて-1でIBMを入力してみればいいのに。
899デフォルトの名無しさん:2005/11/17(木) 20:16:19
C言語を1(初級)から10(上級)まで学びたいのですが、オススメの本とかありますか?
900デフォルトの名無しさん:2005/11/17(木) 20:17:18
getsが悪いとでるならscanfでも出るのかw
ポインタの使い方を誤ると結構warでたりするが
そこは配列の方が良いんじゃないか?
901デフォルトの名無しさん:2005/11/17(木) 20:24:14
普通に使うだけでワーニングがでる関数
strcpy, strncpy, fopen, plitpath, sprintf, getenv, strcat, itoa
902デフォルトの名無しさん:2005/11/17(木) 20:38:05
>>901
マジ?gccじゃ出ないんだが
strcpyでワーニング出るオプション教えてくれ
903デフォルトの名無しさん:2005/11/17(木) 20:43:35
>>894
の、*str=(*str+3); は
*str = *(str+3)と書いてもいいんですよね?
904デフォルトの名無しさん:2005/11/17(木) 20:54:02
>>903
いいえ、違います。
(*str+3)はstrが指す位置にある文字の文字コードに3加えた値になるが、
*(str+3)はstrの3文字先の値になる。

ところで*str=(*str+3);より*str += 3と書くのが一般的。
905デフォルトの名無しさん:2005/11/17(木) 21:07:33
>>904
レスして頂きありがとう御座います。
そうなるのでしたか。考えが足りてませんでした・・・('A`)
906デフォルトの名無しさん:2005/11/17(木) 23:46:40
全角スペースを半角スペース2個に変換するプログラムを書こうとしたら挫折してしまった…
これって簡単?
907デフォルトの名無しさん:2005/11/17(木) 23:54:11
俺の使ってるエディタで簡単に出来た。
908デフォルトの名無しさん:2005/11/17(木) 23:59:14
>>906
どこでつっかかったんだ?
自分で途中まで書いたソースなり、フローチャートっぽいものなりを書き込めば、誰かヒント出してくれるかもよ。
909デフォルトの名無しさん:2005/11/18(金) 00:07:07
n文字をm文字に置換するのが訳分からない。

イメージとしては
文字列  ABCDABBG
検索文字 AB
置換文字 NTT
置換結果 NTTCDNTTBG
だけど、置換結果用に新しく大きな配列を用意する必要ありですか?
910デフォルトの名無しさん:2005/11/18(金) 00:13:20
NTTの人ですか?
911デフォルトの名無しさん:2005/11/18(金) 00:14:22
いや、IBOとかSTOとかFBIとか浮かんだ結果、
最後に残ったのがNTTだった。
912デフォルトの名無しさん:2005/11/18(金) 00:14:47
>>906
system("sed -e 's/ / /g' inFile > outFile");
913906:2005/11/18(金) 00:19:59
>>908
下のプログラムを作ってみたけど、全部そのままコピーするだけになってしまいました。
ちなみにうちのcygwin環境だといろいろヘッダを足してもgetwcharとかはundefinedだと怒られて
コンパイルが通らなかったのでvc2005でコンパイルしました。
if(wch==' ')とか間違ってるんだろうけど""でも駄目でどうすればいいのやら、といった状態です。
>>912
できればCで書きたいのですが…


#include <stdio.h>

int main(void)
{
int wch;

while((wch=getwchar()) != WEOF){
if(wch==' ')
printf(" ");
else
putwchar(wch);
}

return 0;
}
914デフォルトの名無しさん:2005/11/18(金) 00:26:48
>>909
char * replace1(char * dest, char const * source, const char * key, const char * repl)
{
char * p = strstr(source, key);
if (p) {
sprintf(dest, "%.*s%s%s", p - source, source, repl, p + strlen(key));
}
return p;
}

void replace(char * dest, char const * source, const char * key, const char * repl)
{
char * work = malloc(strlen(source) + strlen(repl));
strcpy(work, source);
while (replace1(dest, work, key, repl)) {
strcpy(work, dest);
}
free(work);
}
915デフォルトの名無しさん:2005/11/18(金) 00:31:04
>>913
/* 空白だと見えにくいので「外」で */
int cho = EOF;
while ((ch = getchar()) != EOF) {
if (cho == "外"[0] && ch == "外"[1]) {
cho = 'タ';
ch = 'ト';
}
putchar(cho);
cho = ch;
}
if (cho != EOF) {
putchar(cho);
}
916906:2005/11/18(金) 00:53:33
>>915
うーん、うまく動きそうだけどこれもそのままコピーになってしまいます。
明日また試してみます。
917デフォルトの名無しさん:2005/11/21(月) 05:44:26
>>65
模範解答まだですか?
918デフォルトの名無しさん:2005/11/21(月) 11:21:54
>>916
まさか、タトを外に見間違えたって落ちじゃないよな。
919デフォルトの名無しさん:2005/11/21(月) 17:25:59
>>918
まさか〜
920デフォルトの名無しさん:2005/11/21(月) 20:16:48
>>918
if文中の外を全角スペース、タとトを半角スペースに入れ替えるんですよね?
それで無理でした。
ちょこちょこいじってみてもなんか駄目ですが、>>915でいけました?
921915≠918:2005/11/21(月) 22:09:19
>>920
試してない。うちに帰って気力があったら試してみるわさ。
922915:2005/11/22(火) 01:40:02
/* ほい、修正版 */
int ch;
int cho = EOF;
while ((ch = getchar()) != EOF) {
if (cho == (unsigned char) "外"[0] && ch == (unsigned char) "外"[1]) {
cho = 'タ';
ch = 'ト';
}
if (cho != EOF) {
putchar(cho);
}
cho = ch;
}
if (cho != EOF) {
putchar(cho);
}
923デフォルトの名無しさん:2005/11/22(火) 23:12:26
制御プログラム(C言語)を扱う必要が出てきたのですが、
フォートランとVBをかじった程度の人間でも分かる参考書って
どなたかご存知ないですか?
立ち読みした限り、「猫でも分かる」は結構難しかったっす
924デフォルトの名無しさん:2005/11/23(水) 00:31:27
>>922
うおー、できました!
ありがとうございます。

>>923
純粋なCの入門書のことですよね?
下のスレを見るといいですよ。
ただテンプレで一番情報量のあったサイトが消えてしまってるので、見たい場合はgoogleで
「c言語 site:2chbooks.seesaa.net/ 」で検索してキャッシュで見る必要があります。

推薦図書/必読書のためのスレッド PART27
http://pc8.2ch.net/test/read.cgi/tech/1130602100/
925デフォルトの名無しさん:2005/11/23(水) 11:39:28
C言語のプログラムを作成中なんですが、
文字列で関数を指定する方法ってないですか?
引数でもらう値によって使う関数を変えたいので。

if文でもよいのですが(以下のように)
sub(char c)
{
if(strcmp(c,"A")==0)
{
A();
}
else
{
B();
}
return;
}
引数に関数名(c)が入ってくるので直接使えればなと思い。。。
926デフォルトの名無しさん:2005/11/23(水) 11:41:49
>>925
お望み通りのものは無理。
関数テーブルを、関数名をキーにして持つって手もあるけど
その程度なら素直にstrcmpで分けた方がいい。
927デフォルトの名無しさん:2005/11/23(水) 12:13:29
>>926
やっぱそうなんですかー。
なんかうまい手があるかもしれないと思っていたので残念です。
レスありがとうございました。
928915:2005/11/23(水) 13:42:48
いや、strcmp()じゃダメだろう。
その例なら、
void sub(char c)
{
void (*func)();
switch (c) {
case 'A':
func = A;
break;
case 'B':
default:
func = B;
break;
}
func();
return;
}
ってところかな。
929デフォルトの名無しさん:2005/11/23(水) 13:43:30
番号残ってた……
930デフォルトの名無しさん:2005/11/24(木) 21:07:56
ホシュ
931デフォルトの名無しさん:2005/11/24(木) 22:55:13
gccでdefineしたら無効だと怒られました。何ですか?
#include<stdio.h>
#define >= <=
int main(void)
{
  int a[5],f=0,i,w,j;
  printf("5つの整数をいれてください\n");
  for(i=0;i<5;i++){
    printf("%dつ目:",i+1);
    scanf("%d",&a[i]);
  }
  for(j=0;j<5;j++){
    for(i=4;i>=j;i--){
      if(a[i] <= a[i-1]){
        w=a[i];
        a[i]=a[i-1];
        a[i-1]=w;
      }
    }
  }
  for(i=0;i<5;i++)
    printf("%d ",a[i]);
  printf("\n");
  return 0;
}
932デフォルトの名無しさん:2005/11/24(木) 23:30:24
>>931
#defineで定義する名前は識別子でなければならない。
変数・関数名などと同じで英字・下線で始まり,2文字目以降はそれに加え数字が使える。
だから#define gt_eq <=のような例はいいけど、その例のように記号は無理。
933デフォルトの名無しさん:2005/11/24(木) 23:39:54
要約:そんな#defineをするな!
934デフォルトの名無しさん:2005/11/24(木) 23:52:18
#define ID_MAX 255
935デフォルトの名無しさん:2005/11/25(金) 09:11:33
>>932
知らなかった。。
どうもです。
>>933
無念・・・。
936デフォルトの名無しさん:2005/11/25(金) 10:47:57
>>935
プリプロセッサにm4使ったり自作したりすればいいw
937デフォルトの名無しさん:2005/11/28(月) 15:17:02
初級編:
gets関数を使ってif文を作りなさい
938デフォルトの名無しさん:2005/11/28(月) 15:28:34
そんなアバウトな
939デフォルトの名無しさん:2005/11/28(月) 17:19:55
中級編:
gets関数を使ってwhile文を作りなさい
940デフォルトの名無しさん:2005/11/28(月) 18:47:01
そんなアバウトな
941デフォルトの名無しさん:2005/11/29(火) 13:56:39
中級編:
gets関数を使ってif文とwhile文を使った7行のプログラムを無理矢理作りなさい
942デフォルトの名無しさん:2005/11/29(火) 14:18:45
いいかげんウザいんだよ
しらけてる空気を読めよ馬鹿
943デフォルトの名無しさん:2005/11/29(火) 15:16:06
>>942
ワロタ
944デフォルトの名無しさん:2005/11/29(火) 15:40:08
>>942
そんなアバウトな
945デフォルトの名無しさん:2005/11/29(火) 17:44:28
>>937ってネタ?マジでそんなことできるんですか?
946デフォルトの名無しさん:2005/11/29(火) 18:45:31
できるよ。
947デフォルトの名無しさん:2005/11/29(火) 19:03:28
>>946
KWSK
948デフォルトの名無しさん:2005/11/29(火) 19:39:13
>>1が逃げたので、このスレはこれで終了します。
続きは沢山あるC言語のスレのどれかへ移動です。
949デフォルトの名無しさん:2005/11/29(火) 23:16:57
まとめサイトまであるのに逃げたって・・・。
950デフォルトの名無しさん:2005/11/29(火) 23:52:49
新たな>>1が現れればいいだけぢゃないか!!
951デフォルトの名無しさん:2005/11/30(水) 02:44:40
ksk
952デフォルトの名無しさん:2005/11/30(水) 02:56:53
kwsk
953デフォルトの名無しさん:2005/11/30(水) 07:48:25
たしかに最近のやりとり見てもここのスレで行う意味無いねぇ
宿題スレやC/C++室でやる方が人の分散も無く良いんじゃないかな
次を立てても廃墟の予感
954デフォルトの名無しさん:2005/11/30(水) 08:21:33
http://pc8.2ch.net/test/read.cgi/tech/1128953769/
次は↑このスレ使えばいいじゃん?
955デフォルトの名無しさん:2005/11/30(水) 09:18:00
>>954
そこはコテの私物
956デフォルトの名無しさん:2005/11/30(水) 09:32:20
>>955
いいじゃんかよーここもコテの私物から始まったんじゃん?
957デフォルトの名無しさん:2005/11/30(水) 09:36:59
>>956
おまえのやってることはただの荒らし依頼だ
958デフォルトの名無しさん:2005/11/30(水) 09:49:03
>>957
はぁ?どこがだ?
959デフォルトの名無しさん:2005/11/30(水) 09:56:45
>>958
無関係のスレを次スレとして指定することに違和感ない?
両方のスレの合意を取るのが先だろう
960デフォルトの名無しさん:2005/11/30(水) 10:00:27
両方Cを学んでいくスレじゃん。どこが無関係だっつーの。
961デフォルトの名無しさん:2005/11/30(水) 17:46:38
>>960
いや、あっちの中身はスレタイとはかなりそぐわない。
962デフォルトの名無しさん:2005/11/30(水) 19:21:33
俺はこのスレが好きなんだけどなあ。
とても勉強になったよ。ありがとう。
963デフォルトの名無しさん:2005/11/30(水) 20:47:08
このスレ終わって欲しくない・・・嫌だ
964デフォルトの名無しさん:2005/12/01(木) 00:12:35
久々にスレが伸びてると思ったら嵐だったってのは良くある罠
965デフォルトの名無しさん:2005/12/02(金) 19:21:18
乱数で既に出た数字を再び出さないようにするには、
どのように処理すれば良いですか?
具体的にはトランプなどです。
966デフォルトの名無しさん:2005/12/02(金) 19:24:52
int toranpu[52]={1,2,3,4,.......}
967デフォルトの名無しさん:2005/12/02(金) 19:25:06
>>965
あらかじめ出るであろう数だけ配列作っておいて
出た奴は1にでもしてifで判定する
968デフォルトの名無しさん:2005/12/02(金) 19:42:15
>>965
前回の情報処理の試験で出てたよ
969デフォルトの名無しさん:2005/12/02(金) 19:54:17
>>967
スイッチ立てまくるんですね。
>>968
CASLで取ったので見てませんでした。
見てみます。
970デフォルトの名無しさん:2005/12/02(金) 21:16:43
俺のも立ちまくり
971デフォルトの名無しさん:2005/12/03(土) 00:57:40
フラグ立てる方法だと、たまたま乱数が既出の数字と
同じものが連続して出てくるケースだといつまでたっても・・・

ということでシャッフルが終わる時間の保証がありません。

他のアルゴリズムを採用することをお勧めします。
972デフォルトの名無しさん:2005/12/03(土) 11:14:39
配列にトランプの数字を入れる(1-13を4組、順番は問わない。)
0〜51までの乱数を発生させる
その乱数の位置にある数がカードの山から取り出した数になる
取り出した数はもう2度と使わないので一番後ろの数とスワップする
カードは51枚になったので0〜50までの乱数を発生させる



(以下繰り返し)
973デフォルトの名無しさん:2005/12/03(土) 11:26:35
頭良いなぁ。
974デフォルトの名無しさん:2005/12/03(土) 14:11:50
975デフォルトの名無しさん:2005/12/03(土) 19:51:09
>>974 その方法は偏り具合が決まって出るのであまり良くない

どっちかというと >>973 の方を薦める
976デフォルトの名無しさん:2005/12/04(日) 13:16:45
>>975
解答編でもダメ?
977デフォルトの名無しさん:2005/12/04(日) 13:23:29
丁度、今月のCマガでシャッフルについての連載があった希ガス
978デフォルトの名無しさん:2005/12/06(火) 21:44:13
>>976
975ではないが解答編なら大丈夫っぽい
979デフォルトの名無しさん:2005/12/06(火) 22:55:46
回答編も要素数に比例して時間がかかる
980デフォルトの名無しさん:2005/12/06(火) 23:37:24
あ、正しくシャッフルできるかどうかではなく、時間が重要だったのね。
ワタシニポンゴヨクワカラナイヨ
981デフォルトの名無しさん:2005/12/08(木) 17:37:32
>>980
まああれだ。文章は読むな、空気を嫁。と。
982デフォルトの名無しさん:2005/12/08(木) 21:51:26
もっと容量のいい頭がほしいー(><。)
983デフォルトの名無しさん:2005/12/08(木) 22:12:54
電脳化をオススメする。
それと、もっと早くプログラムを打ち込みたいなら
手の一部を擬態化するといい。
984デフォルトの名無しさん:2005/12/08(木) 23:02:15
×擬態
○義体
985デフォルトの名無しさん:2005/12/09(金) 02:44:26
>>982
要領のいい頭じゃないことはよくわかった。
986デフォルトの名無しさん:2005/12/11(日) 10:22:04
次スレよろ
987デフォルトの名無しさん:2005/12/11(日) 11:24:40
次スレあるなら漏れ激しく頑張るからおせーて下さいね
ここの問題4,5問やっと解けるようになってからのレベルがテラタカス
988デフォルトの名無しさん:2005/12/11(日) 12:34:30
ム板にしては消費早いな
989デフォルトの名無しさん:2005/12/11(日) 12:52:42
次スレ立ててもこの過疎り様じゃあな。
990デフォルトの名無しさん:2005/12/11(日) 15:11:54
あとは宿題スレとかでいいんじゃないか?
Cスレ立ちすぎ。
991デフォルトの名無しさん:2005/12/11(日) 16:27:57
次スレほしいお…(´・ω・`)
992デフォルトの名無しさん:2005/12/11(日) 17:17:29
次は猿スレで行います(^^)
みんなきてねーwwwww
993デフォルトの名無しさん:2005/12/11(日) 18:10:19
猿スレは断られただろ
移動するならおまえが説得してこい
994デフォルトの名無しさん:2005/12/11(日) 18:51:59
猿スレは講師、生徒随時募集中なのでまったく問題ありませんよ(^^)
なんでも反対したがるアフォは無視してみんなでもりあげてくださいね(^^)
995デフォルトの名無しさん:2005/12/11(日) 19:12:10
いっぱいスレあるんだから各自好きな場所へ行けばいい。
解散。
996デフォルトの名無しさん:2005/12/11(日) 19:17:47
>>994
関係者ならコテだせよ
あと断った奴を誤りに来させろ
997デフォルトの名無しさん:2005/12/11(日) 19:25:43
キモイーなにそれー
いやだねーあたまのおかしい人は(^^)
こんなキモいヤシにコテ出したらつきまとわれるの確実wwww
998デフォルトの名無しさん:2005/12/11(日) 19:36:22
埋め。
999デフォルトの名無しさん:2005/12/11(日) 19:37:12
結局ポポ巣はC言語できるようになったのか?
1000デフォルトの名無しさん:2005/12/11(日) 19:37:59
おはようー!
あたいのスペックは
26歳フリーター、パソコン歴インターネット歴は6年
しかしそれ以外の事は何もできにゃーい…
というわけで今日から参考書を買ってがんばります!
今まさに私みたいに、これからCを勉強するぞって人いたら
よろしくね!!!
前スレが一杯になりそうなので新しく作りました☆
今日でC言語歴約2週間です^^;
簡単な文字の表示はできるようになったんですが
進むペースは亀さん並に遅いので、ゆっくり見守ってね(><。)
もっと容量のいい頭がほしいー(><。)
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。