おまいら!今日からC言語を学んでいくぞー!パート2
レス数が1000を超えています。これ以上書き込みはできません。
0001ポポ巣 ◆Qgm8RFT0/.
2005/10/07(金) 07:23:58あたいのスペックは
26歳フリーター、パソコン歴インターネット歴は6年
しかしそれ以外の事は何もできにゃーい…
というわけで今日から参考書を買ってがんばります!
今まさに私みたいに、これからCを勉強するぞって人いたら
よろしくね!!!
前スレが一杯になりそうなので新しく作りました☆
今日でC言語歴約2週間です^^;
簡単な文字の表示はできるようになったんですが
進むペースは亀さん並に遅いので、ゆっくり見守ってね(><。)
もっと容量のいい頭がほしいー(><。)
0002デフォルトの名無しさん
2005/10/07(金) 07:32:25前スレ進むの早!!
0003デフォルトの名無しさん
2005/10/07(金) 08:41:060004デフォルトの名無しさん
2005/10/07(金) 09:30:49「もっと要領のいい頭」の誤変換か、「もっと容量の大きい頭」の書き間違いのどちらなんだろう。
#いずれにしろ、要領が悪いか、脳味噌が足りないという自覚はあるわけだな。
0005デフォルトの名無しさん
2005/10/07(金) 11:14:52http://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
0006デフォルトの名無しさん
2005/10/07(金) 11:18:39□■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/
0007デフォルトの名無しさん
2005/10/07(金) 13:31:09おまいら!今日からC言語を学んでいくぞー!
http://pc8.2ch.net/test/read.cgi/tech/1127501670/
0008デフォルトの名無しさん
2005/10/07(金) 13:42:240009デフォルトの名無しさん
2005/10/07(金) 13:46:07http://www.google.co.jp に接続してトップページをGET、ファイルに書き出すプログラム。
0010デフォルトの名無しさん
2005/10/07(金) 13:49:500011デフォルトの名無しさん
2005/10/07(金) 15:10:41なかなか難しいぽ
0012変な人
2005/10/07(金) 15:23:090013デフォルトの名無しさん
2005/10/07(金) 16:37:13コテハン、私的なスレは自己紹介板・最悪板・夢・独り言板・おいらロビー・なんでもあり板・
PINKのなんでもあり板以外では、原則として全て削除または移動対象です。
スレ立ての内容はくだらない議論にならないような内容にしてください
0014デフォルトの名無しさん
2005/10/07(金) 16:50:24C言語のスレ、この板だけで何個あるんだよ。
0015デフォルトの名無しさん
2005/10/07(金) 17:51:010016デフォルトの名無しさん
2005/10/07(金) 18:19:020017デフォルトの名無しさん
2005/10/07(金) 18:32:08最低限>>1-10ぐらい眺めて言えよ
ツラだけ大きな糞運営さんw
0018デフォルトの名無しさん
2005/10/07(金) 18:39:100019デフォルトの名無しさん
2005/10/07(金) 18:41:420021デフォルトの名無しさん
2005/10/07(金) 18:50:25>>9だとエラーが出る
アホなので何がなんだかもうわからんorz
0022デフォルトの名無しさん
2005/10/07(金) 18:51:39UDPでGoogleのHTMLをダウンロードしたらいいのか?
0023デフォルトの名無しさん
2005/10/07(金) 19:02:46http://hs.or.tp/php/uploader/up/code046.c
「猫でもわかる」のをパクって作りました
2ちゃんTOPだと成功するけど、なぜかグーグルのサイトだと何故かダメぽ(´・ω・`)
0024デフォルトの名無しさん
2005/10/07(金) 19:10:14http://www.nakka.com/lib/
0025デフォルトの名無しさん
2005/10/07(金) 19:19:51これから読んでみます
0027デフォルトの名無しさん
2005/10/07(金) 19:32:26これだけだとダメなのかな・・・
0028デフォルトの名無しさん
2005/10/07(金) 19:33:53#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);
/*
0029デフォルトの名無しさん
2005/10/07(金) 19:34:23if (len==0)
break;
buf[len]='\0';
fprintf(fp, "%s", buf);
}
InternetCloseHandle(hUrl);
InternetCloseHandle(hInet);
fclose(fp);
return 0;
}
//EOF
0030デフォルトの名無しさん
2005/10/07(金) 19:37:35GET http://www.google.co.jp/ HTTP/1.0
なら帰ってくるよ
0031デフォルトの名無しさん
2005/10/07(金) 19:46:590032デフォルトの名無しさん
2005/10/07(金) 19:55:10コードが悪いのかorz
もう諦めた
>>30
ありがとうございました
0033デフォルトの名無しさん
2005/10/07(金) 19:56:540034デフォルトの名無しさん
2005/10/07(金) 20:12:540035デフォルトの名無しさん
2005/10/07(金) 20:37:350036デフォルトの名無しさん
2005/10/07(金) 20:47:44コードを晒してくれないと悪い部分も指摘できない罠
0037デフォルトの名無しさん
2005/10/07(金) 20:48:100038デフォルトの名無しさん
2005/10/07(金) 21:05:03#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);
/*
0039デフォルトの名無しさん
2005/10/07(金) 21:05:41switch (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
{
/*
0040デフォルトの名無しさん
2005/10/07(金) 21:06:22printf("正常に初期化できました\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");
/*
0041デフォルトの名無しさん
2005/10/07(金) 21:07:15return 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;
}
/*
0042デフォルトの名無しさん
2005/10/07(金) 21:07:46closesocket(Socket);
err=WSACleanup();
if (err == SOCKET_ERROR)
{
printf("リソース解放失敗\n");
}
else
{
printf("リソース解放成功\n");
}
return 0;
}
//EOF
0043デフォルトの名無しさん
2005/10/07(金) 21:09:48GETで指定するのは相対パスだから、
www.google.co.jp:80に接続したら
GET / HTTP/1.0
でルートを取得できる
004438
2005/10/07(金) 21:52:321.保存したファイル(google.txt)が文字化けして読めません
秀丸でエンコードにUTF-8やSJISを指定して開いても
フフフフフフフフという文字があちこちに表示されました
どうすれば文字化けしないファイルを作れますか?
2.「GET / HTTP/1.0」を指定すると「HTTP/1.0 302 Found」になりました
何が起きているのでしょうか?
「ページが一時的に別の場所に用意されていることを意味する」とのことですが
このエラーが出る心当たりがありません
変わりに「/Top/World/Japanese/」としてみたところ正常にダウンロードできました
よろしくお願いします
0045デフォルトの名無しさん
2005/10/07(金) 21:55:55フフフフでぐぐれ。
0046デフォルトの名無しさん
2005/10/07(金) 22:12:17その時のログ取ってそっくり真似ればいいんだが
Cとは関係ない話だし
0047デフォルトの名無しさん
2005/10/07(金) 22:19:11http://hpcgi1.nifty.com/MADIA/Vcbbs/wwwlng.cgi?print+200506/05060093.txt
こちらのサイトを見つけました
文字列の最後に'\0'が抜けていたのが原因でした
ありがとうございます
引き続き2.のほうお願いします
0048デフォルトの名無しさん
2005/10/07(金) 22:25:030049デフォルトの名無しさん
2005/10/07(金) 22:25:39IEたちが何やってるか、パケットキャプチャ使ったり自作Proxyもどきを作ってみ
0050デフォルトの名無しさん
2005/10/07(金) 22:33:14http://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%A5%D1%A1%BC%A5%C82%5D%5D
問題の数が多いのでスレごとに別ページにしました
0051デフォルトの名無しさん
2005/10/07(金) 22:35:54HTTP1.1にして、Host、User-Agent、Connectionを送信してやるといいと思われ。
005238
2005/10/07(金) 23:46:24これで302が出なくなりました
HTTP1.1だと切断されなくなったのでとりあえず避けました
0053デフォルトの名無しさん
2005/10/07(金) 23:56:43symbol in file
sqrt review6.o
ld: fatal: Symbol referencing errors. No output written to review6.exe
コンパイル通すとこぅなるんですけど原因何かわかありますか??
0054デフォルトの名無しさん
2005/10/08(土) 00:01:22もうちっとネットワーク自体について勉強しないとダメぽorz
0055デフォルトの名無しさん
2005/10/08(土) 00:16:07念のため、規格で決まっている改行コードは\r\nだから
Apacheのように多少融通が利くサーバーでは一応動くけれど
"GET / HTTP/1.0\r\nHost: www.google.co.jp\r\n\r\n"
にした方がいいと思うYO
0056デフォルトの名無しさん
2005/10/08(土) 00:23:06自分のPCにでもサーバ立ててやれ
非常識にもほどがある
0057デフォルトの名無しさん
2005/10/08(土) 00:28:170058デフォルトの名無しさん
2005/10/08(土) 00:35:400059デフォルトの名無しさん
2005/10/08(土) 01:12:55アドバイスありがとございます
0060デフォルトの名無しさん
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とはしないな...)
0061デフォルトの名無しさん
2005/10/08(土) 03:56:56その問題は良くない。
0062デフォルトの名無しさん
2005/10/08(土) 03:59:11#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
printf("私の名前は %s です。", strrchr(argv[0], '\\')+1);
return 0;
}
0063デフォルトの名無しさん
2005/10/08(土) 04:03:510064デフォルトの名無しさん
2005/10/08(土) 04:11:57出題者の模範解答を見てみたいものだ
0065デフォルトの名無しさん
2005/10/08(土) 04:27:22wikiの解答ページにまとめてみるってのは需要あるかな?
0066デフォルトの名無しさん
2005/10/08(土) 04:28:49神キタ━━━━━━(゚∀゚)━━━━━━ !!
0067デフォルトの名無しさん
2005/10/08(土) 04:31:17そういう事は、思い立ったら速やかに黙ってやれ。
ぶっちゃけおまいの自己満足の世界なんだから。
0068デフォルトの名無しさん
2005/10/08(土) 04:39:21だから仕様にそった回答は不可能
で、メジャーなコンパイラや環境に対応すればほぼ正解としてみる
軽くググった感じじゃファイル名かフルパスのどちらかしかない←これが大前提
そこでargv[0]末尾からファイル名らしき部分を抜き出してみる
これでほぼ正解じゃね?どうよ
0069デフォルトの名無しさん
2005/10/08(土) 04:44:070070デフォルトの名無しさん
2005/10/08(土) 04:48:37ファイル名表示ソフトつーのを作ってみるわ
もちろんWindowsネイティブな。少しまちなー
0071デフォルトの名無しさん
2005/10/08(土) 04:51:52ソース出しても碌なこと言わないな
0072デフォルトの名無しさん
2005/10/08(土) 04:52:40MacOS9のも頼むな
0073デフォルトの名無しさん
2005/10/08(土) 08:59:19CP/Mに対応しろと言われるより嫌
0074デフォルトの名無しさん
2005/10/08(土) 09:15:14win32apiは駄目?
そうですか。
0075デフォルトの名無しさん
2005/10/08(土) 09:24:41007674
2005/10/08(土) 09:35:02#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;
}
はいはい次次
0077デフォルトの名無しさん
2005/10/08(土) 09:49:35GetModuleFileName(0, で平気のはず。
007874
2005/10/08(土) 09:55:170079デフォルトの名無しさん
2005/10/08(土) 12:45:31ハゲド
0080デフォルトの名無しさん
2005/10/08(土) 13:14:140081デフォルトの名無しさん
2005/10/08(土) 13:14:58>もちろんWindowsネイティブな。
ハゲワロス
0082デフォルトの名無しさん
2005/10/08(土) 13:15:13cygwin入れてgcc使ってる環境では単純に下のでできた。
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
printf("私の名前は %s です。\n", argv[0]);
return 0;
}
0083デフォルトの名無しさん
2005/10/08(土) 14:47:430084デフォルトの名無しさん
2005/10/08(土) 14:58:12仕様に沿った解答
#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;
}
0085デフォルトの名無しさん
2005/10/08(土) 16:48:41#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;
}
本とググって見つけたのはこれで全部
これ以上の型は知らん
0086デフォルトの名無しさん
2005/10/08(土) 16:49:120087デフォルトの名無しさん
2005/10/08(土) 16:59:140088デフォルトの名無しさん
2005/10/08(土) 17:00:49printf("typedef %d\n", sizeof(typedef));
だめだったぞ
0089デフォルトの名無しさん
2005/10/08(土) 17:03:16配列とかポインタとか構造体とか共用体とか列挙体とか long longとかlong doubleとか
ついでに言うとsizeof演算子の返す型はsize_t型だからいきなり%dとかやると未定義動作
%zu(C99)と書くかキャストしる
0090デフォルトの名無しさん
2005/10/08(土) 17:11:57つ<limits.h><float.h>
0091デフォルトの名無しさん
2005/10/08(土) 17:13:15載ってなかったぞ
何か違うの?
0092デフォルトの名無しさん
2005/10/08(土) 17:23:012の補数以外完全無視で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;
}
0093デフォルトの名無しさん
2005/10/08(土) 17:35:40最近スレのレベル高すぎ
0094デフォルトの名無しさん
2005/10/08(土) 17:54:48邪魔だから黙ってろ
0095デフォルトの名無しさん
2005/10/08(土) 18:09:070096デフォルトの名無しさん
2005/10/08(土) 18:12:44横からだが俺も>>93に同意。
もう「今日から」とかいうレベルじゃない(初代スレ立ったの24日だし
0097デフォルトの名無しさん
2005/10/08(土) 18:14:02分かる所から手ぇつければ良いんだよ
無理に理解しようとすると挫折するから
0098デフォルトの名無しさん
2005/10/08(土) 18:16:360099デフォルトの名無しさん
2005/10/08(土) 18:18:08簡単つったらhello world表示
0100デフォルトの名無しさん
2005/10/08(土) 18:20:370101デフォルトの名無しさん
2005/10/08(土) 18:24:17http://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
wiki - おまいら!今日からC言語を学んでいくぞー!パート2
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%A5%D1%A1%BC%A5%C82%5D%5D
0102デフォルトの名無しさん
2005/10/08(土) 18:25:58くだらねえ
0103デフォルトの名無しさん
2005/10/08(土) 18:29:560104デフォルトの名無しさん
2005/10/08(土) 18:30:440105ねた
2005/10/08(土) 18:31:13#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
→高度な奴
嘘のヒントを教えられても「そういつは非論理的ですね」と指摘できるようにする
0106デフォルトの名無しさん
2005/10/08(土) 18:38:36C言語始めたばかりの人間のためのスレだろ
0107ほぼ、なっち
2005/10/08(土) 18:39:01「隣り合う2つの数を加えると、次の数に等しくなる」という規則をもった数列
1,1,2,3,5,8,13,21,34・・・
を出力するプログラム
再帰を使う事。undigned longの最大値以下でいいよ。
0108デフォルトの名無しさん
2005/10/08(土) 18:58:130109ASA
2005/10/08(土) 19:06:05入力された、1から6の数字をサイコロの目の
ように表示する。
入力が1なら、表示は
...
.o.
...
ていうイメージ
どう、簡単すぎ?
0110ほぼ、なっち
2005/10/08(土) 19:06:18せっかくなので
<limits.h>にある unsigned long int は ULONG_MAX 4,294,967,295
と書いておく
0111>109
2005/10/08(土) 19:15:44デジタル時計とかの表示
*****
* *
* *
* *
*******
* *
* *
* *
*****
0112111
2005/10/08(土) 19:17:140113デフォルトの名無しさん
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;
}
0114デフォルトの名無しさん
2005/10/08(土) 19:33:48だから式の順番をちょっと変えて、ULONG_MAX -b< a
とかにすれば良いと思うよ
0115デフォルトの名無しさん
2005/10/08(土) 20:43:310116デフォルトの名無しさん
2005/10/08(土) 20:55:37先生、意味がわからないです
0117デフォルトの名無しさん
2005/10/08(土) 21:06:57なんかC用の使いやすいエディタないかな
0118デフォルトの名無しさん
2005/10/08(土) 21:07:05時計を作れって問題じゃないよね?
#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;
}
0119デフォルトの名無しさん
2005/10/08(土) 21:19:16更新乙
0120デフォルトの名無しさん
2005/10/08(土) 21:25:52何が全然わからないのか書いてくれ。
0121デフォルトの名無しさん
2005/10/08(土) 22:03:01#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;
}
0122デフォルトの名無しさん
2005/10/08(土) 22:19:35【難易度】低
【問題】
配列のアドレスをすべて表示しなさい
例えばint n[10]なら10個全部です
0123デフォルトの名無しさん
2005/10/08(土) 22:25:320124デフォルトの名無しさん
2005/10/08(土) 22:26:34こないだの日経ソフトウェアに載ってた、JAVAのプログラム↓
/*
*
*今日の金運は、
*
*貧乏 普通 金持ち
*
*->->->->->->->->*
*
*/
って表示する占いプログラムを
C言語で作ってみて、、
最後に printf("今日も一日頑張って下さい\n");
をくっつけたんだけど、
その後に
Press any key to continue
の機能がデフォルトで欲しいんだけど。
VBC++とかで普通にF5で実行すると、
結果を見るまもなくすぐにコンソールウィンドウが
閉じてしまうのでこの機能が欲しい。
情報求ム。
0125デフォルトの名無しさん
2005/10/08(土) 22:31:59int main(){
int n[10], i;
for (i = 0; i < 10; i++)
printf("%p\n", &n[i]);
return 0;
}
0126デフォルトの名無しさん
2005/10/08(土) 22:32:33CTRLを押しながらF5
0127デフォルトの名無しさん
2005/10/08(土) 22:40:11実行したときには結果も何もワカラナイって話だ。
0128デフォルトの名無しさん
2005/10/08(土) 22:42:09コマンドプロンプトから実行しろ。
0129デフォルトの名無しさん
2005/10/08(土) 22:55:43Press any key to continue
はどうなるんだよ。
根本的な解決にはなってない。
いちいち「EXIT」と入力するより
ボタンひとつで終了させたい。
0130デフォルトの名無しさん
2005/10/08(土) 23:02:27面倒な香具師だなぁ。
--
そのプログラム
pause
--
ってバッチでも作ってそれを動かせ。
0131デフォルトの名無しさん
2005/10/08(土) 23:06:33getchar();でもsystem("PAUSE");でも入れとけばええやん。
0132デフォルトの名無しさん
2005/10/08(土) 23:09:27出来たできた!!
感激です、サンクス子!!
0133デフォルトの名無しさん
2005/10/08(土) 23:32:02あ、だめ それにさわっちゃ…
[;´Д`] (Д´;)
/ v (( 旦/\
Π ̄| | ̄ ̄| | ̄Π
ゴゴゴゴ… ズズズズ…
[;´Д`] (Д´;)
/v 旦 /)
Π| ̄ ̄| ))) ((( | ̄Π
ズモモモモモモ…
[;´Д`] (Д´;)
| ̄ ̄ ̄| ム旦 | ̄ ̄ ̄|ll /)
\ ll l \| ̄ ̄|/ lll l / )) | ̄Π
| ̄ ̄ ̄| [;´Д`] | ̄ ̄ ̄| ぺ…
\ \ ム旦J / / ペヤンゴゥ
\___| ̄T ̄|__ /
<| ・ / | ̄| ヽ |>
| ・ 」_|_ |
 ̄//|_] [_|ハ ̄
|~| |___| |~| (Д´;)
○ |___| ○ /)
(( )) | ̄Π
 ̄  ̄
0134デフォルトの名無しさん
2005/10/09(日) 20:39:010135デフォルトの名無しさん
2005/10/10(月) 14:45:46華氏⇔摂氏の温度換算プログラムを作れ
また、0℃〜100℃の対応表を表示せよ
0136デフォルトの名無しさん
2005/10/10(月) 14:51:03単語カウントプログラムを作れ
単語は英字ではじまり英字・数字が連続したものである
単語はスペースで区切られている
0137デフォルトの名無しさん
2005/10/10(月) 14:56:09100までの合計を求めよ
for、while、gotoを使った3通りのプログラムを作成せよ
0138デフォルトの名無しさん
2005/10/10(月) 14:56:33お前もしや「Cの絵本」持ってないか?
0139デフォルトの名無しさん
2005/10/10(月) 14:59:41なかなか良さそうな本ですね
問題はK&Rを見ながら考えました
0140デフォルトの名無しさん
2005/10/10(月) 15:04:26おk。俺の思い違いか。
つい最近読んだら丁度書いてあったんでつい。
0141デフォルトの名無しさん
2005/10/10(月) 18:26:09/*
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;
}
0142デフォルトの名無しさん
2005/10/10(月) 18:28:12/*
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;
}
0143デフォルトの名無しさん
2005/10/10(月) 18:33:26#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++の場所を間違えてしまって思ったより難しかった
*/
0144デフォルトの名無しさん
2005/10/10(月) 18:49:37#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;
}
0145デフォルトの名無しさん
2005/10/10(月) 18:54:040147デフォルトの名無しさん
2005/10/10(月) 19:32:54じゃないんですか?数字は?
0148デフォルトの名無しさん
2005/10/10(月) 20:48:58include <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);
}
0149デフォルトの名無しさん
2005/10/10(月) 20:49:49NULLの使い方が変態。
0150デフォルトの名無しさん
2005/10/10(月) 20:55:46変数mojisuuは名前から単語の文字数と受け取れるが、実際には0か1のどちらかであり変数名の意味と異なります。
また>>147で書かれているように数字が無視されています。
これはこの問題で数を数えるという点では問題ないと思われるが、こういうのは間違いなくバグにつながります。
文字列の終端はNULLではなく\0です。かなり問題。てか警告でない?
各単語の文字数を出すプログラムに変えてみて下さい。そのプログラムがいかにおかしいかがわかると思います。
で、作りなおしてみて下さい。
0151デフォルトの名無しさん
2005/10/10(月) 21:01:29禿ワロス
0152デフォルトの名無しさん
2005/10/10(月) 21:02:50一行目の#
printfでのlf
returnくらい書こう
0153デフォルトの名無しさん
2005/10/10(月) 21:06:39コンパイルエラーでセグメンテーションの〜と
でるのですが、これは何を指摘したものですか?
教えて下さいよろしくお願いしますm(_ _)m
0154デフォルトの名無しさん
2005/10/10(月) 21:08:46質問の仕方を学んでからにしろ。
0155デフォルトの名無しさん
2005/10/10(月) 21:10:02学びに逝ってきます・・・
0156デフォルトの名無しさん
2005/10/10(月) 21:11:50おいおいマイケル、道順の説明でガーと行ってダーっと曲がってなんて説明、アリかい?
0157デフォルトの名無しさん
2005/10/10(月) 21:15:01迷惑おかけしました
ググって探してきますのでスルーして下さい
0158デフォルトの名無しさん
2005/10/10(月) 21:56:52C99では無問題
0159デフォルトの名無しさん
2005/10/10(月) 22:04:14一番望ましいのは和の公式使ったプログラムだゴルァ
0160144
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++;
}
0161144
2005/10/10(月) 22:06:18{
printf("%d文字\n", mojisuu);
mojisuu=0;
}
text++;
}
printf("%d文字\n", mojisuu);
printf("単語%d個\n", count);
return 0;
}
0162デフォルトの名無しさん
2005/10/10(月) 22:14:54数字はどうした。指摘された点くらい直せ。
それ以前に実行結果を確認してから書け。pentium4がお前のプログラムでは何文字になる?
ついでに最初と最後にスペースいれてみろ。" This is a pentium4 "って。
結果をみて直しせ。
0163デフォルトの名無しさん
2005/10/10(月) 22:23:25とても難しいと思うな
0164デフォルトの名無しさん
2005/10/10(月) 22:23:36pentium44444とかにしてみ。
0165144
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++;
}
0166デフォルトの名無しさん
2005/10/10(月) 22:59:39{
printf("%d文字\n", mojisuu);
mojisuu=0;
}
text++;
}
printf("%d文字\n", mojisuu);
printf("単語%d個\n", count);
return 0;
}
0167デフォルトの名無しさん
2005/10/10(月) 23:00:010168デフォルトの名無しさん
2005/10/10(月) 23:01:30追加で問題あげよう
returnの前にtextの文字列を表示しなさい
0169デフォルトの名無しさん
2005/10/10(月) 23:05:00実行結果を見て「0文字」と出てきてなんとも思わないの?
「0文字」なんて出てこないようにしてみて下さい。
0170デフォルトの名無しさん
2005/10/10(月) 23:08:370171デフォルトの名無しさん
2005/10/10(月) 23:10:10単に
if ( mojisuu != 0 ) { printf("%d文字\n", mojisuu); }
って書くだけジャネ
0172デフォルトの名無しさん
2005/10/10(月) 23:22:25いや・・・そうだけど・・・そういうことじゃなくて・・・
このプログラムだと前後の空白や連続した空白を「単語」として認識しているわけじゃん?
文字数や単語数を表示っていう問題の答えとしては間違ってないけど、それってなんかおかしいだろって言いたかったの。
そういうのがバグの元になるよっていいたかったのだが・・・
0173デフォルトの名無しさん
2005/10/10(月) 23:52:05がんばっている君にヒントをあげます。
例えば
if (mojisuu==0){
count++;
}
ってさ、そのまま読めば「文字数が0個のとき単語の数を1個増やす」でしょ。直感的にわかりにくくない?まぁ、これくらいならわかるけどね。
プログラム書くときどうしてもこういった表現がでてくるのはしょうがないけどさ、なくせるならなくしたいものなの。
そして今回の問題ならもっと「読みやすい、理解しやすい」プログラムが書けます。
例えば
1.与えられたインデックスの文字がスペースなら、次の英字または終端文字までインデックスを進める関数
2.与えられたインデックスの文字が英字なら、次のスペースまたは終端文字までインデックスを進める関数
を作ってみてください。それを使って単語数と文字数を出すプログラムを作ってみて下さい。
0174デフォルトの名無しさん
2005/10/11(火) 00:09:01>2.与えられたインデックスの文字が英字なら、次のスペースまたは終端文字までインデックスを進める関数
よくない
「ふらぐ」使うべき
0175デフォルトの名無しさん
2005/10/11(火) 00:19:12何故?せめて理由を書いて下さい。
0176デフォルトの名無しさん
2005/10/11(火) 00:24:50難しいのはぜったい無理っす(><)
0177デフォルトの名無しさん
2005/10/11(火) 00:38:13【問題】
以下の構造体を用いて、単方向リストを作れ。
struct field_t {
int val;
struct field_t *next;
}
整数値をランダムに10個発生させてその値をリストの最後尾に追加していき、最後にリストの先頭から順に表示。
0178デフォルトの名無しさん
2005/10/11(火) 02:11:29普通>>173の言うようなプログラムになると思うが、何がよくないんだ?
つーかフラグの意味がわからん。初心者用のスレなんだからもう少し説明しろよ。
0179デフォルトの名無しさん
2005/10/11(火) 03:38:070180デフォルトの名無しさん
2005/10/11(火) 06:39:12本を参考にしながら作ってみますた
http://hs.or.tp/php/uploader/up/code060.c
0181デフォルトの名無しさん
2005/10/11(火) 11:49:34初心者を容易にフラグへ依存させるべきではない。
フラグを使うのは中級者以上になってからだな
0182デフォルトの名無しさん
2005/10/11(火) 12:47:47一通りある程度理解したんだけどコードが書けない・・・
0183デフォルトの名無しさん
2005/10/11(火) 12:56:13目標が決まったら、それに必要な知識や情報を自分で集めてみる。
なんだかんだ言って自分で1からコードを書き始めると
参考書の理解不足な部分とか、網羅されてない部分がゴロゴロ出てくるから
そこに自力で対処できるようになればもう初心者の枠は超えてるかと。
0184デフォルトの名無しさん
2005/10/11(火) 17:08:25フラグを使わなくなるのは、どうなってからでしょうか?
0185デフォルトの名無しさん
2005/10/11(火) 17:23:01最初は好きなように作ればいい。
あとで見直してこっちの方がよかったなとか
だんだん進歩していくから心配いらない。
0186デフォルトの名無しさん
2005/10/11(火) 17:23:420187デフォルトの名無しさん
2005/10/11(火) 17:24:530188デフォルトの名無しさん
2005/10/11(火) 17:30:49回答に頼ってるといつまでも自分でプログラム作れない。
0189デフォルトの名無しさん
2005/10/11(火) 17:33:130190デフォルトの名無しさん
2005/10/11(火) 19:42:51参考になりましたよ!
ここの課題を出来そうなものから作ってみます(`・ω・´)
0191デフォルトの名無しさん
2005/10/11(火) 20:39:440192デフォルトの名無しさん
2005/10/11(火) 21:04:33wiki更新しました。過去問を探すのに便利なのでご利用ください。
時間帯によってはちょっと重いですが今ぐらいの時間なら大丈夫だと思います。
0193144
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++;
0194144
2005/10/11(火) 21:58:20}
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);
}
0195144
2005/10/11(火) 21:59:44{
text++;
}
}
printf("単語%d個\n", tangosuu);
text--;
while (*text != '\0')
{
text--;
}
text++;
printf("%s\n", text);
return 0;
}
0196デフォルトの名無しさん
2005/10/11(火) 22:12:22数字は無視ですかそうですか。
0197デフォルトの名無しさん
2005/10/11(火) 22:37:28驚いたな。
char DUMMY[4] = {'A','B','C','D'};
char *text=" this is a pentium44444 ";
↑のような状態だと行き過ぎる可能性があるぞ
0198デフォルトの名無しさん
2005/10/11(火) 22:37:48while (*text != '\0') {
text--;
}
これはtextのポインタを先頭へと戻している処理だと思います。
さて、文字列の先頭は'\0'でしたか?
>>168の人は遠回しに「変数textを書き換えたらtextの先頭のアドレスがわからなくなるだろ?」と言っていると思われます。
もう一度処理を考え直してみて下さい。
else {
text++;
}
どんな条件のときにこのelse節が実行されますか?
>>196
無視されてないと思うけど・・・
>>180
リンクはらないで普通にここに書き込んだら?
0199デフォルトの名無しさん
2005/10/11(火) 22:48:20>無視されてないと思うけど・・・
forward_space_to_alphaですっとばされるぞ
0200デフォルトの名無しさん
2005/10/11(火) 22:51:43>136
よく嫁
仕様だ
0201デフォルトの名無しさん
2005/10/11(火) 22:55:43「123sigo」は
単語1、文字数7 (出題者の意図と違うと思う)
単語1、文字数4 (上のプログラムの動作?)
単語0、文字数数える必要なし (俺が思ってた出題者の意図)
0202デフォルトの名無しさん
2005/10/11(火) 23:04:15>リンクはらないで普通にここに書き込んだら?
なんで?
0203144
2005/10/11(火) 23:09:54実は逆で、どんな文字列が用意されてるかわからないが
>>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)
0204144
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;
0205144
2005/10/11(火) 23:11:32text_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++;
0206144
2005/10/11(火) 23:12:03}
}
printf("単語%d個\n", tangosuu);
printf("%s\n", text);
return 0;
}
0207デフォルトの名無しさん
2005/10/12(水) 00:24:56{
printf("終端が\\0じゃないです\n");
return 1;
}
この処理に何の意味がある?文字列の終端は'\0'だ。
else
{
text_copy++;
printf("実行されません\n");
}
実行されないのになんで書くんだ?
144は指摘された点をつぎはぎのように書き加えていくんじゃなくて、
今まで指摘されたことを総合して、もう1度最初からプログラムを書いた方がいいぞ。
処理の仕方をもう1度よく見直せ。自分のプログラム見てわかりにくいと思わないか?
>>173に書かれているような関数を使って、もっと簡潔に書けるから考えてみろ。
0208174
2005/10/12(水) 02:27:46初心者に限らずプログラムはできる限りシンプルな方がよい。
そもそも数字で始まるのは単語でなくていいのか?というのはおいといて
元の問題は、
[状態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; /* 単語が終わった */
}
}
}
ってな感じ。
「ふらぐ」をやたらめったらと使うべきではないが、(この程度なら)分かり易いプログラムが書ける。
0209デフォルトの名無しさん
2005/10/12(水) 07:14:24main()
{
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
頭いい先輩方お願いします。よろしくお願いします。
0210デフォルトの名無しさん
2005/10/12(水) 07:39:49宿題スレに逝け
0211デフォルトの名無しさん
2005/10/12(水) 11:39:54>頭いい先輩方お願いします。よろしくお願いします。
↓
課題スレ住人に解いてもらう
↓
次の課題も解けない
↓
また解いて貰う
↓
大学の授業についていけなくなる
↓
不登校Or自主退学へ
0212デフォルトの名無しさん
2005/10/12(水) 11:41:21専門卒?
0213デフォルトの名無しさん
2005/10/12(水) 12:45:170214デフォルトの名無しさん
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");
}
}
0215デフォルトの名無しさん
2005/10/12(水) 14:10:270216デフォルトの名無しさん
2005/10/12(水) 14:11:310217デフォルトの名無しさん
2005/10/12(水) 14:13:240218デフォルトの名無しさん
2005/10/12(水) 14:43:05と見分けるポイントはどうすればいいんですか?
0219デフォルトの名無しさん
2005/10/12(水) 14:45:110220デフォルトの名無しさん
2005/10/12(水) 15:02:210221デフォルトの名無しさん
2005/10/12(水) 15:07:190222デフォルトの名無しさん
2005/10/12(水) 15:07:20難しいですね・・・
プログラムになれるように努力します
0223デフォルトの名無しさん
2005/10/12(水) 15:09:280224デフォルトの名無しさん
2005/10/12(水) 15:10:14基本的には再帰は使わない方向で考えてみて、
どうしても複雑になりすぎるとか、再帰を展開する方法が分からないって時に
再帰を使えばいい。
0225デフォルトの名無しさん
2005/10/12(水) 15:11:020226デフォルトの名無しさん
2005/10/12(水) 15:12:310227デフォルトの名無しさん
2005/10/12(水) 20:14:33法則性が全然みえてこない
難しい
0228デフォルトの名無しさん
2005/10/12(水) 20:26:250229デフォルトの名無しさん
2005/10/12(水) 20:59:340230デフォルトの名無しさん
2005/10/12(水) 21:08:57簡潔に書けないのは初心者だから。
逆にこの程度のプログラムでフラグなんて使ってたら話にならない。
君の頭の中には拡張性という単語はないのか?君はフラグを増やして拡張するのかもしれないが。
勉強をはじめたばかりの人が拡張性などを気にする必要はないし、このプログラムを拡張するわけでもないだろうが、
最初から書こうとしなければ気にするようにもならないし、いざ必要なときにアホなプログラム書いててはまるだけ。
0231デフォルトの名無しさん
2005/10/13(木) 00:46:13 
 デジタル時計とかの表示
 
  *****
 *       *
 *       *
 *       *
 *******
 *       *
 *       *
 *       *
  *****
0232デフォルトの名無しさん
2005/10/13(木) 00:58:06http://hs.or.tp/php/uploader/up/code061.c
0233デフォルトの名無しさん
2005/10/13(木) 01:50:18まじめにcに取りかかろうと思ってます。
0234デフォルトの名無しさん
2005/10/13(木) 01:52:150235デフォルトの名無しさん
2005/10/13(木) 02:02:46ほい、無だレスすまそ。これもだけど…。
0236デフォルトの名無しさん
2005/10/13(木) 02:55:20unsigned long fib(unsigned long n){
if(n<=1) return 1;
return fib(n-2)+fib(n-1);
}
こうだが...かなり遅い
0237デフォルトの名無しさん
2005/10/13(木) 04:26:14必要に「なるかもしれない」ことに心を奪われてはいけません。
このようなことを YAGNI と呼びます。
これは、「You aren't going to need it (将来必要に『ならない』)」の頭文字です。
明日のために今日作業したことが無駄になるより、明日必要なことは明日行えばよいのです。
(今日の金は、明日の金より価値があるということを覚えておいてください)
今与えられている課題に関する要求を満たすために必要なこと「だけ」をする、と言うことです。
必要かどうか未だ分からないものを作りこまない、を覚えておきましょう。
0238デフォルトの名無しさん
2005/10/13(木) 04:30:34初心者というのは得てして要求仕様そのものが満足されてないから問題なんじゃまいか
0239デフォルトの名無しさん
2005/10/13(木) 04:47:48w
0240デフォルトの名無しさん
2005/10/13(木) 10:06:09仕様とは密着しすぎでも乖離しすぎでも、悪い
#あぁYAGNIなんてぇ単語を言い出す奴がいるから脊髄反射レスしちまった
0241デフォルトの名無しさん
2005/10/13(木) 11:13:390242デフォルトの名無しさん
2005/10/13(木) 14:48:360243デフォルトの名無しさん
2005/10/13(木) 17:33:57なにそのDr.Mari○
0244デフォルトの名無しさん
2005/10/13(木) 20:19:37「拡張性を過度に考慮する」、「汎用性を過度に考慮する」のは時間と金の無駄です。
だけど、それは程度の問題です。
でも少なくとも上の問題でフラグを使うというのはありえません。というか、フラグなんて極力使わない方がよい。
「この程度ならフラグの方がわかりやすい」とか言ってる奴に限って独りよがりなプログラムを書く・・・
「そんな読みにくいプログラムわかるのは書いたお前だけだよ」というまわりの声に気付かない・・・
YAGNIなんて拡張性や汎用性を過度に考慮できるようになってから知ればいい。
0245デフォルトの名無しさん
2005/10/14(金) 02:49:210246144
2005/10/14(金) 17:48:03#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)++;
0247デフォルトの名無しさん
2005/10/14(金) 17:48:42return 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;
}
0248デフォルトの名無しさん
2005/10/14(金) 19:22:08textがスペースから始まった場合の動作がおかしいからまた怒られるよ。
0249デフォルトの名無しさん
2005/10/14(金) 19:29:50問題文の
>単語はスペースで区切られている
から先頭や最後にスペースは無いものと考えました
0250デフォルトの名無しさん
2005/10/14(金) 19:36:580251デフォルトの名無しさん
2005/10/14(金) 19:37:51フリーでもいいし、買ってきてもいい。
0252デフォルトの名無しさん
2005/10/14(金) 19:38:06参考書・ページを探す
0253デフォルトの名無しさん
2005/10/14(金) 19:39:27このスレのまとめはこちら
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
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%A5%D1%A1%BC%A5%C82%5D%5D
0254デフォルトの名無しさん
2005/10/14(金) 19:56:30>>252参考書買おうと思うんですけど、オススメなのありますか?
>>252さんがオススメなのでいいです。
他の人もお願いします。
0255デフォルトの名無しさん
2005/10/14(金) 20:32:58でも、もっと短く簡潔に書けますよ?
0256デフォルトの名無しさん
2005/10/14(金) 21:27:11(元の問題から外れるけど)やっぱり・・・
フィボナッチは再帰を使っちゃダメだ。
無駄が多すぎる。計算も遅い。
/*指定回数だけフィボナッチ数列を計算し、
出力するプログラム*/
#include <stdio.h>
int main(void)
{
unsigned long i, j, k;
int n, m;
printf("指定回数だけフィボナッチ数列を計算し出力します\n\
何回計算しますか? :");
0257デフォルトの名無しさん
2005/10/14(金) 21:28:06if(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;
}
0258デフォルトの名無しさん
2005/10/14(金) 21:28:41小数を入力したときの問題とか、
何回も計算できるようにループを付けたりとか、
桁あふれの部分とか、
機能を充実させて下さいな。
0259デフォルトの名無しさん
2005/10/14(金) 21:35:360260デフォルトの名無しさん
2005/10/14(金) 23:27:41んー、>>214は末尾再帰だから別に良いのでは?
常識的なコンパイラなら最適化かければ普通のループと同じで無駄もないし、計算も遅くならないし
0261デフォルトの名無しさん
2005/10/14(金) 23:29:510262デフォルトの名無しさん
2005/10/15(土) 00:02:00式は自然数の加算・減算。
どう?
0263デフォルトの名無しさん
2005/10/15(土) 00:39:31例えばSEND+MORE=MONEYを解くとか?
それだと手作業で解を得るのと総当りのプログラムのどっちが早いかなw
私としては、abcd * e = fghij を解いてみてもらいたいが。
0264デフォルトの名無しさん
2005/10/15(土) 00:43:530265デフォルトの名無しさん
2005/10/15(土) 00:45:19ちょっと趣向を変えて、ポインタじゃなくてインデックス変数を使ってプログラムを書いてみよう。
つまり、text[idx]とかidx++で文字列にアクセスする。*textとかtext++はしない。
練習にはいいかと。
0266デフォルトの名無しさん
2005/10/15(土) 02:22:06こんな感じでどうでしょうか?
式の長さはヌル文字含めて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;
}
/*
0267デフォルトの名無しさん
2005/10/15(土) 02:22:52int 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);
}
0268デフォルトの名無しさん
2005/10/15(土) 03:42:32unsigned 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)));
}
かるくハヤイ
0269ポポ素 ◆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の容量をオーバーする数字をいれたら
なんでこんなことになるの?
スルーで先に進んでいいのかな
0270デフォルトの名無しさん
2005/10/15(土) 10:51:15変数は型によって入る値に限界がある。
charは-128~127、shortは-32768~32767といった感じ。intでも入って10桁。
これを超えるとオーバーフロー(桁溢れ)が起こって全く違うの数値になる。
しかしもうポインタか。早さ的にもやる気が感じられるな。
0271デフォルトの名無しさん
2005/10/15(土) 10:53:07最大値を過ぎたってことは最小値の側になる、っちゅーことだね
・最大値を超えないように入力する
か
・もっと大きい整数を扱える型を使う(今時のコンパイラならlong longとか...)
・整数型をあきらめる(doubleとかにする)
しかないんだよね...
0272デフォルトの名無しさん
2005/10/15(土) 11:27:03今ぐぐってやったんだけど、なんか起動してくれない
0273デフォルトの名無しさん
2005/10/15(土) 11:31:350274252
2005/10/15(土) 11:41:08俺はやさしいCから始めた。絵付きの説明がしっかりしてて入門書としては最適だと思う。
読破した後は多少難い本もいけるから、独習Cとか個人の解説ページらへんが妥当かと。本格目指すならK&Rは必読。
ttp://www.amazon.co.jp/exec/obidos/ASIN/4320026926/
ーーーーーーーーーーーここから余談ーーーーーーーーーーー
大切なのは出来るだけ多くの本を読む事、読むだけでなくサンプルプログラムや練習問題を打つ事、ノート(テキスト)を作って大切な事を書いておく。
練習問題ならこのスレで問題出るし、過去のものはwikiに載ってる(>>5)
後は自分で何も見ずにプログラムを打つ事とか。乱数とか覚えると軽いゲームが作れるから
数当てゲーム製作→条件(当たり外れ・大小)作成→ヒント機能追加→CPU追加(思考ルーチン作成)
とやると意外と面白い。というか、俺がそれに熱中して時間を忘れた事がある。
それと最後。質問できる相手とか協力できる仲間を探す。
入門書なんて分からない内は投げてしまいがちだし、独りで黙々とやるのも寂しい。仲間を探して互いに協力しあうのが最良の勉強法(まあ、それが出来れば誰も苦労しないんだが…
それぞれ違う視点からモノ見れるから、ソースの書き方やバグ発見にはとても有効。そして何より、独りよがりの考えになりにくい。
ここは仲間意識とかそういうのは無い方だから、もし探すならメーリングリスト(ML)とかいいかも。いい所があったら俺も逝くわ。
0275デフォルトの名無しさん
2005/10/15(土) 11:45:32http://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
0276デフォルトの名無しさん
2005/10/15(土) 12:01:24私には、どちらかと言うと単なるリファレンスだと思います。
周辺知識の無いプログラミング初心者には難しすぎるし、
ある程度書けるようになってポインタとかも例外的な使い方を覚えれば、
わかりきったこともかなりあるし、「読む」ほどじゃないと思うんですよね。
0277デフォルトの名無しさん
2005/10/15(土) 12:01:590278ポポ巣 ◆Qgm8RFT0/.
2005/10/15(土) 12:03:05intの桁数をオーバーして入力したら
どうなるのかとおもって試したら
まったく違う数字がでたので、なんでこの数字に?と悩んでおりました
回答ありがとうございます!先生方!
この表示される数値に意味はないんよね?
オーーバーしたから変な数字になったって感じで
理解しておけばいいのかな
0279ポポ巣 ◆Qgm8RFT0/.
2005/10/15(土) 12:06:46ttp://www.borland.co.jp/cppbuilder/freecompiler/bcc55steps.html
ここ無料だよ
あたいはここのコンパイラつかっとる(^^)/
0280デフォルトの名無しさん
2005/10/15(土) 12:25:58基本的に意味は無い。
参考までに言っとくと、型の最大値を上回ると今度は桁の最小値に逝くようになってる。
例:short型に最大値の32767を代入、それに1を加えると最小値の-32768になる(初めから32768を代入しても結果は同じ
つまり、269の結果は↑の様な事を何度も繰り返して出てきた値
0281デフォルトの名無しさん
2005/10/15(土) 12:27:420282デフォルトの名無しさん
2005/10/15(土) 12:39:21ありがとうございます。今やってみたんですが、freecommandcompiler
ってやつですか?これ開こうとすると黒い画面が出てきて、一瞬にして
消えちゃうんですがなんでかわかります?ちなみに別のサイトからそこに行き着いて、
ユーザー登録なしでダウンロードしました
0283デフォルトの名無しさん
2005/10/15(土) 12:43:24使い方を調べるのも学ぶうちだ
誰かに質問する前にまずは自分で調べろ
0284デフォルトの名無しさん
2005/10/15(土) 12:50:070285デフォルトの名無しさん
2005/10/15(土) 13:23:490287デフォルトの名無しさん
2005/10/15(土) 13:30:530288デフォルトの名無しさん
2005/10/15(土) 14:15:060289デフォルトの名無しさん
2005/10/15(土) 14:57:12きっびしー。時間がさらさらと流れてゆくふーーー
>>287
おお!!なんですかこれは?黒い画面が出てきてかけそうな感じ!
これでいいの?これがコンパイラ???
0290デフォルトの名無しさん
2005/10/15(土) 15:00:08ちょっとすんげぇ簡単なプログラムさらしてくれない?
なんかホームページに書いてたコンパイルの方法やってもできない。
0291デフォルトの名無しさん
2005/10/15(土) 15:12:35これで
0292デフォルトの名無しさん
2005/10/15(土) 15:17:24KWSK
0293デフォルトの名無しさん
2005/10/15(土) 15:28:27同意。
プログラムの使い方も解らないレベルで言語の勉強をしても身に付かないと思われ。
>>289
もう少しぱちょこんの勉強をしてから出直した方がいい。
そのほうが最終的に近道だと思うぞ。
0294デフォルトの名無しさん
2005/10/15(土) 15:42:02でも、漏れもN88BASICからCを勉強しはじめたとき、
コンパイルやリンクのやり方とかよくわかんなかった。
そういうものの操作とプログラミング自体は、また別のような気がするから、
とにかく操作に詳しい入門書をよく読むことだよな。
コマンドプロンプトの使いかたもよくわからない人は、
HSPあたりから始めるのがよい気がする。
http://www.onionsoft.net/hsp/
0295仕様書無しさん
2005/10/15(土) 15:42:130296デフォルトの名無しさん
2005/10/15(土) 15:46:180297デフォルトの名無しさん
2005/10/15(土) 15:46:450298デフォルトの名無しさん
2005/10/15(土) 15:47:280299デフォルトの名無しさん
2005/10/15(土) 15:50:22そういう言葉使いをしていると本当に性根が腐りますよ。
これまでのすべての積み重ねが今のあなたなのですから。
0300デフォルトの名無しさん
2005/10/15(土) 15:59:080301デフォルトの名無しさん
2005/10/15(土) 15:59:37コマンドプロンプトがわからないからと言ってHSPを勧めるのもどうかと思う。
0302254
2005/10/15(土) 17:30:40それから読んでみますね。
しかし、結構たかいんですね。でも、買って見ますね。
友達にいってもやるって行ってくれそうに無いなぁ…。
そのときはここに居るみんなが友達だ!
0303デフォルトの名無しさん
2005/10/15(土) 17:31:55どうしても無理がある。
0304デフォルトの名無しさん
2005/10/15(土) 18:59:58漏れはCの初心者本は一切読んでない。
問題は多くの本を読むことではなく、如何に本から情報を漏れなく読み取るかだと思う。
つまり、一冊の本から読み取れる量が少ないからたくさん読まなければならないんでないか?
</余談>
0305デフォルトの名無しさん
2005/10/15(土) 19:03:41読んだ本教えて
0306デフォルトの名無しさん
2005/10/15(土) 19:33:35漏れは、猫でも分かるを買った。
0307デフォルトの名無しさん
2005/10/15(土) 19:56:0210年くらい前だけど、記述評論社のすぐわかるC/C++という本を読んで勉強した。
この一冊以外は入門書は読んでない。
この本、解りやすく書いてあるのはいいんだが、当時のPC-9801とボーランドの
Turbo Cにべったり依存した内容なので、あまり今の人には勧められない。方言が強くてね。
この本で覚えたことを当たり前だと思って組んでいたプログラムを他人に見せて
えらく驚かれた記憶があるよ。
#include <pc98.h>ってなんだよ、とかw
0308デフォルトの名無しさん
2005/10/15(土) 19:59:500309デフォルトの名無しさん
2005/10/15(土) 20:13:36いや、確かにぱちょこんも必要かもしれんが、大学の授業でいるからそうも言ってらんねんだ。
>>294Cが必要なんです。
コマンドプロンプトはわからないけどコンパイルのやり方ぐらいはちょっとはわかるんだ。
ただ、大学ってやつはなぜかマックだからウィンドウズじゃわかんねぇーんだよぉ。
マックにあたるターミナルがウィンドウズでどれなのか教えてよ。
周りの俺の友だちに負けたくないんだまじ頼む。
0310304
2005/10/15(土) 20:32:09>マックにあたるターミナル
それがコマンドプロンプト(DOSプロンプト)。若干乗りは違うが、まぁ似たもんだ。
#その違いが気になり始めたらCygwinをインストールすればいい。
>>305
Cの本で買ったのは、K&RとAsciiから出てたDOSプログラミングの本。
会社で拾い読みしたのが、藤原の翁の診断室にパズル本。
C++の本ではEffectiveC++のみ。
#勿論マニュアル、WebSiteは除く。
リクエストがあれば言語歴と書籍歴を纏めてもいいけど参考にはなりそうもないね。
0311デフォルトの名無しさん
2005/10/15(土) 21:02:18式を再帰処理していくって方向は合ってると思います。
もうちょっとエラー処理やら入力に自由が有ると良いけど。
あとは乗除算や括弧のサポートなんか入れていくと
面白くなっていきますよ。余裕有れば数学関数とかも。
この手問題はコンパイラ、インタプリタの基礎技術なんで
字句解析、構文解析、でググれば色々夢が広がるかと。
exprコマンドのソース読んでみるのも良いかと思います。
0312デフォルトの名無しさん
2005/10/15(土) 21:27:33> マックにあたるターミナルがウィンドウズでどれなのか教えてよ。
WindowsXPだったら、
「スタート」→「すべてのプログラム」→「アクセサリ」→「コマンドプロンプト」
で出てくる。
GUIしか知らない人は、意外と見つけにくいのかもw
0313デフォルトの名無しさん
2005/10/15(土) 21:59:59俺は、『Cの絵本』で今現在勉強中。
ただ、俺の場合は大学の講義の副読本だったから、全くの独学の人に薦められるかは分からん。
0314デフォルトの名無しさん
2005/10/15(土) 22:25:55あれ、そーなんだ?コンパイルしようとしたらできなかったから別物かと思った。
わかったもっぺんやってみるよ。ほんとうにありがとう!
0315デフォルトの名無しさん
2005/10/15(土) 22:28:470316デフォルトの名無しさん
2005/10/15(土) 22:36:24> あれ、そーなんだ?コンパイルしようとしたらできなかったから別物かと思った。
bccにパスが通ってないかもしれん。
とりあえずフルパスを書いて、
C:\borland\bcc55\Bin\bcc32 hogehoge.c
とかやってミソ。
0317デフォルトの名無しさん
2005/10/15(土) 22:55:12フルパスが入力される。もちろんどんなファイルでもできる。
0318デフォルトの名無しさん
2005/10/16(日) 00:01:00http://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
過去ログ
0319デフォルトの名無しさん
2005/10/16(日) 00:08:190320デフォルトの名無しさん
2005/10/16(日) 00:12:57うーわかんねぇ。すいませんせっかく教えてもらってんのに。
というわけで直接見てください。
一応本にあるとおりにやってみました
#include <stdio.h>
int main(void)
{
printf("bigmac\n");
return 0;
}
をexamine.cで保存
そしてコマンドプロンプトで
gcc -o examine examine.c
ってうってコンパイルしようとしたら
gccは内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ
ファイルとして認識されていませんってでました。なんのこっちゃ抹茶に紅茶
0321デフォルトの名無しさん
2005/10/16(日) 00:16:30の部分を
C:¥borland¥bcc55¥Bin¥bcc32
に置き換えてやってみれ
0322デフォルトの名無しさん
2005/10/16(日) 00:23:250323デフォルトの名無しさん
2005/10/16(日) 00:28:060324デフォルトの名無しさん
2005/10/16(日) 00:29:14大変だな、おい。
0325デフォルトの名無しさん
2005/10/16(日) 00:30:190326デフォルトの名無しさん
2005/10/16(日) 00:31:58オマイさんはいったい何処にbccをインスコしたのかと
0327デフォルトの名無しさん
2005/10/16(日) 00:36:10C:\borland\bcc55\Bin\bcc32.exeってファイルがあるのかどうかを確認したほうがいいな
0328デフォルトの名無しさん
2005/10/16(日) 00:37:00ファイルの確認もできない悪寒
0329304
2005/10/16(日) 00:38:39世代的にパソコンと同時にワンボードマイコンに触れた世代なもんで、
cをやる頃には何十人もの人間をダンプリストと格闘させる原因を作る側にはなっていた。
だがしかし、当時basicやアセンブラの初心者本なんて存在さえしていなかった。
0330デフォルトの名無しさん
2005/10/16(日) 00:45:470331デフォルトの名無しさん
2005/10/16(日) 00:54:400332デフォルトの名無しさん
2005/10/16(日) 00:59:170333デフォルトの名無しさん
2005/10/16(日) 01:07:16たしかハマコーの地元にある寺の歌だな
0334デフォルトの名無しさん
2005/10/16(日) 01:09:30どうかプログラムのつくりからを一から簡単に教えてくれる人はいませんか?
いたら救いの手を差し伸べてください
0335デフォルトの名無しさん
2005/10/16(日) 01:41:04>>318
0336デフォルトの名無しさん
2005/10/16(日) 02:36:23ぐぐってどこかいいサイト見つけなよ
0337デフォルトの名無しさん
2005/10/16(日) 04:06:54wikiの問題ってそこらの教本読んだだけでもできる問題なのかな?
もしそうならやる気出てくる
0338デフォルトの名無しさん
2005/10/16(日) 04:23:130339デフォルトの名無しさん
2005/10/16(日) 06:19:17初心者と銘打ってMFCやSTLがいきなりでてる本とかあるし
0340デフォルトの名無しさん
2005/10/16(日) 07:55:05#CとC++の区別ができてない書籍だと言うのなら話は別だが。
0341デフォルトの名無しさん
2005/10/16(日) 08:34:47とんくす
とりあえず本1冊終わらせてみる
0342デフォルトの名無しさん
2005/10/16(日) 10:10:440343デフォルトの名無しさん
2005/10/16(日) 10:48:43マジレスすると、だいたいの場合コメント(追記・チラ裏)という意味。
0344デフォルトの名無しさん
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 -----------------------
↑データの形式を示したいだけであって、それ以上の意味はない。どれも読んだことないし。
0345デフォルトの名無しさん
2005/10/16(日) 11:37:330346デフォルトの名無しさん
2005/10/16(日) 11:39:040347デフォルトの名無しさん
2005/10/16(日) 11:56:55ttp://www.freeml.com/
↑ここでC初心者のML作ってみようと思うんだがどうだろう。
最近のここは問題のレベルも高いし、せいぜいあって他の誰かの解答とそれのチェック程度しか無いから学べる事が少ない、つまり、結局は入門書に頼りがちになる。
時折為になる情報は出てくるが、それ以外はほとんど勉強になってないのが現状だと思う。
もちろん入門書での独学は必須。それと平行して質問や返答・雑談を行い、C勉強の為の良い環境を作る。要は「ここ」に仲間意識をプラスしたものと考えればいい。
一つ言いたいのは、この提案はこのスレを否定するものではないという事。
前スレと比べて明らかに敷居の高くなったこの現状に付いていけない初心者の為のものであり、仲間なんて必要無い、参考書とこのスレで十分だという奴は対象にしていない。また、ここの内容にもついていけるならMLと平行して使える。
本気でやろうという奴、聞いてばかりでなく自分で調べようとする意欲のある奴は挙手頼む。
0348デフォルトの名無しさん
2005/10/16(日) 12:55:32教えてくれたら君は幸せになれるよ
>>326
え、インスコ????
>>327-328
えっと、ファイルの確認ってlsでいいんですか?これはマック限定??
だめだなさすがにすごい迷惑な気がしてきた。もう少し勉強してからきまつね(´・ω・`)
0349伝説新人タクシ
2005/10/16(日) 17:11:21bcc32.exe を検索して、コマンドプロンプトにドラッグアンドドロップ。
半角スペースを入力。またコマンドプロンプトにプログラムを書いた
ファイルをドラッグアンドドロップ。そして、Enter
これでとりあえず動くはずだから、参考まで。
手入力で走らせられたほうが後々いいんだけどね。
0350デフォルトの名無しさん
2005/10/16(日) 20:31:560351デフォルトの名無しさん
2005/10/16(日) 23:53:04だから、今の段階は前スレとここまでのレスを追いかけて来いって事だ
俺の始めたタイミングと違うからすれ立てる/ML作るじゃ知識が分散するだけ
どうせこのスレはパート4位で自然消滅するから、その後また1からやり直せばよい
初心者は何時になったって居なくならないんだから
0352デフォルトの名無しさん
2005/10/16(日) 23:57:10俺は、プログラムってどんなのか興味もったから。
0353デフォルトの名無しさん
2005/10/17(月) 00:20:15マイコンのプログラム書きたくて習ってる途中。
0354デフォルトの名無しさん
2005/10/17(月) 00:40:25pascalのコンパイラが手に入らなかったからかな
0355デフォルトの名無しさん
2005/10/17(月) 00:52:000356デフォルトの名無しさん
2005/10/17(月) 00:58:21そこらへんはどうしたら良いのでしょうか?教えてください
0357デフォルトの名無しさん
2005/10/17(月) 01:08:45本当にそんなメッセージが出たのか?
0358デフォルトの名無しさん
2005/10/17(月) 01:24:37本当は対応してませんでした
0359359 ◆q6iymjq9dk
2005/10/17(月) 13:17:43開発環境:VC++6.0で
0360359 ◆q6iymjq9dk
2005/10/17(月) 13:19:20これでいいのかな?
#include<stdio.h>
int main(void)
{
printf("HelloWorld\n");
return 0;
}
0361デフォルトの名無しさん
2005/10/17(月) 13:22:100362デフォルトの名無しさん
2005/10/17(月) 13:32:080363359 ◆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;
}
0364デフォルトの名無しさん
2005/10/17(月) 13:50:410365359 ◆q6iymjq9dk
2005/10/17(月) 13:54:22来ます。
0366デフォルトの名無しさん
2005/10/17(月) 13:54:470367デフォルトの名無しさん
2005/10/17(月) 13:57:26それだと変数bのアドレスを渡してることになるよ。
scanfとprintfの違いに注意。
0368デフォルトの名無しさん
2005/10/17(月) 14:00:02それがわかってないと、>>366の指摘って
気づかないことあるよね。
0369359 ◆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何ですか?
0370デフォルトの名無しさん
2005/10/17(月) 14:03:580371デフォルトの名無しさん
2005/10/17(月) 14:04:22そうですね。
0372デフォルトの名無しさん
2005/10/17(月) 14:04:45for(a=1;a<51;a++)
より、
for(a=1;a<=50;a++)
のほうが、「1から50まで」ってわかりやすいと思うけど、どう?
0374デフォルトの名無しさん
2005/10/17(月) 14:14:380376デフォルトの名無しさん
2005/10/17(月) 17:44:28ファイルから読み込んだ数字は配列に入れるべきか、
ポインタを使うべきなのか、
どちらの方がいいのでしょうか?
0377デフォルトの名無しさん
2005/10/17(月) 17:48:180378デフォルトの名無しさん
2005/10/17(月) 17:51:04そうですね、とりあえず両方やってみます!
0379デフォルトの名無しさん
2005/10/18(火) 11:35:08どゆこと?もちっと詳しく
配列だと大きさをコンパイル前に決めておく必要があるけど、
大きさを実行時に決めて動的に確保する、ってこと?
0380デフォルトの名無しさん
2005/10/18(火) 12:17:25unsigned long のM,Nを入力し、0〜Nの中から重複しないM個の整数を表示するプログラムを作れ
0381デフォルトの名無しさん
2005/10/18(火) 12:47:57よくわかりません。もちっと詳しく
0382デフォルトの名無しさん
2005/10/18(火) 16:28:04例えば、m=5、n=3000のときだと 0から3000の範囲の5個の重複しないランダムな数字、
0, 12, 543, 1015, 2020 みたいなの表示しろってことでしょう。
0383デフォルトの名無しさん
2005/10/18(火) 16:56:28わざとか?
0384デフォルトの名無しさん
2005/10/18(火) 17:35:524294967295個以上もの管理テーブルでも作れって?
0385デフォルトの名無しさん
2005/10/18(火) 17:38:260386デフォルトの名無しさん
2005/10/18(火) 18:18:320387デフォルトの名無しさん
2005/10/18(火) 18:46:17の値域に写像して取得して重複しないように5個取れば良いような気が
ところで昇順にしないと×?
0388デフォルトの名無しさん
2005/10/18(火) 18:57:100389デフォルトの名無しさん
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 )
0390間違えた^^;
2005/10/18(火) 19:30:41int 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 )
0391デフォルトの名無しさん
2005/10/18(火) 19:37:36p_ki[0][1] = &ki[0][1];
・
・
これを全て書けばいいんだろうけど、何か良い方法ないんかな??
0392デフォルトの名無しさん
2005/10/18(火) 19:38:170393デフォルトの名無しさん
2005/10/18(火) 19:46:264×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]を参照
0394デフォルトの名無しさん
2005/10/18(火) 19:47:12p_ki = &ki[0][0];
ね
0395391
2005/10/18(火) 19:56:50わかりやすく、そして丁寧な解説をありがとうございます。
int (*p_ki)[4][4]; と*(p_ki + 2*4 + 2)を参考にさせて頂いております。
0396デフォルトの名無しさん
2005/10/18(火) 20:34:280397デフォルトの名無しさん
2005/10/18(火) 21:45:51これが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;
0398オーイオチャ
2005/10/18(火) 21:50:320399デフォルトの名無しさん
2005/10/18(火) 21:55:15それから癖になっちゃってやめられない
0400デフォルトの名無しさん
2005/10/19(水) 01:09:190401デフォルトの名無しさん
2005/10/19(水) 01:28:350402デフォルトの名無しさん
2005/10/19(水) 01:30:250403デフォルトの名無しさん
2005/10/19(水) 01:54:370404ポケコソ
2005/10/19(水) 02:29:33void 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++);
}
}
0405デフォルトの名無しさん
2005/10/19(水) 02:33:56はぁ?そんなコトスル香具師はまぬけwwww
テーブル無しでできる (ヒント:残りR個の中からS個選ぶにはS/Rの確率で)
どうしてもどうしてもどうしてもテーブルが欲しいならビットという手もあるが...
0406デフォルトの名無しさん
2005/10/19(水) 03:31:460407デフォルトの名無しさん
2005/10/19(水) 03:50:50できた
#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;
}
0408デフォルトの名無しさん
2005/10/19(水) 04:18:39>0, 12, 543, 1015, 2020 みたいなの表示しろってことでしょう。
3000 ← これを入力
5 ← これを入力
0
622772474
849156758
1260379561
1592777631
...orz
0409デフォルトの名無しさん
2005/10/19(水) 04:59:44#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文使ってるけど
0410デフォルトの名無しさん
2005/10/19(水) 08:03:11ホームラン級の馬鹿だな
0411デフォルトの名無しさん
2005/10/19(水) 10:50:10俺に答えを教えてくれ
0412デフォルトの名無しさん
2005/10/19(水) 17:58:01それを完全にシャッフルする。
先頭から m 個取る。
というのを考えたが、n が大きいとつらいな。
0413デフォルトの名無しさん
2005/10/19(水) 20:04:14どなたか教えてくださいm( __ __ )m
�@円柱の体積を求めるプログラムを作りなさい
ただし半径と高さはキーボードから入力する(変数の型をfloatにする)
�A時速(km/時)をキーボードから入力し、時速(m/秒)に変換して出力するプログラム作りなさい
(変数の型をfloatにする)
以上の2問でつ
お願いします
0414デフォルトの名無しさん
2005/10/19(水) 20:07:360415デフォルトの名無しさん
2005/10/19(水) 20:09:15まさか計算式までわからないとは言わないよな?
0417伝説新人タクシ
2005/10/19(水) 20:55:580418デフォルトの名無しさん
2005/10/19(水) 21:35:13もう絶対レスしないでね(`・ω・´)
0419デフォルトの名無しさん
2005/10/19(水) 21:35:390420デフォルトの名無しさん
2005/10/19(水) 22:01:150421デフォルトの名無しさん
2005/10/20(木) 02:28:22unsigned 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;
}
0422デフォルトの名無しさん
2005/10/20(木) 03:29:58正直感動した
勉強になった
ありがとう
なんでそれだけの頭もってながら、
人を煽って優位に立つことでしか快感を覚えられないくだらない人間になったんだ?
0423デフォルトの名無しさん
2005/10/20(木) 03:42:24嫌な癖があるのさ…
0424デフォルトの名無しさん
2005/10/20(木) 10:11:310425デフォルトの名無しさん
2005/10/20(木) 10:39:24コンソールの簡易スレッドビューア作ることにした
渡されたスレッドのurlに接続して
レスを取得してくるだけで良いんだけど
さっぱりワカンネ。
0426デフォルトの名無しさん
2005/10/20(木) 10:51:570427デフォルトの名無しさん
2005/10/20(木) 12:08:09C言語を覚えたいのか、ネットワークプログラムをしたいのかによるが
単純にネットワークプログラムしたいだけならその程度の物はJavaで書いた方が楽
0428デフォルトの名無しさん
2005/10/20(木) 12:11:41C言語を覚えたいんだけど
偏っているかな?
もうちょいバランス良く覚えられて、面白い物があれば良いんだけど…
0429デフォルトの名無しさん
2005/10/20(木) 13:38:27それならこのスレの>>28-でも見てくれ
0430デフォルトの名無しさん
2005/10/20(木) 18:52:52Cはあまり向いてないの?
Windowsネイティブで作りたいのでC+winsockで勉強中です
他に選択肢があれば教えてください
0431デフォルトの名無しさん
2005/10/20(木) 19:19:14サーバならCで書くが、クライアントなら何でもいいよ
0432デフォルトの名無しさん
2005/10/20(木) 19:22:23だからネットワークに向いてないかといったら、全然そんなことなくて
インターネットなんかは元々Cで開発されてきたわけだから
0433デフォルトの名無しさん
2005/10/20(木) 22:52:34C言語とは何の関係もないが、それ便利だよ。頑張って作れ。
私は、Perl+(wget+nkf+jless)で作ったのを使ってる。
等幅フォントのターミナルで見てるから、AAはちゃんと見れないけど、
プログラム板ではAAなんかどうでもいいし、プログラムは見やすい。
(書き込むときは「おちゅーしゃ」を起動してます。書き込み機能書けよな>自分)
0434デフォルトの名無しさん
2005/10/21(金) 01:21:280435デフォルトの名無しさん
2005/10/21(金) 01:43:59できましたー!!
#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;
}
0437デフォルトの名無しさん
2005/10/21(金) 08:37:00C言語で書いて来い
0438デフォルトの名無しさん
2005/10/21(金) 08:47:250439デフォルトの名無しさん
2005/10/21(金) 09:09:40せめて380の仕様内の事が動くソース貼ってくれ・・・
0440デフォルトの名無しさん
2005/10/21(金) 14:52:02動くつもりでうぷした奴にそんな事を言っても無駄だろうよ
0441デフォルトの名無しさん
2005/10/22(土) 19:57:32#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;
}
0442デフォルトの名無しさん
2005/10/22(土) 20:09:42http://oku.edu.mie-u.ac.jp/~okumura/algo/
0443デフォルトの名無しさん
2005/10/22(土) 20:22:12スーパーメトロイドを考えた人は凄い。あのクオリティはヤバイ。
helloworldしかできないけど、メトロイドクローンを作ってみたい。
0444デフォルトの名無しさん
2005/10/22(土) 22:37:59アクション系はゲームの中でもかなり難い分類だからな。
俺もまだ未熟だが、その手の物は作ってみたいと思ってる。
どうでもいいが、デカいプログラム一人で作るには結構な時間と労力がいるみたいだな。
本気でやるなら仲間ぐらい作っといた方がいいかも。
0445デフォルトの名無しさん
2005/10/22(土) 22:39:49当たってもとの場所に戻すだけだと隙間できるじゃん
あれがうまくいかねー
0446デフォルトの名無しさん
2005/10/22(土) 22:45:10基本は座標と方向ベクトルと衝突判定
背景との当たり判定は仮想画面のオブジェクト配置を当たり判定に使うと衝突判定で手抜きが出来る
0447デフォルトの名無しさん
2005/10/23(日) 01:05:31segmentation 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;
}
0448デフォルトの名無しさん
2005/10/23(日) 01:11:59"いち たす に は"とか入力すると"さん"と表示するプログラム
数字は"れい","いち","に","さん","よん","ご","ろく","なな","はち","きゅう"
取り敢えず1桁の加減算ができればいいか "たす","ひく"
[応用]
・加減乗除に対応
・他に"し"とか"しち"とか"ひ","ふ","み"とか複数パターンの入力に対応できる
・2桁以上 "じゅう" とかも使えるようにする
0449デフォルトの名無しさん
2005/10/23(日) 01:21:35あどれすを渡さなきゃ
0450デフォルトの名無しさん
2005/10/23(日) 01:22:31× scanf("%f", hour);
○ scanf("%f", &hour);
0451447
2005/10/23(日) 01:30:58精進します。
0452デフォルトの名無しさん
2005/10/23(日) 13:25:48ウィンならturbodebagger
unixならlintでエラー判るだろ
0453デフォルトの名無しさん
2005/10/23(日) 14:06:30>unixならlintでエラー判るだろ
lintはねぇ。「出力が多すぎて全部見る気がしない」という問題点があってねぇ。
この発言をする人間は「lintクリーンなコードを書く習慣を身に付けている」という資格が必要だ
と思うのだけど。どうか?
0454デフォルトの名無しさん
2005/10/23(日) 16:15:100455デフォルトの名無しさん
2005/10/23(日) 21:25:00再起つかわず
0456デフォルトの名無しさん
2005/10/23(日) 21:30:25ループで計算する。
0457デフォルトの名無しさん
2005/10/23(日) 21:31:54scanf("%d", &n);
for(i=result=1;i<=n;i++) result*=i;
0458デフォルトの名無しさん
2005/10/23(日) 21:35:51おもしろそうですね
勝手にやってもいいんですかね?
0459デフォルトの名無しさん
2005/10/23(日) 21:46:03具体的に頼む
0460デフォルトの名無しさん
2005/10/23(日) 21:48:48>>457でOKじゃね?何が問題なんだ?
0461デフォルトの名無しさん
2005/10/23(日) 21:50:490462デフォルトの名無しさん
2005/10/23(日) 21:51:390463デフォルトの名無しさん
2005/10/23(日) 21:52:300464デフォルトの名無しさん
2005/10/23(日) 21:54:24揚げ足取りだと思うけど、intだと実際問題使い物にならないと思うが・・・
0465デフォルトの名無しさん
2005/10/23(日) 21:55:110466デフォルトの名無しさん
2005/10/23(日) 21:55:23longにしろってこと?
0467デフォルトの名無しさん
2005/10/23(日) 21:59:22どのぐらいの数まで階乗を求めたいんだ?
それによって、用いる型が変わると思うがね。
>>466
大差なし。つか、longって・・・俺の環境だとintと同じサイズですが……
0468デフォルトの名無しさん
2005/10/23(日) 22:00:22"いちたすいちは"
"いちたすには"
"いちたすさんは"
・・・・
・・・・
"きゅうたすきゅうは"
"いちひくいちは"
"いちひくには"
・・・・
・・・・
・・・・
"きゅうひくきゅうは"
に対応する答えを全部用意しておくっていうのはダメですよね
0469457
2005/10/23(日) 22:01:25反省はしていない。
0470デフォルトの名無しさん
2005/10/23(日) 22:02:54結合するんだな!!
だからマクロをつかうんですよね?先生!
0471デフォルトの名無しさん
2005/10/23(日) 22:05:43まぁ俺もそうだけど、俺の少ない脳味噌じゃそれくらいしか考えられなかったんで。
0472デフォルトの名無しさん
2005/10/23(日) 22:21:30もしかしたらループの方向を逆にした方がいいかも知らん。
0473デフォルトの名無しさん
2005/10/23(日) 22:42:500474デフォルトの名無しさん
2005/10/23(日) 23:05:020475デフォルトの名無しさん
2005/10/24(月) 02:31:01>465
0476デフォルトの名無しさん
2005/10/24(月) 06:55:3013! = 6227020800
2^31 = 2147483648
>>457の実装で表示がおかしくなるのは当たり前。
だが>>455は非再帰での階乗算出法を問うているのだから
有効桁数は問題ではない。
0477デフォルトの名無しさん
2005/10/24(月) 07:12:17#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;
}
0478デフォルトの名無しさん
2005/10/24(月) 07:21:52正の数 4.940656458412465×10の-324乗〜1.797693134862316×10の308乗
負の数 -1.797693134862316×10の308乗〜-4.940656458412465×10の-324乗
2147483648以上の数値を扱いたければdouble使っとけ。>>455
0479デフォルトの名無しさん
2005/10/24(月) 21:51:58>>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;
}
なぜかコンパイルできない・・・
0480デフォルトの名無しさん
2005/10/24(月) 21:55:43#include
0481デフォルトの名無しさん
2005/10/24(月) 21:56:09include<stdio.h>
から
#include <stdio.h>
にしましょ〜
0482デフォルトの名無しさん
2005/10/24(月) 22:23:18エラーメッセージを貼りましょう。
0483デフォルトの名無しさん
2005/10/24(月) 22:40:30あ、そーだ。ほかになにか教えてください。
もしかしてプリントFじゃないですか?にしても書き方がわからないんですが
0484デフォルトの名無しさん
2005/10/24(月) 22:42:200485デフォルトの名無しさん
2005/10/24(月) 23:10:54それ位で人を頼るな!そんなんじゃ上達しないぞ!自分の頭を使え!
目的を明白にしろ!方法を考えろ!分らなきゃ調べろ!
エラーメッセージを見ろ!参考書片手に文法間違えてないか確認しろ!
単位が欲しいだけなら誰かのコピーしろ(lol)
0486デフォルトの名無しさん
2005/10/24(月) 23:21:49まずお前が落ち着k
0487デフォルトの名無しさん
2005/10/24(月) 23:39:49いや、ごめんまじわかんねぇんだ。頼むから教えて。
>>457が書いてくれた文の意味はわかるんだけど、それだけになんで実行できないのか
わかんない。ほんとお願い!
0488デフォルトの名無しさん
2005/10/24(月) 23:46:270489デフォルトの名無しさん
2005/10/24(月) 23:48:16どこが?
>>487
>>482
0490デフォルトの名無しさん
2005/10/24(月) 23:51:09どこがまずいんだ?
単に1行目の#がないだけだろ
0491デフォルトの名無しさん
2005/10/24(月) 23:54:50どこに出力されるんだろう・・・
0492デフォルトの名無しさん
2005/10/24(月) 23:56:21二重代入は何も問題ない。
result=1が行われた後にi=resultが行われる。
0493デフォルトの名無しさん
2005/10/24(月) 23:57:07俺はそう理解してた
0494デフォルトの名無しさん
2005/10/25(火) 00:00:130495デフォルトの名無しさん
2005/10/25(火) 00:04:201、文字列を入力し、文字列の長さを調べるコードを作成
2、文字列を入力し、文字列にいくつ「a」の文字が含まれるかを調べるコードを作成
3、文字列を入力し、文字列中の「a」という文字を「b」に置き換えるコードを作成
いずれもstdio.h以外のヘッダを使用しないで作る事
0496デフォルトの名無しさん
2005/10/25(火) 00:52:17キーボードからひらがなを入力する方法が分かりません
DOS窓で半角英数を入力する方法しか分かりません
0497デフォルトの名無しさん
2005/10/25(火) 00:58:39Alt+半角全角キーじゃね?
0498デフォルトの名無しさん
2005/10/25(火) 01:01:30できました ありがとう
0499デフォルトの名無しさん
2005/10/25(火) 01:02:390500デフォルトの名無しさん
2005/10/25(火) 01:04:140501デフォルトの名無しさん
2005/10/25(火) 01:09:160502デフォルトの名無しさん
2005/10/25(火) 04:08:06#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;
}
0503デフォルトの名無しさん
2005/10/25(火) 07:26:17#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;
}
0504デフォルトの名無しさん
2005/10/25(火) 07:30:37#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;
}
0505デフォルトの名無しさん
2005/10/25(火) 07:35:52空気嫁
0506デフォルトの名無しさん
2005/10/25(火) 07:48:20先生!質問です
関数の中で文字を置換する方法がわからないので教えてください
#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;
}
0507デフォルトの名無しさん
2005/10/25(火) 07:54:31そこでコケてるかどうかは別にして常識として
char *buf="an an an tottemo daisuki doraemon.";
↑
これだと書き換え可能であることが保障されない。
文字列定数へのポインタという意味になる。
正しくはこう。
char buf[] = "an an an tottemo daisuki doraemon.";
bufはchar型配列でmain関数上の自動変数であり書き換えが可能。
配列長は文字列幅によってコンパイル時に自動的に設定される。
0508デフォルトの名無しさん
2005/10/25(火) 08:03:51うまくいきました
ありがとうございます
0509デフォルトの名無しさん
2005/10/25(火) 10:03:121)プログラムに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 ) を返すものとする.
0510デフォルトの名無しさん
2005/10/25(火) 10:07:34学ぶ気が無い奴がどうしてこのスレに?
0511デフォルトの名無しさん
2005/10/25(火) 10:12:58宿題スレ逝け。まあ一応打ってはみるが。
0512デフォルトの名無しさん
2005/10/25(火) 12:19:57めちゃ簡単じゃんwww
0513デフォルトの名無しさん
2005/10/25(火) 17:06:07馬鹿だなー。
「この問題を解いていただけませんか」じゃなくて、「問題を出してやろう」と言うんだよ。
あとは問題文を如何にも宿題なその文章からもっと柔らかい自分で考えた文章にする。
そうすりゃ誰かが解いたかもしれないだろ?
でも一番簡単なのは適当な入門本を買って軽く勉強することだよ。
解いてもらったって、今回は良くても次からは問題の難易度も上がっていくのに対応できないっしょ。
0514デフォルトの名無しさん
2005/10/25(火) 22:15:29#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);
}
0515デフォルトの名無しさん
2005/10/25(火) 22:16:00sum=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;
}
0516デフォルトの名無しさん
2005/10/25(火) 22:18:40課題を隅までよく読みましょう。
0517デフォルトの名無しさん
2005/10/25(火) 22:26:57#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);
}
0518デフォルトの名無しさん
2005/10/25(火) 22:27:27sum=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;
}
0519デフォルトの名無しさん
2005/10/25(火) 22:34:04未だ未だw
0520デフォルトの名無しさん
2005/10/25(火) 22:38:41ヽ(`Д´)ノ 降参
0521デフォルトの名無しさん
2005/10/25(火) 22:42:060522デフォルトの名無しさん
2005/10/25(火) 22:42:39それ問題と違う。
0523デフォルトの名無しさん
2005/10/25(火) 22:44:40> if (!(m>=0 || m<=59))
この論理式を日本語で書き直して見ましょう。
0524デフォルトの名無しさん
2005/10/25(火) 22:45:02面白杉
0525デフォルトの名無しさん
2005/10/25(火) 23:20:20#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;
}
0526デフォルトの名無しさん
2005/10/25(火) 23:23:12int 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;
}
0527デフォルトの名無しさん
2005/10/25(火) 23:27:23初っ端からerror出るじゃねえかw
0528デフォルトの名無しさん
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);
}
0529デフォルトの名無しさん
2005/10/25(火) 23:45:29int 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;
}
0530デフォルトの名無しさん
2005/10/25(火) 23:47:13問題をよく読め。
「プログラムに..与える」って書いてあるだろ
0531デフォルトの名無しさん
2005/10/26(水) 00:33:59#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;
}
ふざけすぎ?
0532デフォルトの名無しさん
2005/10/26(水) 01:19:24#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;
}
こんな感じで良いのかな。
0533デフォルトの名無しさん
2005/10/26(水) 03:09:20#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;
}
0534デフォルトの名無しさん
2005/10/26(水) 05:15:59#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];
}
0535デフォルトの名無しさん
2005/10/26(水) 05:17:02{
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);
0536デフォルトの名無しさん
2005/10/26(水) 05:17:32b=jap2int(pToken);
if (keisan==0)
kekka=a+b;
else if (keisan==1)
kekka=a-b;
printf("%s\n", int2jap(kekka));
return EXIT_SUCCESS;
}
0537デフォルトの名無しさん
2005/10/26(水) 12:06:39>>509の正解は
>>525>>529>>531-532だけ
0538デフォルトの名無しさん
2005/10/26(水) 12:13:46どう違うの?
0539デフォルトの名無しさん
2005/10/26(水) 12:25:31「コマンドラインから与える」という意味なら>>526も合っているようだが?
0540デフォルトの名無しさん
2005/10/26(水) 12:31:05コンピュータ業界はダメになるんだよな。
ここはやはりきちんと与える方法の定義を引き出さずに回答したらすべてNGにするくらいで無いと
0541デフォルトの名無しさん
2005/10/26(水) 12:47:520542デフォルトの名無しさん
2005/10/26(水) 12:52:210543デフォルトの名無しさん
2005/10/26(水) 13:01:150544デフォルトの名無しさん
2005/10/26(水) 13:35:30ググったらいろいろ見つかるんだけど、どのサイトがわかりやすいか教えてください。
0545デフォルトの名無しさん
2005/10/26(水) 13:40:47つhttp://kmaebashi.com/programmer/pointer.html
>>543
「ソースばっかり」っていってるのにさらにまたソースを出せと?
0546デフォルトの名無しさん
2005/10/26(水) 13:42:200547デフォルトの名無しさん
2005/10/26(水) 13:42:26サンクス
やっぱり結構な分量あるんですね。とりあえずがんばってみます。
0548デフォルトの名無しさん
2005/10/26(水) 13:58:24>545のページは初心者向けでないばかりか、誤解を招きかねない表現も含まれるのでお勧めできない。
0549デフォルトの名無しさん
2005/10/26(水) 14:02:230550デフォルトの名無しさん
2005/10/26(水) 14:10:250551デフォルトの名無しさん
2005/10/26(水) 14:13:290552デフォルトの名無しさん
2005/10/26(水) 16:41:01そして、キャストするときの定義で、
int *
とかやるときと、ポインタの指し示すデータを見る演算子
*
が、別物だということがわかると、だいたい意味がわかってくる。
漏れ自身、それがわかってから、やっと使えるようになった。
0553デフォルトの名無しさん
2005/10/26(水) 16:42:120554デフォルトの名無しさん
2005/10/26(水) 16:44:43Cは他の言語じゃやっちゃいけない事がポインタ使って出来てしまう所が良い所でも有り悪い所でもある
0555デフォルトの名無しさん
2005/10/26(水) 20:14:040556デフォルトの名無しさん
2005/10/26(水) 20:15:460557デフォルトの名無しさん
2005/10/26(水) 20:23:010558デフォルトの名無しさん
2005/10/26(水) 20:23:41メモリマップドIOとか
0559デフォルトの名無しさん
2005/10/26(水) 20:35:250560デフォルトの名無しさん
2005/10/26(水) 21:56:520561デフォルトの名無しさん
2005/10/26(水) 22:01:10実も仮想もC言語には関係ねえよ
0562デフォルトの名無しさん
2005/10/26(水) 22:24:12実行環境がどうなのかは関係ないからな
0563デフォルトの名無しさん
2005/10/26(水) 22:46:460564デフォルトの名無しさん
2005/10/26(水) 23:44:37配列(10)を作成、それに値を入力し別の関数で合計を求め、戻り値を返し出力
0565デフォルトの名無しさん
2005/10/26(水) 23:45:210566デフォルトの名無しさん
2005/10/27(木) 00:01:06まいりました。ここでいただいたアドバイスをそのまま使ってプログラミングしてみた
のですが、どの数字を入れても
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;
}
0567デフォルトの名無しさん
2005/10/27(木) 00:01:550568デフォルトの名無しさん
2005/10/27(木) 00:10:13ありがとう!ほんとありがとう!!
でもこれ50とか計算できない・・・どうすれば?
0569伝説新人タクシ
2005/10/27(木) 00:34:59起こしたんだろ。int が扱える範囲を超えた。
0570デフォルトの名無しさん
2005/10/27(木) 00:38:34多倍長整数はC++のほうがいいね。
0571伝説新人タクシ
2005/10/27(木) 00:53:070572デフォルトの名無しさん
2005/10/27(木) 01:07:38ちなみに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整数使っても表現不可能だろ。
0573デフォルトの名無しさん
2005/10/27(木) 01:31:07#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;
}
0574デフォルトの名無しさん
2005/10/27(木) 01:31:39{
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;
}
0575伝説新人タクシ
2005/10/27(木) 12:33:19AとBの戦闘。
それぞれのライフをA_HP,B_HPとする。
どちらかのライフがなくなるまで実行する。
次のコマンドを選択させる。攻撃かなにもしない。
さて、どのように書く?
また、次のターンのダメージを軽減する「防御」コマンドの追加。
0576伝説新人タクシ
2005/10/27(木) 12:37:08商品の代金を与えるとお札、ないしコイン枚数が最少となる自作関数。
0577デフォルトの名無しさん
2005/10/27(木) 13:17:410578デフォルトの名無しさん
2005/10/27(木) 13:18:450579伝説新人タクシ
2005/10/27(木) 13:40:36短く書いたんだが、以下>>575を書き直す。
AとBが戦闘をする。AとBは交互に行動する。
行動の内容は選択を促すことで選ぶ。
その行動には、「攻撃」と「なにもしない」があり、
毎ターンどちらかを1回行動する。
この行動選択はどちらかのライフがなくなるまで選択を促す。
このAとBそれぞれのライフはA_HP, B_HP に保持する。
また、次のターンに相手の「攻撃」によって与えられるダメージを
無効ないし半減する「防御」行動を追加する。
0580デフォルトの名無しさん
2005/10/27(木) 13:56:300581デフォルトの名無しさん
2005/10/27(木) 14:48:23伝説になってよかったな( ^ω^)
0582デフォルトの名無しさん
2005/10/27(木) 22:09:46VCもlong longだ。ただしVC7以降。
0583デフォルトの名無しさん
2005/10/27(木) 22:22:53HPはどれぐらい減るの?
0584デフォルトの名無しさん
2005/10/28(金) 00:04:28>行動の内容は選択を促すことで選ぶ。
「促す」のは誰? 「選ぶ」のは誰?
「主語」と「述語」について中学校辺りからやり直せ。
0585デフォルトの名無しさん
2005/10/28(金) 03:40:11半減か無効なのかどっち
0586伝説新人タクシ
2005/10/28(金) 06:46:44ユーザーとかプログラマーとか言いたくなく、
しかし別の言葉が思いつかなかった。
>>583 >>585
初期HPを10 として「攻撃」で与えるダメージが2、
相手が「防御」していたら1。
0587デフォルトの名無しさん
2005/10/28(金) 12:22:05#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);
0588デフォルトの名無しさん
2005/10/28(金) 12:22:36}
}
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)
{
0589デフォルトの名無しさん
2005/10/28(金) 12:23:12printf("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;
}
0590伝説新人タクシ
2005/10/28(金) 14:19:07DQコマンド、ナツカシス。
Cは長らくやってないが、STATUS構造体定義のところで
} STATUS; を
} STATUS[2]; にすれば
STATUS status[2]; を省ける。
0591デフォルトの名無しさん
2005/10/28(金) 14:27:59そういう拡張性を損なう最適化は施す意味が無い
0592デフォルトの名無しさん
2005/10/29(土) 01:16:45>>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++)
{
0593デフォルトの名無しさん
2005/10/29(土) 01:17:28printf("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;
0594デフォルトの名無しさん
2005/10/29(土) 01:18:42case 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;
0595デフォルトの名無しさん
2005/10/29(土) 01:19:13break;
case 3:
status[player].defense=2;
printf("Player %dはみをまもっている\n", player+1);
break;
}
player=1-player;
enemy=1-enemy;
}
return EXIT_SUCCESS;
}
0596デフォルトの名無しさん
2005/10/29(土) 02:00:18>>591
0597デフォルトの名無しさん
2005/10/29(土) 02:40:17statusの宣言が省略できてないですがこれでよかったでしょうか
typedef struct status_tag
{
int hp;
int attack;
int defense;
} STATUS[2];
STATUS status;
0598デフォルトの名無しさん
2005/10/29(土) 02:42:59今更C言語なんか学んでどうするの?
0599デフォルトの名無しさん
2005/10/29(土) 02:46:13・潰しが利く
・世界で一番使われている
0600デフォルトの名無しさん
2005/10/29(土) 02:56:13・潰されます
・組み込み・制御・ゲームでしか使われてない(しかもハードの知識がないと意味がない)
0601デフォルトの名無しさん
2005/10/29(土) 02:57:08>>596
0602デフォルトの名無しさん
2005/10/29(土) 12:04:49どっちが現実に近い?
599はよく聞くけど
0603デフォルトの名無しさん
2005/10/29(土) 12:43:260604デフォルトの名無しさん
2005/10/29(土) 13:56:230605デフォルトの名無しさん
2005/10/29(土) 13:59:22C厨に言わせると、WebサーバはCで書いてるからWeb系もCらしいよ
実際はJava>JSP>COBOL>VB>Cの順じゃね?仕事の量的に
0606デフォルトの名無しさん
2005/10/29(土) 14:08:29Javaで作ったソフトってほとんど知らない。
0607デフォルトの名無しさん
2005/10/29(土) 14:26:06CとJavaは対象があまり重ならないからそうなる。
0608デフォルトの名無しさん
2005/10/29(土) 15:17:150609デフォルトの名無しさん
2005/10/29(土) 15:20:46最近の仕事はイントラでもWeb使っちゃう事が多い
0610デフォルトの名無しさん
2005/10/29(土) 16:32:42逆にWEB以外の仕事ってあるのか?
0611デフォルトの名無しさん
2005/10/29(土) 16:34:210612デフォルトの名無しさん
2005/10/29(土) 16:57:58あるだろ
0613デフォルトの名無しさん
2005/10/29(土) 16:59:36つまり、無いんですね。
0614デフォルトの名無しさん
2005/10/29(土) 17:04:03それってWindowsがCで書かれてるから世の中の95%はCだっていうぐらい乱暴な話だな
Apacheなんてソースすら見たことがない奴ばかりだろうに
0615デフォルトの名無しさん
2005/10/29(土) 17:05:06家電製品にJAVA使われてる。
ポットとか電気釜とかね。
0616デフォルトの名無しさん
2005/10/29(土) 17:06:010617デフォルトの名無しさん
2005/10/29(土) 17:07:570618デフォルトの名無しさん
2005/10/29(土) 17:08:240619デフォルトの名無しさん
2005/10/29(土) 17:11:01実際にどの製品でJavaが使われているんですか?
0620デフォルトの名無しさん
2005/10/29(土) 17:19:47Windowsみたいな大量生産には向かない
0621デフォルトの名無しさん
2005/10/30(日) 00:28:22バーチャルマシーンがないと動かないからなw
でもオラクルの設定プログラムとかはJavaだと思った。
オープンオフィスもJava使ってるみたい。
C#.netやVB.netは.netフレームワークがどれだけ浸透するかだろう。
100メガ以内のランタイムで動くようになれば普及すると思う。
今はそうなのかもしれないが、.netフレームワークを知っている人は
ほとんどいないのが現状なのでは。
Javaよりさらにわかりにくいのが.netの使用環境。
0622デフォルトの名無しさん
2005/10/30(日) 01:16:20身近な例だと携帯電話か
0623デフォルトの名無しさん
2005/10/30(日) 01:48:33どのポットとか電気釜にJavaが使われてるんですかと聞いているんです
携帯なんて出されても当たり前すぎなんですが。
0624デフォルトの名無しさん
2005/10/30(日) 02:01:110625デフォルトの名無しさん
2005/10/30(日) 16:50:320626デフォルトの名無しさん
2005/10/30(日) 16:57:340627デフォルトの名無しさん
2005/11/01(火) 07:07:390628デフォルトの名無しさん
2005/11/01(火) 07:14:22わかったから初心者どもはまず”HelloWorld!”を画面に出すプログラムを作りやがれ
【言語】
python
【回答】
print '”HelloWorld!”'
0629デフォルトの名無しさん
2005/11/01(火) 07:17:331から50までの和を計算して表示
【言語】
python
【回答】
sum=0
for i in range(51):
sum+=i
print sum
0630デフォルトの名無しさん
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
0631デフォルトの名無しさん
2005/11/01(火) 11:52:42スレ立てろや
0632デフォルトの名無しさん
2005/11/01(火) 16:19:29廃棄スレだったのですがスレタイが良いので再利用します
スレタイにPythonの名前がありますが多言語で競ったほうがおもしろいので
C言語以外はあちらでやりたいと思っています(特にRuby)
今後ともよろしくお願いします
Pythonについて0から教えてください
http://pc8.2ch.net/test/read.cgi/tech/1126073956/
0633デフォルトの名無しさん
2005/11/01(火) 18:53:44このスレは破棄します
VIPPERでもわかる C言語プログラミング
http://pc8.2ch.net/test/read.cgi/tech/1129913775/
0634デフォルトの名無しさん
2005/11/01(火) 20:40:440635デフォルトの名無しさん
2005/11/01(火) 22:16:440636デフォルトの名無しさん
2005/11/02(水) 01:23:420637デフォルトの名無しさん
2005/11/02(水) 02:12:15環境依存だろうがこんな感じで
数字を漢数字の文字列に変換するライブラリを作れ
条件は以下で
1.動作確認用のテストプログラムを作る事
2.テストプログラムと変換のモジュールは別ファイルとする事
3.ヘッダーファイルを作る事
0638デフォルトの名無しさん
2005/11/02(水) 03:04:38某表計算ソフトはセルの横軸が A,B,C,...,Z,AA,AB,AC,...,ZZ,AAA,AAB,...
といった表記になっている
これを数字1〜と相互に変換できるプログラム2つ
0639デフォルトの名無しさん
2005/11/02(水) 07:25:450640デフォルトの名無しさん
2005/11/02(水) 09:35:34//とても難しい
//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++;
0641デフォルトの名無しさん
2005/11/02(水) 09:36:04{
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;
}
0642640
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");
0643デフォルトの名無しさん
2005/11/02(水) 10:52:410644デフォルトの名無しさん
2005/11/02(水) 13:05:51正の整数限定版。少数はマンドクセ。あと「じょ」が漢字変換できんかった。
#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;
}
0645デフォルトの名無しさん
2005/11/02(水) 13:08:20#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;
}
0646デフォルトの名無しさん
2005/11/02(水) 13:38:19int 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;
}
0647デフォルトの名無しさん
2005/11/02(水) 20:37:01千百十なども使うの?それとも
「一九四二」のようにただアラビア数字を漢数字に置換するだけ?
0648デフォルトの名無しさん
2005/11/02(水) 20:39:020649デフォルトの名無しさん
2005/11/02(水) 21:07:110650デフォルトの名無しさん
2005/11/02(水) 23:47:30const 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;
}
0651デフォルトの名無しさん
2005/11/02(水) 23:48:08#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) {
0652651-650
2005/11/02(水) 23:50:29bash-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
0653デフォルトの名無しさん
2005/11/03(木) 02:17:12己のレベルに合わせて実装すればよろし
0654デフォルトの名無しさん
2005/11/03(木) 18:54:32文字列を返す関数の作り方がわからなかったので表示だけ
//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]);
}
0655デフォルトの名無しさん
2005/11/03(木) 18:55:48#include <stdlib.h>
#include "lib.h"
int main()
{
int input_num;
scanf("%d", &input_num);
draw_kansuji(input_num);
return EXIT_SUCCESS;
}
0656デフォルトの名無しさん
2005/11/03(木) 18:57:32なぜかワーニングもなく動いてたけど
0657デフォルトの名無しさん
2005/11/03(木) 20:12: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;
}
0658デフォルトの名無しさん
2005/11/03(木) 20:39:43#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;
}
0659デフォルトの名無しさん
2005/11/03(木) 20:47:48> 文字列を返す関数の作り方がわからなかった
私もC言語勉強中なので、関数から文字列を返す方法を書いてみる。
間違ってたら指摘よろしく > 詳しい人。
関数から、「文字列そのもの」を返そうとするとC言語的には無理だと思う。
私が思い付く、可能な方法は、
方法1、char の配列の先頭アドレスを関数が受け取って、そこに書き込む。
方法2、関数内で malloc で領域を確保して、そこに書き込んで、そのアドレスを返す。
あってます?
0660デフォルトの名無しさん
2005/11/03(木) 20:50:180661デフォルトの名無しさん
2005/11/03(木) 21:00:302つも正解。そして>>660の方法もあるが最近の流行ではない。
どちらかというと前者の方式が使われていることが多い気がすると俺は思う。
0662デフォルトの名無しさん
2005/11/03(木) 21:03:300663デフォルトの名無しさん
2005/11/03(木) 21:13:020664デフォルトの名無しさん
2005/11/03(木) 21:19:33ユーザがfreeしなきゃいけない。WIN32APIとかは前者が多いね。
0665デフォルトの名無しさん
2005/11/03(木) 21:21:04//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;
}
0666デフォルトの名無しさん
2005/11/03(木) 21:21:36#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;
}
0667デフォルトの名無しさん
2005/11/03(木) 21:31:12#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;
}
0668デフォルトの名無しさん
2005/11/03(木) 21:31:42#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;
}
0669デフォルトの名無しさん
2005/11/03(木) 21:48:03//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;
}
0670デフォルトの名無しさん
2005/11/03(木) 21:48:54#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;
}
0671デフォルトの名無しさん
2005/11/03(木) 22:00:20for、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;
}
0672デフォルトの名無しさん
2005/11/03(木) 22:03:08for、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;
}
0673デフォルトの名無しさん
2005/11/03(木) 22:06:10malloc版の欠点であるオーバヘッドと解放義務の発生についても回避できない。
呼び出し側確保版の欠点であるバッファオーバランの可能性は、確保した長さも渡すことである程度回避できる。
0674デフォルトの名無しさん
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;
}
0675デフォルトの名無しさん
2005/11/03(木) 22:52:511、文字列を入力し、文字列の長さを調べるコードを作成
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;
}
0676デフォルトの名無しさん
2005/11/03(木) 23:07:36何故アセンブラみたいなコードが混じってるのですか。
0677デフォルトの名無しさん
2005/11/03(木) 23:11:10インラインアセンブラでオナニーしたい(精神的)年頃なんだろう。ほっといてやれ。
0678デフォルトの名無しさん
2005/11/03(木) 23:31:57#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;
}
0679デフォルトの名無しさん
2005/11/03(木) 23:39:06ポータビリティないから他の人が試せないから正しいかどうかの指摘も出来ないな
0680デフォルトの名無しさん
2005/11/03(木) 23:43:070681デフォルトの名無しさん
2005/11/04(金) 00:00:55//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;
}
0682デフォルトの名無しさん
2005/11/04(金) 01:12:420683デフォルトの名無しさん
2005/11/04(金) 01:30:41○○が原因で、○○.exe にエラーが生じましたとなるのですが。
3次元問題を差分法で解くために、時間と含めて4次元配列をつくりましたが、メモリのことも考慮して、時間の配列要素は2つにしました。
つまり3次元分の必要メモリ数*2だけのメモリが必要なのですが。。。
0684デフォルトの名無しさん
2005/11/04(金) 01:34:11mallocつかえば?
0685デフォルトの名無しさん
2005/11/04(金) 02:54:470686デフォルトの名無しさん
2005/11/04(金) 10:10:21引き数が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;
}
0687デフォルトの名無しさん
2005/11/04(金) 11:34:340688デフォルトの名無しさん
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;
}
0689デフォルトの名無しさん
2005/11/04(金) 12:38:38lea命令を使うほうがいいですよ。
int __declspec(naked)__fastcall sum(int num)
{
_asm
{
lea eax,[ecx+1]
mul ecx
shr eax,1
ret
}
}
0691デフォルトの名無しさん
2005/11/04(金) 12:42:340692デフォルトの名無しさん
2005/11/04(金) 14:51:05C関係ねーだろ
0693デフォルトの名無しさん
2005/11/04(金) 15:15:560694デフォルトの名無しさん
2005/11/04(金) 17:20:000695デフォルトの名無しさん
2005/11/04(金) 17:58:27淫乱になります
0696デフォルトの名無しさん
2005/11/04(金) 17:59:45・最適化しにくくなる。
・ポータビリティが落ちる。
0697デフォルトの名無しさん
2005/11/04(金) 18:01:30MMXやSSEなどコンパイラが利用してくれない機能を使える
0698デフォルトの名無しさん
2005/11/04(金) 18:33:30性能がアップしたと思っているとcpuが変わった時に性能激減でもう一度書き直す羽目になる
0699デフォルトの名無しさん
2005/11/04(金) 18:57:42素人が使うと遅くなる
0700デフォルトの名無しさん
2005/11/05(土) 00:24:01凄く分かりやすい例えですね。
つまり698のことなんですね!
0701デフォルトの名無しさん
2005/11/05(土) 01:35:13> 次の問題まだぁ〜?
じゃあ、点を動かしていく問題。
点の初期座標は xy 平面上の (0, 0) とする。
プログラムには、点を動かす指令と、方向転換の指令がコマンドライン引数として交互に与えられる。
点を動かす指令は、ゼロより大きい整数で与えられる。
方向転換の指令は、文字 t (turn の略) で与えられる。
例:
> program.exe t 50 t 50 t 50
150
点は、「動く方向」を持っており、初期値は「上向き」である。
点を動かす指令が与えられるたびに点は、xy 平面上を指定された距離だけそのときの「動く方向」に動く。
動く方向は、方向転換の指令が与えられるたびに、上(初期値)→右→下→左→上と、90度変化する。
上記の例では、コの字を描くように、点が動く。
点がそれまでに描いた軌跡の上を、再度、点が通過しようとした場合、衝突と判断し、
衝突した旨を表示し、衝突までに点が移動した距離を表示し、プログラムを異常終了すること。
全ての指令を衝突無しで完了した場合は、点が移動した距離を表示し、プログラムを正常終了すること。
2種類の指令は必ず交互に与えられる。(ある種類の指令が連続して与えられたかどうかを考慮しなくて良い。)
2種類の指令のうちどちらが先に与えられるかはわからない。(どちらが先に与えられても正しく動くように書くこと。)
指令の個数はゼロ個かも知れない。(移動しないので衝突もしない。移動距離はゼロになるはず。)
点が動いて行く様子を表示する必要はない。
0702デフォルトの名無しさん
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;
}
}
0703デフォルトの名無しさん
2005/11/05(土) 01:55:09{
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);
}
}
0704デフォルトの名無しさん
2005/11/05(土) 01:55:40{
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;
}
0705デフォルトの名無しさん
2005/11/07(月) 22:50:36VIP Cスレは夜帰りにはとても追い付かないスピードだぞ。
0706デフォルトの名無しさん
2005/11/08(火) 18:29:32しかも当人たちはダンマリ
これじゃ盛り上がれっていうほうが無理だ
0707デフォルトの名無しさん
2005/11/08(火) 20:50:29#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)
0708デフォルトの名無しさん
2005/11/08(火) 20:50:56}
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;
}
0709デフォルトの名無しさん
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);
0710デフォルトの名無しさん
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;
0711デフォルトの名無しさん
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);
0712デフォルトの名無しさん
2005/11/10(木) 10:45:45printf("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;
}
0713半ばニート1号 ◆pnCm4bpG3Y
2005/11/10(木) 15:42:2024歳。
フリーター。
PC、インターネット暦5年。文系。
[備考]
バイトやめてから2ヶ月程ひきこもっていた。
--------------------------------------
俺も今日からC言語学ぶべ!
因みに自分、上記の通り文系で数学は高1で終了してしまってるもののふ。
そんな自分が今日からがんがってみようと思う。皆さんよろすく。
本は「やさしいC(第2版)」を購入。
>>274氏の書き込みになにやら惹かれるものがあったので。
数学苦手な自分がどこまで根をあげずできるか試してみるYO。
とりあえず今日のところは、
この本が難しくなってきたなと感じるところまで読んでみる事にする。
0714デフォルトの名無しさん
2005/11/10(木) 16:55:31お前の態度が気に入らない
0715半ばニート1号 ◆pnCm4bpG3Y
2005/11/10(木) 17:46:42C言語を学ぶ姿勢が気にいらないのか、
ただ単に苛立ちを感じる書き込みになっていただけなのか・・・
どちらにしてもスマンかった。ん、マジメにやる。
やさしいC、とりあえずLESSON2まで読み終わる。
ここまで読んで感じた事は、今まで立ち読みしたC言語入門の中では
一番読み易かったって事。
なかでも、二進数やら八進数やらの表し方まで丁寧に説明してくれていたのが
個人的に嬉しかった。
今まで俺の頭は「二進数とは食べれるのですか?」という認識だったからw
これだけでもこの本で良かったなぁと思う。>>274氏に拝む。
ところで、
こんな感じで頻繁にチラシの裏しに来るつもりなんだけどいいのかな・・・?
イマイチこのスレの基盤が見えないのでそこら辺が少し心配。
0716デフォルトの名無しさん
2005/11/10(木) 18:09:54頑張れ、ニート!
0717デフォルトの名無しさん
2005/11/10(木) 19:30:03高1の数学じゃ役に立たんだろ
線形代数必須
0718デフォルトの名無しさん
2005/11/10(木) 19:43:03SINCOSで悩んでた直後にやった気がする
そういえばSINCOSってマンコクサインに似てるよね
0719274
2005/11/10(木) 19:59:32拝むってw俺年下だよw
まあ、俺のレスでやさC読者が増えたのは良かったと思う。少し根気があればそうなかなか投げ出さない本だと思うから。
それと、二進八進は情報技術検定3級の方がよっぽどkwsk説明してる。何か資料とか参考書があったら是非とも学んでおくべし。
やさCの事で何か質問あったら言って(まず無いか; 「やさしい」だし
出来る限り協力するわ。
0720デフォルトの名無しさん
2005/11/10(木) 20:30:14何だよファイル処理って・・・orz
0721デフォルトの名無しさん
2005/11/10(木) 20:33:400722デフォルトの名無しさん
2005/11/10(木) 20:34:34何か本を買いな。Wikiは(今のところ)過去問を置いているに過ぎないから、
あれだけ見ていればできるようにはなれない。
0723デフォルトの名無しさん
2005/11/10(木) 20:44:37そうしてみます。。
0724デフォルトの名無しさん
2005/11/10(木) 20:55:40〃∩ _, ,_ /) 〃∩ _, ,_ /) 〃∩ _, ,_ /)゛
⊂⌒( `Д´)ミ( ⌒ヽつ⊂⌒( `Д´)ミ( ⌒ヽつ⊂⌒( `Д´)ミ( ⌒ヽつ
`ヽ._つ⊂ノ⊂( ,∀、)つ.`ヽ._つ⊂ノ⊂( ,∀、)つ.`ヽ._つ⊂ノ⊂( ,∀、)つ
ソンナノヤダアアアアアァァァァァァァァ!!!!!!!!
0725デフォルトの名無しさん
2005/11/10(木) 21:00:05・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);
0727半ばニート1号 ◆pnCm4bpG3Y
2005/11/10(木) 23:12:00ありがとう。
C言語ど素人のニートがどこまで頑張れるか、
生暖かい目で見守ってくれると嬉しいw
>>717
( д) ゚ ゚
ソレ、タベレマスカ?
一日で基礎だけでも覚えれるようなものなら良いけどと思ってググったら、
全くそんな気がしなくてワラタwでも必須ならこれもやらにゃなぁ。
>>719
良いモン紹介してくれた上に
協力までとは・・・その心意気にホント感謝・゚・(ノ∀`)
お言葉に甘えまする。拝むもんに年の差なんてー(ry
今、資格の本見て探してたら情報技術検定見つけた。
取る取らんは別として年に二回しか試験やってないのって
結構厳しいね(´・ω・`)
-------------------------
あれから、本書に載ってなかった(と思われる)
n進法を10進法にする公式とその逆の公式をググッて覚える。
その後「プログラムを打って」と書いてる所は打ちながら、
なんとかLesson3まで読み終わる。まだ本にはついていけそうな感じ。
scanfとprintf使って、文字入れたら返答するとこまではいけました。
小さいながらもこの達成感。こんな感覚いつぶりの事だろう。
明日も頑張りたい。今日はもう寝ます。
0728デフォルトの名無しさん
2005/11/10(木) 23:33:00<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を作ってください!
0729デフォルトの名無しさん
2005/11/10(木) 23:45:09スレ違い
0730デフォルトの名無しさん
2005/11/10(木) 23:49:56<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>
0731デフォルトの名無しさん
2005/11/11(金) 00:39:42>>716ではないが、俺も4月から始めたばかりの初心者だ。(しかも、バリバリの文系。数学は数2Bまでしかやってない)
夏までは『Cの絵本』と大学の講義で基礎部分を学んだ。今は『猫でもわかる〜』を使って独学している。
今日は『Cの絵本』だと今一つぴんとこなかったポインタの基礎を、やっと理解できた。
まだまだ先は長いが、お互い頑張ろう。
0732デフォルトの名無しさん
2005/11/11(金) 00:52:52っ[Intel C++][xmmintrin.h]
0733デフォルトの名無しさん
2005/11/11(金) 00:56:23C言語覚えるのと同じでやりながら必要なもの覚えればいいんじゃない?
0734デフォルトの名無しさん
2005/11/11(金) 00:59:23何が大切な事がわかってない人ですか?
0735デフォルトの名無しさん
2005/11/11(金) 01:01:51あまり真剣に受け止めるな
0736デフォルトの名無しさん
2005/11/11(金) 01:14:49線形代数って名前でもメインは行列とベクトルだけどな
数Cの教科書で基礎、線形代数のでその他をやるが吉
アルゴリズム考えるときに結構応用が利く
0737デフォルトの名無しさん
2005/11/11(金) 02:09:44スレ違いの中、本当にありがとうございました(/_;)
助かりました!
0738デフォルトの名無しさん
2005/11/11(金) 02:52:37このsageない基地外なんか過去から全部同じ椰子じゃないかとまで思ってしまう。
(ネタがつまらんのが致命的にキモイ)
0739半ばニート1号 ◆pnCm4bpG3Y
2005/11/11(金) 14:32:50>>731
こちらこそ(_ ´∀`)_
朝方、WIKIと前スレ読んでたんだけども
「猫でもわかる〜」っていうのは前スレで紹介されてたやつですな。
まだ見てないけれど、自分もこの本読破できたら行ってみようと思っとります。
同じ文系の人がいた事に親近感(*´Д`*)
>>736
なるほど、全部が全部でなく、抑えるべき要所を覚えれば良いのですな。
覚えるのはまだ先の話だけど、やる気出てきた(`・ω・´)
--------------------------
朝の9時から13時過ぎまでやって、LESSON4がようやく終了。
重ねて言ってるけどこの本(やさしいC)、ホント親切。
自分が疑問に思った事を見透かしたかのように次のページには
その解が書いてある。図解も分かり易く、よほど俺には合うみたい。
今回は式と演算子の章だったので、数学苦手な人間としては
突然難易度を上げられた感じ。まだどうにか食いついていってるが。
「キーボードで五科目のテストの点数を入力して、
合計値と平均値を求めるコードを記述しろ」
って問題には、息も絶え絶えクリアできたものの、
「整数を入力した際、正負を反転して出力するコードを記述しろ」
には頭抱えてましたw解答見た時は唖然「ははは!こやつめ!(AA略」
昼飯食べたら関係演算子やらif文やらのLESSON5に入ります。
0740デフォルトの名無しさん
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になるのですか?
0741デフォルトの名無しさん
2005/11/11(金) 20:43:13まったく知らないけど。
0742デフォルトの名無しさん
2005/11/11(金) 20:53:520743デフォルトの名無しさん
2005/11/11(金) 21:00:49>戻り値が文字列の先頭を指すポインタ
というのはstrdupがsを指すポインタという事ですか?
0744デフォルトの名無しさん
2005/11/11(金) 21:03:50char *func();の書き方がわかりにくいなら
char* func();だと考えてくれ
要はchar*型を戻り値にもってるってこと
つーか、いくら入門書とはいえ(むしろ入門書だからこそ)
malloc後のNULLチェックを飛ばすのはダメだろ
0745デフォルトの名無しさん
2005/11/11(金) 21:12:09ああぁあっ!!分かった気がします!
戻り値が文字列なので*strdupは先頭を指すポインタの
意味がたぶんわかりました!
NULLチェックの重要性について丁寧にやってみます!
答えてくださってありがとうございます
かなり興奮中です(゚∀゚)
0746デフォルトの名無しさん
2005/11/11(金) 21:14:46むしろここまでやってくれたら尊敬する
ちなみにstr[a-z].*という名前の外部関数をプログラム側で定義するのはだめだって話を宿題スレでやってた。
0747デフォルトの名無しさん
2005/11/11(金) 21:23:03そこまで短縮できるまでの頭のキレがほしいです!
これまたレベル高い情報で尊敬の眼差しが・・・
本当にありがとうございます、やる気でてきました(`・ω・´)
0748デフォルトの名無しさん
2005/11/11(金) 21:36:46>>746は絶対にやっちゃダメだろ
strcpyは領域チェックをしない
NULLにコピー何てしたら何が起こるかシラネ
0749デフォルトの名無しさん
2005/11/11(金) 21:39:02ただNullPointerExceptionでないのが惜しい。
0750デフォルトの名無しさん
2005/11/11(金) 21:39:21mallocの戻り値は必ずチェックしろ
0751デフォルトの名無しさん
2005/11/11(金) 21:44:07そういやCじゃ例外機構ないよな
例外発生すると有無を言わさず強制終了?
0752デフォルトの名無しさん
2005/11/11(金) 21:48:48VCやBCCではCにもWin独自の例外機構(SEH)が備えられている。(__try〜__except/__finally)
C++ではC++の例外とSEHをまぜて使える。
0753デフォルトの名無しさん
2005/11/11(金) 21:53:23って事は領域確保したら安全性のため領域確保できたか
チェックもいれなければだめなんですね。参考になります。
0754デフォルトの名無しさん
2005/11/11(金) 23:12:290755デフォルトの名無しさん
2005/11/12(土) 00:00:51このスレに書いてある事がサッパリわからない。
今現在「ネコでもわかる〜」のC言語編第八章です。
ってか「ネコでもわかる〜」すげー難しいんですけど・・・
百章まであると思うとクラクラする。
11月22日にテストなのにヤヴァイ・・・
0756デフォルトの名無しさん
2005/11/12(土) 00:07:508,9,10は後でやることを先にやってるだけだから飛ばそう。
猫でも〜は何が言いたいのか良く分からないけど。
0757デフォルトの名無しさん
2005/11/12(土) 04:12:57俺もそれ思ったw
ネットでならネコやる前に苦Cのが分かりやすかったよ
0758デフォルトの名無しさん
2005/11/12(土) 10:01:08マジでぇえ?情報をどーもです。
他のもイロイロ見てみよう。わかんないとこがわからん・・・
今日はC言語勉強3日目です。
あと9日でCの基礎、制御文、データ型、変数、式の詳細を学ばなければならない。
今日と明日は会社が休みなのでひきもって勉強するつもり。
今から勉強します。
0759デフォルトの名無しさん
2005/11/12(土) 10:02:25猫でもは非初心者向け。面倒だと思わずに入門書を買うなり図書館から借りるなりした方が懸命。
つーか、前にも言ってただろ確か。
0760半ばニート1号 ◆pnCm4bpG3Y
2005/11/12(土) 12:59:56>>754
わかる間は面白いです。全く理解できなくなった時がコワス(´・ω・`)
>>758
勉強始めた日が同じだw
(*´∀`)人(´∀`*)ナカーマ
本なら>>274氏同様、やさしいCを超オススメ。
これなら、覚えの良い人なら二日漬けで内容3分の2以上は消化できるかと。
覚え悪い俺でも今日で半分まで進めました。
日にちが差し迫ってるのが辛いトコだけど、がんがって!
----------------------------
昨日はLesson5を消化してから、マ版に行ってました。
半端な知識でプログラマーになるって事がどうゆう末路を辿るのかを理解完了orz
最初は「これで就職を・・・」と思っていたけれども、
今それを考える事は後回しにする。働く事も後回しにしたi(ry
昨日同様朝9時から今さっきまでで、ようやくLesson6終了。
繰り返し文についてだったんだけども、応用がやたらと利くのか、
練習問題はほとんどクリアできず(´-ω-`)
解を見ればしくみは理解できるんだけど、
問題見てそういうしくみを自分で閃けなかった。
こんなので大丈夫なんだろかなぁ・・・。
全Lesson、12に対し半分を終えれました。
ずっとこもってたので今日は外出。走る。泳ぐ。筋トレしてみる。
帰ったら配列のLesson7に挑戦。
0761274 ◆Hv1CCCx/1M
2005/11/12(土) 16:56:51乙。結構頑張ってるみたいで。
>半端な知識でプログラマーになるって事がどうゆう末路を辿るのかを理解完了orz
PGは理想と現実のギャップが激しいからな;俺は「それでもSEになりたいか」という本を読んで概要を知った口。>残業とバグと納期との戦い までは読んださ。
>練習問題はほとんどクリアできず(´-ω-`)
ちょっと待てwそれじゃ先進む意味無いだろw
時間かけてでも内容をしっかりと把握するべし。
仕組み、というか文の流れをイメージできる様にすれば割と簡単に覚えられると思う。丁度、やさCの解説絵みたいな漢字。
0762ミスター文系
2005/11/12(土) 22:19:01俺は猫Cの本の方を今読んでいるが、正直言ってWEBの内容も本の内容も、全くの初学者(特に文系の人)が手を付けるには少しわかり辛い気がする。
というか、初学者は素直に入門書を買った方が良いぞ。
WEBに挙がっているテキストは、編集者の目が入っていないのでわかり辛くなっているものも多い。
お勧め本としては、『Cの絵本』あたりかな。
ただ、これは練習問題が入っていないので、そこら辺を上手く補強する必要があるが。
『やさC』も>>274氏や半ばニート氏が言うように良い本なんだろうが、俺は買ったことがないので薦めることはしない。
(別に>>274氏や半ばニート氏を信用していないのではなくて、俺は本屋で立ち読みした程度なので、薦めると無責任になってしまうから。)
>>760
>>761(273氏)も言っているように、解けない問題は自力で解けるまでやり直した方が良いと思う。
急がば回れじゃないけど、焦って急ぐと後で大変になるから。
人の話の受け売りだが、良いプログラマの条件はアルゴリズムのネタを多くもっていることらしいし。
初心者が偉そうなこと書いてスマソ。orz
0763デフォルトの名無しさん
2005/11/12(土) 22:22:32printf("(273氏)は(274氏)の間違えです。\nスレ汚しスマソ。orz\n");
0764半ばニート1号 ◆pnCm4bpG3Y
2005/11/13(日) 00:00:51あきれ果てた顔のドラえもんAAが頭よぎった半ばニート24歳です。
>>761
>>762
ども(´∀`)ノ
ちょっと離れた間に心配かけてたみたいで恐縮(´・ω・`)
お二人の言う通り「これわからないので後回し」ってのは
昔からよくありました。これを機に脱したい。気ぃつけます(`・ω・´)ゝ
今のところ一度解答さえ見れば、
>>274氏の言う「流れ」がなんとか見え隠れしているのか、
二度目同じ問題をやるとできているようです。
明日もっぺんやってちゃんと理解できてるか確認してみます。
ただ、初挑戦の段階でその流れを閃く事ができなかったってのがどうにも。
基礎の構文覚えても応用をまるで利かせれない自分の頭にアワレワロス。
慣れなのかな。ネタ、一つでも多く持ちたいです。がむばる。
今日は結局Lesson6のみでした。明日この章の練習問題を経てLesson7行きます。
0765デフォルトの名無しさん
2005/11/13(日) 00:03:45読んでる本は猫だっけ?
あの本はscanfかなんかの危険性を指摘せずに使ってるというのを見たから
全く読んだこと無いけど、とりあえずリストとかの基本的なデータ構造を
一回自分で作ってみるといい
一度書けば、どんな物なのかというのが理解できるし、それが必要となったときに
楽に実装できるようになる
0766デフォルトの名無しさん
2005/11/13(日) 00:05:44http://www.kumei.ne.jp/c_lang/intro/no_06.htm
0767デフォルトの名無しさん
2005/11/13(日) 00:50:34setjmp/longjmpで似たようなもの実装できるし現にRubyがそうやってる。
あとこのへんの実装はOS依存だがシグナルとか。
0768274 ◆Hv1CCCx/1M
2005/11/13(日) 02:58:43>>762
解答なんて全章終わった後に読むぐらいのつもりでないと。っつか、俺が現にその状態なんだが。
正常に動けば形がどうであれ正解なんだし、分かるまでやってみたらどう?必要なら応用問題も出すよ。
0769半ばニート1号 ◆pnCm4bpG3Y
2005/11/13(日) 04:30:23>>765
読んでるのは、やさしいCっす。
なるほど、練習問題なら複数回やったことはあれど、自分で作った事はマダーです。
そうですな、明日(というよりもう今日)早速その方法を参考にさせて頂きつつ、
ちょっとノートかPCにまとめてみます。アドバイスどもです(`・ω・´)ゝ
>>768
アンカー違うけど、俺宛ぽいので。
うーん、確かに。
・・・ニート属性として「諦め早い」のスキル持ってるのですが、
俺はここから一歩でも前へ進みたい。この際です。捨ててみます。
応用問題とはありがたい!俺は今の段階では答えられそもありませんが、
問題を出すなら今でもいいぽいと思われます。
ここ数日、俺ばかり奇襲して暴れ放題チラシ放題ですが、
このスレには自分以外にも問題を待ってる人、沢山いると思うんで。
元々ここはそういうスレだと、昨日WIKIで見かけました。
俺はスレのログは残してるので、
然るべき日(基礎ができたかなと自分で納得できた辺り)になれば
後でこっそりやりますよー。
0770デフォルトの名無しさん
2005/11/13(日) 11:16:48今日はC言語勉強4日目。今日は制御文forループってのからやってみるつもり。
>>759
本は「独習C」ってゆー黄色い本を持ってます。
ってかテストがこの本の第1〜第4まで出ます。
チンプンカンプンなのでC初心者HPを参考に並行して勉強してる次第であります。
>>760
おお、勉強をはじめた日が同じなんて奇遇ですね。共に頑張りましょう。
私のほうが先に脱落するかもだけど。
初心者本は明日仕事中(営業マンなので自由がきく)に見てこようと思います。
今から勉強します。また夜きます。では。
0771デフォルトの名無しさん
2005/11/13(日) 12:18:550772デフォルトの名無しさん
2005/11/13(日) 13:17:350773ミスター文系 int hoshu
2005/11/13(日) 14:41:23>「流れ」がなんとか見え隠れしているのか〜
手間と時間と金が惜しくなければ、例題や解答のソースを自分で打って何枚か印刷し、それぞれ、赤ペンで使って線を引きながら、処理ごとにプログラムの動きを追ってみると良いかも。
例えば、
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で複雑なプログラムを組み始めてからだった。
アルゴリズムのネタが少ない内は、かえって混乱するから、"自分でソースを書く時に限っては"フロチャを書かないほうが良いかもしれないね。
以上、あくまでもいい加減な主観だから、参考にもならんが。
0774デフォルトの名無しさん
2005/11/13(日) 14:56:36どこまで進んだかだけでなく、どの程度理解しているかも書くとスレの住民も反応しやすいかと。
レベルは「本の練習問題を数回やって解けるレベル」とか、「まとめwikiの○番目の問題が解けた」とか。
0775デフォルトの名無しさん
2005/11/13(日) 15:01:02ついでに、独習Cの練習問題とかの質問だったら、以下のスレも覗いて見るとよろしいかと。
【独習C】本を読んで質問【独習C】
http://pc8.2ch.net/test/read.cgi/tech/1112760409/
0776半ばニート1号 ◆pnCm4bpG3Y
2005/11/13(日) 15:26:01>>770
俺も朝方ようやくforループに一区切りつけたトコです。
whileやらdo whileやら複数種類あってややこしかったーヽ(`Д´)ノ
>>773
おお、アドバイスどもです。俺とよく似た方法ですね。
自分はまだ脳内のみでやり始めると
文字達が勝手に頭の中でBダッシュジャンプしてどっか行くので
わかるのもわからないのもノートに手書きで書き写して、
上から順に「ここがどうでそこがああで」と音読しながら線引いてます。
フローチャートの意味を知らなかったのでググりました。
なるほど図形に起こすのか。新鮮です。
確かにこれは慣れてからの方が良さそうですが、良い事聞きました(*´∀`)
----------------------
繰り返し文もちょっとずつ見えて来ました。
んで、今Lesson7にいます。早くも壁来ましたorz もう同じ問題に早や2時間。
ついに低学歴がアダになる時が来たか、と。ウワアアアアン。
「Lesson7の7.5です」と言うと内輪な話になるので
本書から抜粋しました。
C言語質問スレ【激初心者】に行くべきか迷いましたが、
せっかく>>274が協力して下さるとの好意に甘えたいので今回のみここで。
以後、この手の質問は上記スレ行こうと思ってます。
0777半ばニート1号 ◆pnCm4bpG3Y
2005/11/13(日) 15:34:43#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
0779デフォルトの名無しさん
2005/11/13(日) 15:42:270780デフォルトの名無しさん
2005/11/13(日) 16:01:07まず
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増やして、繰り返す
と言う事。の説明でオッケ−だと思われ? 初心者の説明でスマン
0781デフォルトの名無しさん
2005/11/13(日) 16:02:52でもいっかwwwwwwww
0782半ばニート1号 ◆pnCm4bpG3Y
2005/11/13(日) 16:51:25調べて意味を見てたら開眼できました(゚∀゚)!
ありがとうございますm()m
>>781
ちょwwwwwww
でもわざわざ助力頂き助かりましたm()m
------------------
>>779氏の一言のおかげの開眼と、>>780氏の説明部分のおかげで
自分の質問がずれている事に気がつけました。
コメント入れた部分自体は前Lessonで把握済みでした。
全体の流れがしっかり把握できてなく曖昧であったのに、
無理にどこがわからないのか具体的な目星をつけた事が、
ずれを引き起こした原因だったようです。
バブルソート、覚えました。
>>274氏、申し訳ない。まだ頑張れそうです。
0783274 ◆Hv1CCCx/1M
2005/11/13(日) 20:11:02細かい揚げ足取ると
・returne
・printfに&a使うとアドレスが出力される、aだけで十分
>>778
氏付けなくていいって。大した事やって無い&&年下だし…と言いたいが、俺も小手で呼ぶ時は「半ニ氏」みたいになりそうだな…
777の問題は俺も時間かかったな。ソースと解説だけでしつこくやってたらいつの間にか完璧にソース覚えちまった。
簡素な処理ばかりだった初期の頃で「プログラムすげぇw」と思えた初めてのソースだったな。
さて、そろそろ練習問題逝っとく?
0784274 ◆Hv1CCCx/1M
2005/11/13(日) 20:12:080785デフォルトの名無しさん
2005/11/13(日) 20:17:070786ミスター文系
2005/11/13(日) 20:55:22おお、ご指摘どうもです。
&aはscanfを書いた後に書いたので、うっかりしてました。
returnのスペルミスは、普段int main()ではなくvoid main()で書いているので、これまた単純ミスです。
わざわざ、すいませんです。orz
0787デフォルトの名無しさん
2005/11/13(日) 20:58:130788ddd
2005/11/13(日) 21:05:28問題
キキキキタタタタ━━━(((((゚(゚(゚(((゚゚∀∀゚゚)))゚)゚)゚)))))━━━!!!!!!
んっ?多次元?点数を配列に格納するんですか?
0789デフォルトの名無しさん
2005/11/13(日) 21:06:24キー連打してたらdddとか打っちゃった
0790ミスター文系
2005/11/13(日) 21:24:05>>787は俺ね。(コテハン記憶し忘れた)
>>274氏が出す前に初心者の俺が出すのは問題かも知れんが…。
よかったら解いて見てください。
但し、多次元配列とfor文が使えることが前提です。(何度も言うように、俺は『やさC』を持っていないので、Lessonいくつと書かれても、具体的にどこまで出来るのかわからんので。)
問題1
多次元配列を利用して、学生10人分の出席番号・国語の点数・社会の点数・英語の点数を入力し、標準出力でアウトプットするプログラムを作りなさい。
出力例
学生1の国語の点数は100点、社会の点数は100点、英語の点数は100点です。
学生2の国語の点数は90点、社会の点数は75点、英語の点数は100点です。
(以下略)
0791ミスター文系
2005/11/13(日) 21:28:35ちょっと長いので、項目ごとに改行して出力しても良いです。
例
学生1
国語100
社会100
英語100
学生2
国語100
社会100
英語65
(以下略)
while文が使えるのであれば、ちょっとした追加問題も用意してるんで言って下さい。
0792デフォルトの名無しさん
2005/11/13(日) 21:38:300793ミスター文系
2005/11/13(日) 21:42:54もうひとつ補足。
出席番号と点数の入力は標準入力(キーボード)を使って下さい。
入力例はこんな感じで。
例
出席番号を入力>> 1
国語の点数を入力>> 100
社会の点数を入力>> 100
英語の点数を入力>> 100
スレ汚しスマソ。
0794営業マソ@神奈川
2005/11/13(日) 22:01:45今日は明日の仕事の設計書とかプレゼンの練習であんまり勉強できなかったなぁ。
forループ、演算子、printf()とエスケープ文字をやりました。
wikiの「1から50までの和」が解けました。
>>776
同じ日にはじめたのにもう随分差をつけられちゃったっぽいなー(笑い
因みに24歳なんですね。歳近いですな。私は25歳です。
>>790
うげっ!わからん・・・多次元配列?もっと勉強して解かせて頂きます。
0795デフォルトの名無しさん
2005/11/13(日) 22:03:28やってみるお(´・ω・`)
0796274 ◆Hv1CCCx/1M
2005/11/13(日) 22:15:53>274氏が出す前に初心者の俺が出すのは問題かも知れんが…。
全然お構いなく。俺もまだ文字列ポインタ・ポインタ配列辺りで苦戦中だから、皆と同じぐらいのレベルだし。
今だ片付かないレポートをよそに俺もやってみるわ>問題
0797ミスター文系
2005/11/13(日) 22:53:41普通の配列は分かりますか。
それだったらば、ちょっとした問題を出せますが。
>>795
>>796
>やってみるお(´・ω・`)
>今だ片付かないレポートをよそに俺もやってみるわ>問題
そういって頂けると、何だか凄く嬉しいです。
0798デフォルトの名無しさん
2005/11/13(日) 23:39:01俺も4月からc習い始めてる理系学生です。
蝶初心者向けの本を構造体の前まで(友達にぱくられた)読み終えて、今は猫読んでます。
けど今まで理解した気になってるだけで、実は理解してないんじゃないかと不安になってるんです。
というのも猫をパラ見しながら感じたんですが問題を解いた数が少ないんです。
学校の課題はやるんですけどその時やったことだけだったり、応用的な問題や違う切り口の問題を解くことが少ない。
猫を見てみたら問題が少ない。やっぱ数こなすことも大事だと思うんで・・・
そんな時ここのwiki見つけて喜んでました。問題いっぱい!
最近時間なくて問題は解けないけど通学時間に本読んで勉強する気ではいます。
やっぱ実際打ってみないと力つかないし覚えられないからなぁ・・・
とチラシの裏みたいになったけど用は問題出してくれるこのスレに感謝!ってこと
最近出題が少なくてしょんぼりだけど。
出題者がんばれ!初心者もっとがんばれ!
790の問題時間見つけてやってみます。
0799営業マソ@神奈川
2005/11/13(日) 23:39:04入力は出来るんだけど何故か「1」が出る。も〜何でw
こんなカンジで↓ 「1」後は普通に入力出来るんだけどなぁ。。。
出席番号を入力>> 1
国語の点数を入力>> 1
社会の点数を入力>> 1
英語の点数を入力>> 1
はぁ、明日仕事なんでもう寝なきゃ。
0801ミスター文系
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
(以下略)
0802ミスター文系
2005/11/14(月) 00:16:06良く分からない方は、上から順を追って読んでみて下さい。
但し、解き方が何パターンかあると思うので、あくまでも私と同じ解答を導き出すことを前提としたヒントです。(要するに、私と違った解き方をするならば役に立たないよ、ということ)
ヒント1>
配列の次元数は二次元です。
ヒント2>
for文を使うと楽。
ヒント3>
for文は二重になります。
ヒント4>
二重のfor文?…二次元配列…? 同じ2だなぁ。
ヒント5>
二次元配列を宣言する時、配列の後ろの[ ]に入る数字は4。
つまり、4つのデータを格納するということ。
ヒント6>
二次元配列の数がよくわからなかったらば、とりあえず1人分の出席番号と国社英の点数を入力するプログラムを考えてみよう。
今回のヒントはここまで。
0803ミスター文系
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文を使うと楽かも
0804ミスター文系
2005/11/14(月) 00:38:33さっきも書いたように、明日から数日間このスレに来れないかもしれませんが、数日以内に解答のソースは必ず書き込みますのでご勘弁を。
(「俺が書いたる」という方がいらっしゃったらば、書いちゃって頂いても構いません。)
それでは、今晩は寝ます。
0805274 ◆Hv1CCCx/1M
2005/11/14(月) 01:16:05ttp://f4.aaa.livedoor.jp/~takibi/phpup/img/021.phps
レ ポ ー ト 終 わ っ た な 。
0806デフォルトの名無しさん
2005/11/14(月) 04:37:42或いは自分の書いた文章の間違いに気を配るとか。
#理系だからそれらが許されると言うことでもないが。
0807デフォルトの名無しさん
2005/11/14(月) 04:51:46ちょっと見ただけだけど。
・main()関数の型が間違っている。
#どこからcharが……
・voidでない関数はreturnで値を返さないといけない。
・別々の配列(少なくとも一つの配列と一つの二重配列)にすべきものを無理矢理二重配列としてしまうのは如何なものか。
#あ〜、ヒントが悪いのか。
・整数定数は、使い回しが利くようにマクロにするほうがいい。
・無限ループはコンパイラによっては無駄な警告が出るwhile (1)よりfor (;;)がお勧め。
#そのためにわざわざ1を書かなくてもいいように仕様が決められているのだから。
・馴れないうちは(俗に言う)一行野郎で書こうとせずに複文化したほうがいい。
#if (...) ...; などね。
・scanf()で数値を入力するのは間違って英字を入力したときに悲惨なので避けた方がいい。
#慣れないと判りにくいから今後の課題と言うことでいいと思うが。
・(固定)文字列の配列は、const char * sub[] = {"...", "...", "...",};とするのが常道。
#人間がわざわざ数を数えることはない。
0808274
2005/11/14(月) 09:12:22・main()関数の型が間違っている。
これはcharの関数作ろうと思って消し忘れた奴
・別々の配列(少なくとも一つの配列と一つの二重配列)に〜
多次元配列で作れと指定されてる
・馴れないうちは(俗に言う)一行野郎で〜
馴れてるから書いてるだけ。レスで貼付ける時にはスマートかと。
・scanf()で数値を入力するのは間違って〜
つ[スレタイ && 最新100]
0809デフォルトの名無しさん
2005/11/14(月) 09:38:22惚れたお(´・ω・`)
0810807
2005/11/14(月) 11:26:22言い訳せんでいいよ。ヒントを書いているだけで教える気があるわけじゃないから。
疑問があるなら質問してくれ。暇があったらスレチェックしているから。
0811807
2005/11/14(月) 11:29:43漏れに惚れちゃぁいけねぇぜ。
追記。
「多次元配列で作れ」≠「単一の多次元配列に放り込めるものは全て放り込んで作れ」
言い訳を捻出する暇があったら行間を読む努力をする方がいい。
0812デフォルトの名無しさん
2005/11/14(月) 12:14:37永遠のファンになったお(´・ω・`)
0813デフォルトの名無しさん
2005/11/14(月) 12:53:59データベースファイルのようなものにCの標準機能だけでプログラムで登録、削除、参照などを
したい場合って、CSV形式のファイルを利用するのが一般的なのでしょうか?
0814デフォルトの名無しさん
2005/11/14(月) 12:56:310815813
2005/11/14(月) 13:29:31でも練習なんだし、普通はどうするとか考えるよりもとりあえずやってみればいいですよね。
どうもありがとうございました。
0816デフォルトの名無しさん
2005/11/14(月) 13:35:09それならCSVでもいいんでない?
できたファイルをExcelで読み込んでもいいし、エディタで開いてもいいし。
#尤も、ただのTSV(項目をカンマではなくタブコードで区切る)でもいいかも知れない。
0817274 ◆Hv1CCCx/1M
2005/11/14(月) 17:40:52こちとら眠気押さえて打ってたんだ、手直し後にコンパイルしてなければミスに気付かない事もある。
配列分けろだのconst付けろだの、俺はあんたの物差しに沿って打ってる訳でも無いし、あんたがC覚える為に読んできた書籍も知らない。それを皆が皆最善だと思うとは考えにくいが。
自意識過剰を自覚してるのならHCS(ヒューマンコミュニケーションスキル)を学ぶ事から始めたらどうだ?あんたの文面は叩き荒らしの特性によく似ている。
0818デフォルトの名無しさん
2005/11/14(月) 17:51:560819デフォルトの名無しさん
2005/11/14(月) 17:58:06本当にありがとうございました
0820デフォルトの名無しさん
2005/11/14(月) 18:01:450821デフォルトの名無しさん
2005/11/14(月) 18:16:30同じ学び中の者から少し。
こういう初心者スレでわざわざソースを見てくれて悪いところを指摘してくれる人なんて悪い人じゃないと思うよ。
間違った変な知識で指摘する人もいるかもしれないけど、そういう場合って大概別の知識のある人からの
突っ込みが入ったりする。
匿名のネットで指摘されたって恥をかくわけじゃないんだから、こういうのは謙虚に受け取っとけばいいと思う。
現時点からしたら細かい指摘なのかもしれないけれど、constの件などはおそらく最善の部類に入ることだろうし、
プログラミング時眠かったとか手直し後に再度コンパイルしてないってのは初心者だからとか関係ない。
結果間違ってたところ、改善可能な点を知れたなんて良いことじゃないか。
俺にも参考になったし、今後他の人の参考にもなるかもしれない。
一応固定みたいにしてるなら些細なことでツンケンせずに楽しくいこうぜ!
0822デフォルトの名無しさん
2005/11/14(月) 18:28:10もう抱いて下さい…(´・ω・`)
0823807=810=816≠821
2005/11/14(月) 18:44:45>こちとら眠気押さえて打ってたんだ、
私の知ったことではない。嫌ならやらなければいいだろう。
寧ろ、眠気を抑えながらの学習は効果が薄いと思うが如何だろうか。
>手直し後にコンパイルしてなければミスに気付かない事もある。
コンパイラが発見できないようなケアレスミスで苦しむこともなかろうと極力ミスが発生しないやり方を書いている。
>配列分けろだのconst付けろだの、
命令してはいない。参考にするもしないも私の知ったことではない。
>俺はあんたの物差しに沿って打ってる訳でも無いし、あんたがC覚える為に読んできた書籍も知らない。
当たり前だ。私は何冊も読んだわけではないからそれを明かしたところで参考にさえならないだろう。
>それを皆が皆最善だと思うとは考えにくいが。
一部反論もあるだろうが、概ね受け入れられるように書いている積もりだ。
また、>821も書いている通り、問題があるなら他から指摘されるだろう。
>自意識過剰を自覚してるのならHCS(ヒューマンコミュニケーションスキル)を学ぶ事から始めたらどうだ?
その言葉、そのままお返ししよう。
>あんたの文面は叩き荒らしの特性によく似ている。
これもそのままお返ししておこうか。
>疑問があるなら質問してくれ。
あー、一つだけ命令口調になっていたか。これは「疑問があるなら質問してくれても構わない」と言い換えておこう。
たまたま虫の居所が悪いところに紋切り型の口調が気に入らなかったのかもしれないが、
自分が誰のために学習しているのかよく考えてみてみたらどうだろうか。
>>822
気が多いなw
0824デフォルトの名無しさん
2005/11/14(月) 18:59:070825デフォルトの名無しさん
2005/11/14(月) 19:11:27せっかく俺スゲーって作ったらダメだし食らって切れちゃっただけなんだし
0826デフォルトの名無しさん
2005/11/14(月) 19:17:04でないと、あなたが何者か分か・・・(ry
0827デフォルトの名無しさん
2005/11/14(月) 20:00:03#しかし2chではあれくらいでも普通だと思うけどな。
とにかく言っていることは正しい。俺も保障する。(保障になっていないってw
0828デフォルトの名無しさん
2005/11/14(月) 20:34:05一応C99からはintで宣言したmain関数は明示的にreturnしなかった場合0を返すことが保証されている。
まあ個人的には
・C99で追加された機能はできるだけ使わない
・C99で削除された機能は絶対使わない
という態度で書くのが良いとは思うが
0829807
2005/11/14(月) 20:42:14>一応C99からはintで宣言したmain関数は明示的にreturnしなかった場合0を返すことが保証されている。
ついついそれを忘れちゃうんだよね。フォロー感謝。
>・C99で追加された機能はできるだけ使わない
>・C99で削除された機能は絶対使わない
同意。特に初心者はその方がいいね。
#と言いつつ自分はC99で追加された機能(ブロックの途中での変数宣言や関数のinline指定)を使うけど。
0830デフォルトの名無しさん
2005/11/14(月) 20:43:180831デフォルトの名無しさん
2005/11/14(月) 21:00:12添削おながいすます。
0832デフォルトの名無しさん
2005/11/14(月) 21:13:51int配列の重複がないことをチェックする関数
つまり
配列の先頭要素へのポインタと配列の長さを受け取り、
配列中の他の要素と同じ値を持つ要素があれば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)を使わないで作るってのはどう?
0833デフォルトの名無しさん
2005/11/14(月) 21:14:200834デフォルトの名無しさん
2005/11/14(月) 21:14:55goto禁止を加えないと駄目だろ。
0836832
2005/11/14(月) 21:22:46いや、むしろgoto使って書けるもんなら書いてほしいと思ったり
0837813
2005/11/14(月) 22:11:47区切り文字をタブにした形式もあるんですね。
数字を1,000のように書いたりする場合にはそっちのが良さそう。
ありがとうございます。
0838274 ◆Hv1CCCx/1M
2005/11/14(月) 23:12:06言い訳を捻出する暇があったら行間を読む努力をする方がいい。
つか、互いに言い訳、互いに屑。そういう事にしとこうか。
0839デフォルトの名無しさん
2005/11/14(月) 23:19:30ざっと見た範囲で。
・バックスラッシュが2バイト文字になっているけど大丈夫?
・問題の性格上仕方ないけど、memcpy()かぁ……
・点数の入力に関して、条件判断とメッセージの内容が噛みあっていない。
#片や1以上、片や0以上。
・printStudentInfo()はprintf()一文で書いてもいいかも。
#その場合、文字列リテラルが連結できることを利用するといい。
・enumの最後の値の後に','を置くのは間違い。
#コンパイラによっては通るかもしれないが。
・feof()を呼ぶまでもなくfgets()の戻り値を見るだけで充分。
#feof()を禁止するわけではない。
・intValueと言う名前のint変数でlongの値チェックをするのは如何なものかと。
>>838
まだ続けるの? そういうのを恥の上塗りと言うのだよ。
0841デフォルトの名無しさん
2005/11/14(月) 23:36:29師匠になにを言う(`・ω・´)
ってかそろそろやめなって・・・www
真面目な指摘してくれて、聞く立場からすれば
とても参考になるし、勉強になる。
0842デフォルトの名無しさん
2005/11/14(月) 23:44:40>>274
君、面白いよ。その純粋な子供らしさを失わないようにね。
>>839
>・intValueと言う名前のint変数でlongの値チェックをするのは如何なものかと。
これはどうしろと?
0843274
2005/11/14(月) 23:50:39勝手な言い掛かりで煽られれば
頭にも来るし、反論したくもなる。
俺は>>808でありのままに答えた(多次元は違っていたとしても)
だがあんたは煽るかの様に言い訳と決めつけた。これが問題。
「初心者には容赦しない知ってる君」みたいな態度に頭が来ただけ。
0844デフォルトの名無しさん
2005/11/14(月) 23:55:570845デフォルトの名無しさん
2005/11/15(火) 00:34:250846デフォルトの名無しさん
2005/11/15(火) 00:37:22盛 り 上 が っ て ま い り ま し た
0847デフォルトの名無しさん
2005/11/15(火) 00:38:270848デフォルトの名無しさん
2005/11/15(火) 00:51:54なんで隠れてるのお前www
ω・` >⊂ おら、出て来いw
0849デフォルトの名無しさん
2005/11/15(火) 00:55:420850デフォルトの名無しさん
2005/11/15(火) 01:43:44やってみました。むずかしーよー。頭テンパった。
#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;
}
0851デフォルトの名無しさん
2005/11/15(火) 01:44:28{
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;
}
0852デフォルトの名無しさん
2005/11/15(火) 02:23:29思いついたのはソートして隣と不一致な事を確認する、で
>選択文(if,switch)や条件演算子(?:),繰返し文(for,while,do-while)を使わないで作るってのは
思いつかんかった...
0853デフォルトの名無しさん
2005/11/15(火) 07:54:24ヒント:再帰
0854デフォルトの名無しさん
2005/11/15(火) 08:10:29再帰書いてたら頭痛くなってきた。
俺には再帰無理かも。
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));
}
0855デフォルトの名無しさん
2005/11/15(火) 08:29:37#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;
}
0856デフォルトの名無しさん
2005/11/15(火) 12:07:38例によってぱっと見で。
・ソート用比較関数の引き数は、qsort()の第4引き数にあわせたほうがいい。
#const int *だと警告が出ると思う。
・int同士の引き算だと、差がINT_MAXを超えてしまうので都合が悪い。
#より大きな型を使うか、一般的には条件文でいいだろう。
##値域が限定されていることが保証されているなら構わないが。
・qsort()の第二引き数の固定値は拙かろう。
#つーか、len使ってないじゃん。
・配列の要素数を求めるのは、sizeof(配列) / sizeof(*配列)の方が一般的。
#sizeof(int)もこの場合は間違いではないが、ex1の型を変更したらアボン。
##どうせそのときはoverlap()自体を変更する必要があるからとやかく言うなという意見もありそうだが。
0857デフォルトの名無しさん
2005/11/15(火) 13:01:10凄過ぎる・・・
0858昨日の一件でちょっと弱気w
2005/11/15(火) 13:18:48なんか拙かった?
0859デフォルトの名無しさん
2005/11/15(火) 14:25:38プログラム書いた人間じゃないけど参考になってるよ。
0860デフォルトの名無しさん
2005/11/15(火) 17:21:54いやただ尊敬の眼差しでwww
0861831
2005/11/15(火) 20:12:13添削ありがとうございますた。
>・問題の性格上仕方ないけど、memcpy()かぁ……
memcpy()をつかうと何かマズいんでそーか・・・?
横着せずに、一つずつした方が良いんですか?
>・enumの最後の値の後に','を置くのは間違い。
ずーっとカンマ置いてました。
たぶんココで指摘されなかったら
カンマ要るもんだと思い込んでた鴨。
>・点数の入力に関して、条件判断とメッセージの内容が噛みあっていない。
>・intValueと言う名前のint変数でlongの値チェックをするのは如何なものかと。
うぁ、全く気づきませんですた。
名前重要、名前重要と・・。
何回も見直したつもりでしたが、まだまだのようで。
精進しまつ。
0862デフォルトの名無しさん
2005/11/15(火) 21:05:56その手のロジックでは、構造体を使うのが一般的。構造体なら、代入が使える。
→しかし、その問題では配列を使うと言う縛りがあるから仕方ないね。
ということです。仕事柄、memcpy()があると注意Lvが一段上がるからw
で、念のために書くけどintValueはlong型でないとダメで、その場合名前が変だと言うことね。
#LONG_MAXなどを扱うのだから。
0863831
2005/11/15(火) 21:22:24>→しかし、その問題では配列を使うと言う縛りがあるから仕方ないね。
>ということです。仕事柄、memcpy()があると注意Lvが一段上がるからw
なるほどぉ、構造体でつか・・・。
にしてもmemcpy()には要注意とはコレ如何に?
何度もスンマセンです。
>で、念のために書くけどintValueはlong型でないとダメで、その場合名前が変だと言うことね。
>#LONG_MAXなどを扱うのだから。
指摘されて、遅まきながら気づきましたです。ハイ。
0864デフォルトの名無しさん
2005/11/15(火) 21:40:52memcpy()を使わなければ、転送サイズ間違いなどによるバグは発生しない。
仕事柄他人のソースのバグを探ることが多いのだが、バッファオーバランなどのバグは
「本人は正しいと思い込んでいて」、「簡単な動作確認は問題なく通り」、見つけにくいことが多いからね。
他にも、memset(), strncpy(), strncat(), strdup(), realloc()なども注意Lvが一段上がる。
#malloc(), realloc(), calloc(), strdup(), free()はメモリ管理一般として元々注意Lv高めなのだが。
>>842
スレ見返してたらこれ見落としてた。スマン。
そういうわけで、>862参照で。
0866デフォルトの名無しさん
2005/11/15(火) 23:33:35頭よじれたけど何も出てきませんですた。
0867デフォルトの名無しさん
2005/11/15(火) 23:34:56>>832ですた。
0868デフォルトの名無しさん
2005/11/15(火) 23:40:12馬鹿みたい思えてくるw
だって難しいんだもん・・・こんなの反則だよ('A`)
0869デフォルトの名無しさん
2005/11/15(火) 23:59:52C言語やってるのが馬鹿じゃなくって
お前が馬鹿なんだよ
0870デフォルトの名無しさん
2005/11/16(水) 00:12:21382もわからんです。
0871文系
2005/11/16(水) 00:22:50>>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++){
0872文系
2005/11/16(水) 00:23:18case 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;
}
0873文系
2005/11/16(水) 00:24:55printf("社会の点数を入力>>");
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;
}
0874文系
2005/11/16(水) 00:28:19同様に、今回はヒントの書き方が悪かったので分からなかった方もいらっしゃったようですが、原則として文字列が入力されることは考えなくて良いとしてあるので、scanf関数を使用しています。
勿論、使える方はfgetsとsscanf等の組み合わせを使用して頂いても構いません。
なんか、本当にわかり辛くて申し訳ありませんでした。
反省として、暫く出題は控えさせて頂きます。
0875デフォルトの名無しさん
2005/11/16(水) 00:49:19変数名dateは流石に鼻でせせら笑いたくなるんですけど。
0876デフォルトの名無しさん
2005/11/16(水) 00:50:390878デフォルトの名無しさん
2005/11/16(水) 01:08:090879デフォルトの名無しさん
2005/11/16(水) 01:12:17だったら最初から、「文系」なんて名乗るなよ。
date(日付け)なんて中学英語以下の問題だろうが。
0880デフォルトの名無しさん
2005/11/16(水) 01:32:19このスレの皆さんには散々迷惑をかけた上、大した解答も出来ず、本当にすいませんでした。
もう二度と書き込まないので、それでどうか許して下さい。
ROMるなと言われれば、ROMもしません。
本当にすいませんでした。
0881デフォルトの名無しさん
2005/11/16(水) 03:17:21自意識過剰で被害妄想強過ぎ。
0882880
2005/11/16(水) 08:26:50もう書き込まないと言っておきながら、すいません。
一晩経ったのと>>881さんの書き込みで頭が冷えました。
英語の件と、ソースの件を指摘されてから、もっとスレにとって有意義な方向にもっていくべきだったと思います。(今更遅いですが)
言い訳のしようもありません。
>>878
点数をfor文で回すことは思いつきませんでした。(実を言うと最初は考えたのですが、思い付かなくてswitchに逃げたので。)
もしよかったら、今後の勉強のためにそのアルゴリズムを使ったソースを上げてもらえませんでしょうか。
>>879
ご指摘ありがとうございました。
何度も言うように俺は本当に英語が駄目なので、これを機に英語から逃げず、改めて勉強しなおすことにします。
住民のみなさん
こうしてスレと無関係な話題でスレを汚したり、雰囲気を悪くしてしまい、すいませんでした。
0883デフォルトの名無しさん
2005/11/16(水) 09:05:58>>881
0884デフォルトの名無しさん
2005/11/16(水) 09:15:293科目の点数の入力処理で異なる部分は、入力を促すメッセージだけでしょ。それなら
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]);
}
}
}
0885832
2005/11/16(水) 14:18:27はーい、正解乙。でも気になった点があるのでまずは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は「指定範囲外を調べないか」をチェックするため。
0886832
2005/11/16(水) 15:08:53こっちの方がいいか。>>885
>>854
「再帰で書こう」ではなく、「重複しないとはどういうことかを説明しよう」と思って書けば簡単だと思う。
not_find_intsを日本語に訳せば
・配列の長さが1以下であるか(あ、0か。これはやめた方がいい。このコードはたまたま大丈夫だけど(※))、または
・先頭要素が残りの部分に含まれず、残りの部分でも重複がない
って書いてるだけだよね。たまたま説明が再帰的なだけ。
ループだけでなく条件分岐も排除したのはそういう考え方で書かせたかったから。
「こうだったらああしてそうじゃなかったらこうする」みたいな(つまり手続き的な)考え方はして欲しくなかった。
# 書いていい文はreturn文だけ。条件演算子は使用禁止。で良かったかも
# 勿論これは普通の書き方で書けた上での応用問題
※ この書き方だと要素数が1のときnot_find_intに1番目の要素を指すポインタが渡される。
つまり配列の範囲外を指すポインタになるわけで、そういう(実際には何も指していない)ポインタは生成するだけで未定義動作を引き起こす(注:ヌルポインタは別)。
ただ、例外があって、配列の最後の要素の次の要素を指すポインタは生成するだけなら問題ない。
でも指しているオブジェクトの中身を覗こうとするとやっぱり未定義動作になる。
で、not_find_intの定義をみると覗こうとはしていないから実際には大丈夫。だけど呼び出し先の関数にそんなことは期待しちゃいけない。ブラックボックスのように取り扱うべきだ、と。
0887832
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の比較関数だということがわかったとしても降順だと思われそうだ。
0888デフォルトの名無しさん
2005/11/16(水) 21:40:09なるほど、勉強になりました。
ありがとうございました。
0889デフォルトの名無しさん
2005/11/17(木) 00:03:580890850
2005/11/17(木) 02:07:39>・i == j になることってないよね
あ、あれ?もう頭こんがらがっていつの間にか入ってた・・・
>・*(array + i) という式には syntax-sugar(※)があって、array[i]と書くことができる。こう書くことの方が多分多いよ
すいません。array[i]を*(array + i)で書けること最近覚えたんですが
その逆もまたできることに気づかなかった頭の固さが憎い。
>・retを使うより。2重ループを抜けた時点で単に1を返した方がすっきりする。
最初 return 0 を ret = 0 にしてて有り得ない挙動だったから思い切ってここでループ抜けて
他のは直して無かったです。でもこれってgoto文と変わらないですね。
0891デフォルトの名無しさん
2005/11/17(木) 08:17:58>でもこれってgoto文と変わらないですね
だから嫌う人もいるけど、私は手頃な妥協だと思う。
何よりも、retを使って見通しを悪くしてバグの原因を増やすことはない。
#勿論、このケースではgotoを使うべきではないのは言うまでもないけど。
0892デフォルトの名無しさん
2005/11/17(木) 12:11:29breakやcontinueをgotoと同一視するならまだしも
0893デフォルトの名無しさん
2005/11/17(木) 12:23:35#実装も普通そう作るし。
0894デフォルトの名無しさん
2005/11/17(木) 14:50:40/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++;
}
}
0895デフォルトの名無しさん
2005/11/17(木) 15:07:41そのくらいの英語、判らないならExcite翻訳にでも掛けなさいよ。
余りにも簡単すぎるから敢えてノーヒントで。
0896デフォルトの名無しさん
2005/11/17(木) 15:55:15ttp://ja.wikipedia.org/wiki/%E3%83%90%E3%83%83%E3%83%95%E3%82%A1%E3%82%AA%E3%83%BC%E3%83%90%E3%83%BC%E3%83%A9%E3%83%B3
0897デフォルトの名無しさん
2005/11/17(木) 16:07:00ええ、「危険だから使うべきでない」って書いてるのは分かりますが、
どう危険なのかなと思って。"原因"です。
>>896
なるほど、バッファオーバーランが起こる危険性があるですね。
0898デフォルトの名無しさん
2005/11/17(木) 16:25:21つーか、どうせしょぼい暗号を試すなら+3じゃなくて-1でIBMを入力してみればいいのに。
0899デフォルトの名無しさん
2005/11/17(木) 20:16:190900デフォルトの名無しさん
2005/11/17(木) 20:17:18ポインタの使い方を誤ると結構warでたりするが
そこは配列の方が良いんじゃないか?
0901デフォルトの名無しさん
2005/11/17(木) 20:24:14strcpy, strncpy, fopen, plitpath, sprintf, getenv, strcat, itoa
0902デフォルトの名無しさん
2005/11/17(木) 20:38:05マジ?gccじゃ出ないんだが
strcpyでワーニング出るオプション教えてくれ
0903デフォルトの名無しさん
2005/11/17(木) 20:43:35の、*str=(*str+3); は
*str = *(str+3)と書いてもいいんですよね?
0904デフォルトの名無しさん
2005/11/17(木) 20:54:02いいえ、違います。
(*str+3)はstrが指す位置にある文字の文字コードに3加えた値になるが、
*(str+3)はstrの3文字先の値になる。
ところで*str=(*str+3);より*str += 3と書くのが一般的。
0905デフォルトの名無しさん
2005/11/17(木) 21:07:33レスして頂きありがとう御座います。
そうなるのでしたか。考えが足りてませんでした・・・('A`)
0906デフォルトの名無しさん
2005/11/17(木) 23:46:40これって簡単?
0907デフォルトの名無しさん
2005/11/17(木) 23:54:110908デフォルトの名無しさん
2005/11/17(木) 23:59:14どこでつっかかったんだ?
自分で途中まで書いたソースなり、フローチャートっぽいものなりを書き込めば、誰かヒント出してくれるかもよ。
0909デフォルトの名無しさん
2005/11/18(金) 00:07:07イメージとしては
文字列 ABCDABBG
検索文字 AB
置換文字 NTT
置換結果 NTTCDNTTBG
だけど、置換結果用に新しく大きな配列を用意する必要ありですか?
0910デフォルトの名無しさん
2005/11/18(金) 00:13:200911デフォルトの名無しさん
2005/11/18(金) 00:14:22最後に残ったのがNTTだった。
0912デフォルトの名無しさん
2005/11/18(金) 00:14:47system("sed -e 's/ / /g' inFile > outFile");
0913906
2005/11/18(金) 00:19:59下のプログラムを作ってみたけど、全部そのままコピーするだけになってしまいました。
ちなみにうちの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;
}
0914デフォルトの名無しさん
2005/11/18(金) 00:26:48char * 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);
}
0915デフォルトの名無しさん
2005/11/18(金) 00:31:04/* 空白だと見えにくいので「外」で */
int cho = EOF;
while ((ch = getchar()) != EOF) {
if (cho == "外"[0] && ch == "外"[1]) {
cho = 'タ';
ch = 'ト';
}
putchar(cho);
cho = ch;
}
if (cho != EOF) {
putchar(cho);
}
0917デフォルトの名無しさん
2005/11/21(月) 05:44:26模範解答まだですか?
0918デフォルトの名無しさん
2005/11/21(月) 11:21:54まさか、タトを外に見間違えたって落ちじゃないよな。
0919デフォルトの名無しさん
2005/11/21(月) 17:25:59まさか〜
0920デフォルトの名無しさん
2005/11/21(月) 20:16:48if文中の外を全角スペース、タとトを半角スペースに入れ替えるんですよね?
それで無理でした。
ちょこちょこいじってみてもなんか駄目ですが、>>915でいけました?
0922915
2005/11/22(火) 01:40:02int 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);
}
0923デフォルトの名無しさん
2005/11/22(火) 23:12:26フォートランとVBをかじった程度の人間でも分かる参考書って
どなたかご存知ないですか?
立ち読みした限り、「猫でも分かる」は結構難しかったっす
0924デフォルトの名無しさん
2005/11/23(水) 00:31:27うおー、できました!
ありがとうございます。
>>923
純粋なCの入門書のことですよね?
下のスレを見るといいですよ。
ただテンプレで一番情報量のあったサイトが消えてしまってるので、見たい場合はgoogleで
「c言語 site:2chbooks.seesaa.net/ 」で検索してキャッシュで見る必要があります。
推薦図書/必読書のためのスレッド PART27
http://pc8.2ch.net/test/read.cgi/tech/1130602100/
0925デフォルトの名無しさん
2005/11/23(水) 11:39:28文字列で関数を指定する方法ってないですか?
引数でもらう値によって使う関数を変えたいので。
if文でもよいのですが(以下のように)
sub(char c)
{
if(strcmp(c,"A")==0)
{
A();
}
else
{
B();
}
return;
}
引数に関数名(c)が入ってくるので直接使えればなと思い。。。
0926デフォルトの名無しさん
2005/11/23(水) 11:41:49お望み通りのものは無理。
関数テーブルを、関数名をキーにして持つって手もあるけど
その程度なら素直にstrcmpで分けた方がいい。
0927デフォルトの名無しさん
2005/11/23(水) 12:13:29やっぱそうなんですかー。
なんかうまい手があるかもしれないと思っていたので残念です。
レスありがとうございました。
0928915
2005/11/23(水) 13:42:48その例なら、
void sub(char c)
{
void (*func)();
switch (c) {
case 'A':
func = A;
break;
case 'B':
default:
func = B;
break;
}
func();
return;
}
ってところかな。
0929デフォルトの名無しさん
2005/11/23(水) 13:43:300930デフォルトの名無しさん
2005/11/24(木) 21:07:560931デフォルトの名無しさん
2005/11/24(木) 22:55:13#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;
}
0932デフォルトの名無しさん
2005/11/24(木) 23:30:24#defineで定義する名前は識別子でなければならない。
変数・関数名などと同じで英字・下線で始まり,2文字目以降はそれに加え数字が使える。
だから#define gt_eq <=のような例はいいけど、その例のように記号は無理。
0933デフォルトの名無しさん
2005/11/24(木) 23:39:540934デフォルトの名無しさん
2005/11/24(木) 23:52:180935デフォルトの名無しさん
2005/11/25(金) 09:11:33知らなかった。。
どうもです。
>>933
無念・・・。
0936デフォルトの名無しさん
2005/11/25(金) 10:47:57プリプロセッサにm4使ったり自作したりすればいいw
0937デフォルトの名無しさん
2005/11/28(月) 15:17:02gets関数を使ってif文を作りなさい
0938デフォルトの名無しさん
2005/11/28(月) 15:28:340939デフォルトの名無しさん
2005/11/28(月) 17:19:55gets関数を使ってwhile文を作りなさい
0940デフォルトの名無しさん
2005/11/28(月) 18:47:010941デフォルトの名無しさん
2005/11/29(火) 13:56:39gets関数を使ってif文とwhile文を使った7行のプログラムを無理矢理作りなさい
0942デフォルトの名無しさん
2005/11/29(火) 14:18:45しらけてる空気を読めよ馬鹿
0943デフォルトの名無しさん
2005/11/29(火) 15:16:06ワロタ
0944デフォルトの名無しさん
2005/11/29(火) 15:40:08そんなアバウトな
0945デフォルトの名無しさん
2005/11/29(火) 17:44:280946デフォルトの名無しさん
2005/11/29(火) 18:45:310947デフォルトの名無しさん
2005/11/29(火) 19:03:28KWSK
0948デフォルトの名無しさん
2005/11/29(火) 19:39:13続きは沢山あるC言語のスレのどれかへ移動です。
0949デフォルトの名無しさん
2005/11/29(火) 23:16:570950デフォルトの名無しさん
2005/11/29(火) 23:52:490951デフォルトの名無しさん
2005/11/30(水) 02:44:400952デフォルトの名無しさん
2005/11/30(水) 02:56:530953デフォルトの名無しさん
2005/11/30(水) 07:48:25宿題スレやC/C++室でやる方が人の分散も無く良いんじゃないかな
次を立てても廃墟の予感
0954デフォルトの名無しさん
2005/11/30(水) 08:21:33次は↑このスレ使えばいいじゃん?
0955デフォルトの名無しさん
2005/11/30(水) 09:18:00そこはコテの私物
0956デフォルトの名無しさん
2005/11/30(水) 09:32:20いいじゃんかよーここもコテの私物から始まったんじゃん?
0957デフォルトの名無しさん
2005/11/30(水) 09:36:59おまえのやってることはただの荒らし依頼だ
0958デフォルトの名無しさん
2005/11/30(水) 09:49:03はぁ?どこがだ?
0959デフォルトの名無しさん
2005/11/30(水) 09:56:45無関係のスレを次スレとして指定することに違和感ない?
両方のスレの合意を取るのが先だろう
0960デフォルトの名無しさん
2005/11/30(水) 10:00:270961デフォルトの名無しさん
2005/11/30(水) 17:46:38いや、あっちの中身はスレタイとはかなりそぐわない。
0962デフォルトの名無しさん
2005/11/30(水) 19:21:33とても勉強になったよ。ありがとう。
0963デフォルトの名無しさん
2005/11/30(水) 20:47:080964デフォルトの名無しさん
2005/12/01(木) 00:12:350965デフォルトの名無しさん
2005/12/02(金) 19:21:18どのように処理すれば良いですか?
具体的にはトランプなどです。
0966デフォルトの名無しさん
2005/12/02(金) 19:24:520967デフォルトの名無しさん
2005/12/02(金) 19:25:06あらかじめ出るであろう数だけ配列作っておいて
出た奴は1にでもしてifで判定する
0968デフォルトの名無しさん
2005/12/02(金) 19:42:15前回の情報処理の試験で出てたよ
0969デフォルトの名無しさん
2005/12/02(金) 19:54:17スイッチ立てまくるんですね。
>>968
CASLで取ったので見てませんでした。
見てみます。
0970デフォルトの名無しさん
2005/12/02(金) 21:16:430971デフォルトの名無しさん
2005/12/03(土) 00:57:40同じものが連続して出てくるケースだといつまでたっても・・・
ということでシャッフルが終わる時間の保証がありません。
他のアルゴリズムを採用することをお勧めします。
0972デフォルトの名無しさん
2005/12/03(土) 11:14:390〜51までの乱数を発生させる
その乱数の位置にある数がカードの山から取り出した数になる
取り出した数はもう2度と使わないので一番後ろの数とスワップする
カードは51枚になったので0〜50までの乱数を発生させる
・
・
・
(以下繰り返し)
0973デフォルトの名無しさん
2005/12/03(土) 11:26:350974デフォルトの名無しさん
2005/12/03(土) 14:11:50ttp://www.hyuki.com/d/200510.html#i20051020190000
0975デフォルトの名無しさん
2005/12/03(土) 19:51:09どっちかというと >>973 の方を薦める
0976デフォルトの名無しさん
2005/12/04(日) 13:16:45解答編でもダメ?
0977デフォルトの名無しさん
2005/12/04(日) 13:23:290978デフォルトの名無しさん
2005/12/06(火) 21:44:13975ではないが解答編なら大丈夫っぽい
0979デフォルトの名無しさん
2005/12/06(火) 22:55:460980デフォルトの名無しさん
2005/12/06(火) 23:37:24ワタシニポンゴヨクワカラナイヨ
0981デフォルトの名無しさん
2005/12/08(木) 17:37:32まああれだ。文章は読むな、空気を嫁。と。
0982デフォルトの名無しさん
2005/12/08(木) 21:51:260983デフォルトの名無しさん
2005/12/08(木) 22:12:54それと、もっと早くプログラムを打ち込みたいなら
手の一部を擬態化するといい。
0984デフォルトの名無しさん
2005/12/08(木) 23:02:15○義体
0985デフォルトの名無しさん
2005/12/09(金) 02:44:26要領のいい頭じゃないことはよくわかった。
0986デフォルトの名無しさん
2005/12/11(日) 10:22:040987デフォルトの名無しさん
2005/12/11(日) 11:24:40ここの問題4,5問やっと解けるようになってからのレベルがテラタカス
0988デフォルトの名無しさん
2005/12/11(日) 12:34:300989デフォルトの名無しさん
2005/12/11(日) 12:52:420990デフォルトの名無しさん
2005/12/11(日) 15:11:54Cスレ立ちすぎ。
0991デフォルトの名無しさん
2005/12/11(日) 16:27:570992デフォルトの名無しさん
2005/12/11(日) 17:17:29みんなきてねーwwwww
0993デフォルトの名無しさん
2005/12/11(日) 18:10:19移動するならおまえが説得してこい
0994デフォルトの名無しさん
2005/12/11(日) 18:51:59なんでも反対したがるアフォは無視してみんなでもりあげてくださいね(^^)
0995デフォルトの名無しさん
2005/12/11(日) 19:12:10解散。
0996デフォルトの名無しさん
2005/12/11(日) 19:17:47関係者ならコテだせよ
あと断った奴を誤りに来させろ
0997デフォルトの名無しさん
2005/12/11(日) 19:25:43いやだねーあたまのおかしい人は(^^)
こんなキモいヤシにコテ出したらつきまとわれるの確実wwww
0998デフォルトの名無しさん
2005/12/11(日) 19:36:220999デフォルトの名無しさん
2005/12/11(日) 19:37:121000デフォルトの名無しさん
2005/12/11(日) 19:37:59あたいのスペックは
26歳フリーター、パソコン歴インターネット歴は6年
しかしそれ以外の事は何もできにゃーい…
というわけで今日から参考書を買ってがんばります!
今まさに私みたいに、これからCを勉強するぞって人いたら
よろしくね!!!
前スレが一杯になりそうなので新しく作りました☆
今日でC言語歴約2週間です^^;
簡単な文字の表示はできるようになったんですが
進むペースは亀さん並に遅いので、ゆっくり見守ってね(><。)
もっと容量のいい頭がほしいー(><。)
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。