プログラムをお勉強するスレ

1 名前:自称プロ名無ぴ [2009/08/29(土) 17:58:39]
講師: メ

環境: http://codepad.org/
2 名前: [2009/08/29(土) 18:31:15]
勉強したいなら自分で努力しろボケが
3 名前:自称プロ名無ぴ [2009/08/29(土) 18:33:54]
C言語演習1
unsigned int の値を10進数の文字列に変換する関数を作成しなさい。
4 名前: [2009/08/29(土) 18:37:24]
itoa使え
5 名前:自称プロ名無ぴ [2009/08/29(土) 19:13:35]
>>3
#include <stdio.h>

char* ul2dec(char* buf, unsigned int val)
{
unsigned int keta = 1000000000;
unsigned int temp;
int i;
int j = 0;
int flag = 0;
for (i = 0; i < 10; ++i) {
temp = val / keta;
val -= (temp * keta);
keta /= 10;
if (temp) {
flag = 1;
}
if (flag) {
buf[j] = temp + '0';
//printf("[%c]", buf[j]);
++j;
}
}
buf[i] = '\0';
return buf;
}

int main(void)
{
char buf[32];
unsigned int val;

val = (unsigned int )-1;
printf("[%u]\n", val);
printf("[%s]\n\n", ul2dec(buf, val));

val = 1234567890;
printf("[%u]\n", val);
printf("[%s]\n\n", ul2dec(buf, val));

val = 9;
printf("[%u]\n", val);
printf("[%s]\n\n", ul2dec(buf, val));

val = 0;
printf("[%u]\n", val);
printf("[%s]\n\n", ul2dec(buf, val));

return 0;
}

6 名前:自称プロ名無ぴ [2009/08/29(土) 19:15:59]
>>3
#include <stdio.h>

char* ul2dec(char* buf, unsigned int val)
{
  unsigned int keta = 1000000000;
  unsigned int temp;
  int i;
  int j = 0;
  int flag = 0;
  for (i = 0; i < 10; ++i) {
    temp = val / keta;
    val -= (temp * keta);
    keta /= 10;
    if (temp) {
      flag = 1;
    }
    if (flag) {
      buf[j] = temp + '0';
      //printf("[%c]", buf[j]);
      ++j;
    }
  }
  buf[i] = '\0';
  return buf;
}

int main(void)
{
  char buf[32];
  unsigned int val;

  val = (unsigned int )-1;
  printf("[%u]\n", val);
  printf("[%s]\n\n", ul2dec(buf, val));

  val = 1234567890;
  printf("[%u]\n", val);
  printf("[%s]\n\n", ul2dec(buf, val));

  val = 9;
  printf("[%u]\n", val);
  printf("[%s]\n\n", ul2dec(buf, val));

  val = 0;
  printf("[%u]\n", val);
  printf("[%s]\n\n", ul2dec(buf, val));

  return 0;
}
7 名前: [2009/08/29(土) 19:16:56]
新人がこんな関数作ったらレビューで1時間は説教する
8 名前:自称プロ名無ぴ [2009/08/29(土) 19:22:33]
CADって知ってる?
なんか使えるようになって欲しいみたいなんだけど
9 名前:自称プロ名無ぴ [2009/08/29(土) 19:23:16]
メキシコならどんな関数つくるん?
ライブラリつかうのはなしで
10 名前:自称プロ名無ぴ [2009/08/29(土) 19:25:42]
>>8
OrCadならしってる
11 名前: [2009/08/29(土) 19:47:54]
>>9
引数ポインタを戻り値にしない
ketaとかtempとか変な変数名は使わない
unsigned intが10進数で10桁に収まるからこう書いているとコメントに記述する
意味がないflagは使わない
iとjを使い間違えてバグっていない

という関数を書く
12 名前: [2009/08/29(土) 19:49:16]
あと関数名とか引数の順番もよく考えた関数を書く
13 名前: [2009/08/29(土) 19:56:28]
あとバッファオーバーフロー防ぐためにバッファのサイズを引数に追加する
14 名前:自称プロ名無ぴ [2009/08/29(土) 20:03:57]
>>6
% とか/ を使わずにかけたら神なのにな
15 名前:自称プロ名無ぴ [2009/08/29(土) 20:25:03]
それはさすがに無理だろ
シンプルじゃなくなる
16 名前:自称プロ名無ぴ [2009/08/29(土) 20:25:49]
>>11
>iとjを使い間違えてバグっていない
さすがメキシコ様
17 名前:自称プロ名無ぴ [2009/08/29(土) 23:55:34]
>意味がないflagは使わない
意味あるやんけ
18 名前:自称プロ名無ぴ [2009/08/30(日) 02:59:16]
Cとかよくわかんないんだけど
flagの値1以外になるのこれ
あと
if (temp) {
 buf[j] = temp + '0';
 //printf("[%c]", buf[j]);
 ++j;
}
じゃだめなの
19 名前:自称プロ名無ぴ [2009/08/30(日) 07:44:37]
 http://codepad.org/
で実行してみるとわかるけど駄目
20 名前:自称プロ名無ぴ [2009/08/30(日) 08:51:46]
if (temp) {
 flag = 1;
}
if (flag) {
buf[j] = temp + '0';
 :

がよくて

if (temp) {
buf[j] = temp + '0';
 :

がだめとかC難解過ぎる・・・
21 名前:自称プロ名無ぴ [2009/08/30(日) 09:04:02]
>>20はゆとりだな
22 名前:自称プロ名無ぴ [2009/08/30(日) 09:06:04]
え、なんで?
23 名前:自称プロ名無ぴ [2009/08/30(日) 14:24:30]
1000と言う値がどのように表示されるか考えてみようよ
24 名前:ハトダンナ ◆CHADANur5o [2009/08/31(月) 15:37:50]
仕事の合間に。

#include <stdio.h>
#define BUFFER_SIZE 32

char *ultos_recur(char *buf, unsigned int num, char *bufend)
{
 if (num >= 10) {
  buf = ultos_recur(buf, num / 10, bufend);
 }
 if (buf != bufend) {
  *buf++ = num % 10 + '0';
 }
 return buf;
}

void ultos(char *buf, unsigned int num, int buffer_size)
{
 *ultos_recur(buf, num, buf + buffer_size - 1) = '\0';
}

int main()
{
 char buf[BUFFER_SIZE];
 unsigned int val;
 
 val = (unsigned int)-1;
 ultos(buf, val, BUFFER_SIZE);
 printf("[%u] -> [%s]\n\n", val, buf);
 
 val = 1234567890;
 ultos(buf, val, BUFFER_SIZE);
 printf("[%u] -> [%s]\n\n", val, buf);
 
 val = 9;
 ultos(buf, val, BUFFER_SIZE);
 printf("[%u] -> [%s]\n\n", val, buf);
 
 val = 0;
 ultos(buf, val, BUFFER_SIZE);
 printf("[%u] -> [%s]\n\n", val, buf);
 
 val = (unsigned int)-1;
 ultos(buf, val, 4);
 printf("[%u] -> [%s]\n\n", val, buf);
 
 return 0;
}
25 名前: [2009/08/31(月) 15:43:03]
おおスゲー
26 名前:自称プロ名無ぴ [2009/08/31(月) 16:12:28]
メキシコがスゲーって言ってるからすげえんだろうな
27 名前:人狼教諭 ◆doomsroUk. [2009/08/31(月) 16:38:43]
こう言うの見るといっつも「なんでいちいち{で改行するの」って思う。
28 名前:人狼教諭 ◆doomsroUk. [2009/08/31(月) 16:39:59]
{ *ultos_recur(buf, num, buf + buffer_size - 1) = '\0';}

じゃ何でダメなん?
いや全然意味分かってないけど。
29 名前:自称プロ名無ぴ [2009/08/31(月) 16:45:30]
さすがチャダはNHKで講師してるだけあるな
30 名前:自称プロ名無ぴ [2009/08/31(月) 16:46:35]
#include <stdio.h>
#define BUFFER_SIZE 32
char *ultos_recur(char *buf, unsigned int num, char *bufend)
{if (num >= 10) {buf = ultos_recur(buf, num / 10, bufend);}
if (buf != bufend) {*buf++ = num % 10 + '0';}
return buf;}
void ultos(char *buf, unsigned int num, int buffer_size)
{*ultos_recur(buf, num, buf + buffer_size - 1) = '\0';}
int main()
{char buf[BUFFER_SIZE];unsigned int val;
val = (unsigned int)-1;ultos(buf, val, BUFFER_SIZE);printf("[%u] -> [%s]\n\n", val, buf);
val = 1234567890;ultos(buf, val, BUFFER_SIZE);printf("[%u] -> [%s]\n\n", val, buf);
val = 9;ultos(buf, val, BUFFER_SIZE);printf("[%u] -> [%s]\n\n", val, buf);
val = 0;ultos(buf, val, BUFFER_SIZE);printf("[%u] -> [%s]\n\n", val, buf);
val = (unsigned int)-1;ultos(buf, val, 4);printf("[%u] -> [%s]\n\n", val, buf);
return 0;}
31 名前: [2009/08/31(月) 16:55:01]
;}で改行したら;で終わる行と;}で終わる行が混在して見づらいやんけ
32 名前:自称プロ名無ぴ [2009/08/31(月) 16:55:44]
問題ないけど見にくいから
33 名前:人狼教諭 ◆doomsroUk. [2009/08/31(月) 17:03:22]
あー、;で終わる行と終わらない行は凄く意味が違うのね、、、
;は「この処理は次の行まで続いてますよ〜」って意味なのかな、、、
34 名前:┃┃¨╋┓ ◆BAKA [2009/08/31(月) 17:15:10]
|ω・) 今時のプログラムが人間が読み書きしやすいようにしないとダメらしいYO!
35 名前:自称プロ名無ぴ [2009/08/31(月) 17:19:49]
もうちょっと読み書きしやすいレスして下さい
36 名前:自称プロ名無ぴ [2009/08/31(月) 18:07:27]
>>33
1つの文の終わりに「;」をつけます。
たとえば、

if (a % 2 == 0) {
 puts("偶数です");
 even_count++;
} else {
 puts("奇数です");
 odd_count++;
}

これの意味を日本語で書くと

もし a が 2 で割り切れるなら、実行ここから
 「偶数です」と表示する。
 偶数カウントを1繰り上げる
ここまで。それ以外なら、実行ここから
 「奇数です」と表示する。
 奇数カウントを1繰り上げる。
ここまで

こうなります。
37 名前:自称プロ名無ぴ [2009/08/31(月) 18:08:39]
人狼さん方式だと、

もし a が 2 で割り切れるなら、
実行ここから 「偶数です」と表示する。
偶数カウントを1繰り上げる ここまで。
それ以外なら、
実行ここから 「奇数です」と表示する。
奇数カウントを1繰り上げる。ここまで

になり、「ここから」と「ここまで」の範囲がわかりにくくなります。
38 名前:自称プロ名無ぴ [2009/08/31(月) 19:06:32]
だからチャダは名無しで書くなハトダンナで書けやがれよろしくおねがいします
39 名前:自称プロ名無ぴ [2009/08/31(月) 19:40:17]
再帰って久しぶりに見た
うちの仕事じゃご法度
40 名前: [2009/08/31(月) 21:12:00]
#include <stdio.h>
#include <string>

typedef wchar_t (*filterType)(unsigned int);

wchar_t uintToWchar(unsigned int val){
return (char)val + L'0';
}

std::wstring& map_uint(unsigned int val, std::wstring& str, filterType filter){
if(val < 10) {
return str = filter(val);
}else{
return map_uint(val / 10, str, filter) += filter(val % 10);
}
}

void myitoa(unsigned int val, std::wstring& str){
map_uint(val, str, uintToWchar);
}

int main(int argc, char* argv[]){
int val;
std::wstring str;

val = (unsigned int)-1;
myitoa(val, str);
wprintf(L"[%u] -> [%s]\n\n", val, str.c_str());

val = 1234567890;
myitoa(val, str);
wprintf(L"[%u] -> [%s]\n\n", val, str.c_str());

val = 9;
myitoa(val, str);
wprintf(L"[%u] -> [%s]\n\n", val, str.c_str());

val = 0;
myitoa(val, str);
wprintf(L"[%u] -> [%s]\n\n", val, str.c_str());

return 0;
}

41 名前:自称プロ名無ぴ [2009/08/31(月) 21:16:28]
なんだかやっちゃった感満載
42 名前: [2009/08/31(月) 21:17:21]
ダンナに対抗して高階関数っぽく
43 名前: [2009/08/31(月) 21:19:24]
こうか!!

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

typedef wchar_t (*filterType)(unsigned int);

wchar_t uintToWchar(unsigned int val)
{
return (wchar_t)val + L'0';
}

std::wstring& map_uint(unsigned int val, std::wstring& str, filterType filter)
{
if(val < 10)
{
return str = filter(val);
}
else
{
return map_uint(val / 10, str, filter) += filter(val % 10);
}
}

void myitoa(unsigned int val, std::wstring& str)
{
map_uint(val, str, uintToWchar);
}

int main(int argc, char* argv[])
{
int val;
std::wstring str;

val = (unsigned int)-1;
myitoa(val, str);
wprintf(L"[%u] -> [%s]\n\n", val, str.c_str());

return 0;
}
44 名前: [2009/08/31(月) 21:19:52]
あれ、どうやったらインデントされるの
45 名前:┃┃¨╋┓ ◆BAKA [2009/08/31(月) 21:45:15]
|ω・) 全角スペースだYO!
46 名前: [2009/08/31(月) 21:54:49]
http://codepad.org/PdD8G5QP
こっちに書いた
47 名前: [2009/08/31(月) 22:13:48]
俺のコードは美しいなあ・・・
我ながらほれぼれするわ
48 名前:自称プロ名無ぴ [2009/08/31(月) 22:15:36]
余裕がないよね
49 名前:@・д・@ ◆pTfPABM1Xg [2009/08/31(月) 23:50:28]
ホント綺麗だね
機械が書いたみたい
50 名前:たけダ [2009/08/31(月) 23:59:58]
例えばビキニ画像がヌードになるとか、世の中のためになるプログラムのひとつも作れないようなプログラマーは半人前だ。
51 名前:名無ぴ [2009/09/01(火) 00:07:42]
くっだらない
52 名前:たけダ [2009/09/01(火) 00:12:26]
そう言われてみると40前の妻子持ちにしては恥ずかしい発言だったと赤面せずにはいられないな。
53 名前:(:゚↓゚) [2009/09/01(火) 00:15:22]
意外と素直
54 名前:名無ぴ [2009/09/01(火) 00:19:07]
赤面してるたけダ可愛い〜
55 名前:名無ぴ [2009/09/01(火) 19:54:22]
>>46
これ見て思ったんだけど、メキシコって会社でまわりの人に嫌われているでしょ
56 名前:人狼教諭 ◆doomsroUk. [2009/09/01(火) 20:06:52]
なんか臭うぞ、、、
57 名前: [2009/09/01(火) 20:11:32]
>>46をどう見たらそういう感想になるのか興味深い
58 名前:人狼教諭 ◆doomsroUk. [2009/09/01(火) 20:12:51]
オレは「コードの中にドリくんがいるな、、、」と思った。
59 名前:@・д・@ ◆pTfPABM1Xg [2009/09/01(火) 21:31:43]
スパゲッティコードってことか
60 名前: [2009/09/01(火) 21:50:21]
mapとfilterを見てわかりづらいと思うか、抽象度が高い良い設計と思うか、こんなの当たり前と思うかで大体の実力がわかるよ
61 名前:名無ぴ [2009/09/01(火) 21:51:37]
こ、こんなのあたり前だよな!
62 名前: [2009/09/01(火) 21:55:05]
クラッカー!
63 名前:名無ぴ [2009/09/01(火) 21:55:42]
関数の名前がちょっと違うだけで俺も同じの考えてたし!
64 名前:名無ぴ [2009/09/01(火) 22:09:12]
俺なんてフランス語で考えてたもんね
65 名前: [2009/09/01(火) 22:19:23]
ボンジュール!
66 名前:名無ぴ [2009/09/02(水) 00:30:48]
#include <sstream>

template <typename Ret, typename Arg>
Ret lexical_cast(const Arg &arg)
{
  std::stringstream stream;
  stream << arg;
  Ret ret;
  stream >> ret;
  return ret;
}

int main()
{
  unsigned int val;

  val = (unsigned int )-1;
  std::cout << "[" << val << "]" << std::endl;
  std::cout << "[" << lexical_cast<std::string, unsigned int>(val) << "]" << std::endl << std::endl;

  val = 1234567890;
  std::cout << "[" << val << "]" << std::endl;
  std::cout << "[" << lexical_cast<std::string, unsigned int>(val) << "]" << std::endl << std::endl;

  val = 7890;
  std::cout << "[" << val << "]" << std::endl;
  std::cout << "[" << lexical_cast<std::string, unsigned int>(val) << "]" << std::endl << std::endl;

  val = 0;
  std::cout << "[" << val << "]" << std::endl;
  std::cout << "[" << lexical_cast<std::string, unsigned int>(val) << "]" << std::endl << std::endl;

  return 0;
}
67 名前:名無ぴ [2009/09/02(水) 00:38:11]
  val = (unsigned int )-1;

    ↓

  val = static_cast<unsigned int>(-1);
68 名前:名無ぴ [2009/09/02(水) 20:29:01]
さっぱわがんね
69 名前: [2009/09/02(水) 20:56:32]
>>66は変換する型に汎用性あるけど変換処理が自前じゃないからatoi使うのと一緒やんけ
70 名前:名無ぴ [2009/09/02(水) 21:15:14]
さすがメキシコ様
71 名前: [2009/09/02(水) 21:17:58]
俺が常に正しい!!
俺がルールブック!!
72 名前:名無ぴ [2009/09/02(水) 21:19:06]
じゃあ次、再帰を使わないバージョン行ってみようか!
73 名前: [2009/09/02(水) 21:32:00]
他のお題無いのか
74 名前:名無ぴ [2009/09/02(水) 21:37:01]
チャダとメヒコってどっちが凄いのん?
75 名前: [2009/09/02(水) 21:41:44]
俺こそが最強!!
76 名前:名無ぴ [2009/09/02(水) 21:43:08]
プログラミング対決!

チャダ vs メ
77 名前:名無ぴ [2009/09/02(水) 21:45:54]
対決したところでどっちが凄いのかまったくわからん
78 名前:名無ぴ [2009/09/02(水) 21:49:15]
将棋の思考プログラム作って戦わせてほしい
79 名前:名無ぴ [2009/09/29(火) 20:25:47]
vector<int> v;
find_if(v.begin(), v.end(), [](int x) -> bool { return x % 2 == 0; });
80 名前: [2009/09/29(火) 20:54:58]
C++にλ式の機能なんか追加して誰が喜ぶんだろうな
81 名前:名無ぴ [2009/09/29(火) 21:11:37]
R言語でもおぼえるかな
82 名前:名無ぴ [2009/09/29(火) 21:20:10]
λλλλλλλ λλ    λ<マッテー
83 名前:名無ぴ [2013/04/29(月) 23:04:46]
とりあえず上げとこう
◆新着レス表示 次100 最新50 全表示 お絵描く 削除依頼 掲示板に戻る (*・∀・)<16KB
名前: コマンド:
FILE: FILE削除PW

TrackBackURL :: http://chadan.org/test/tback.cgi/talk/1251536319/
RSS/ATOM Data :: Board: RSS1.0 RSS2.0 ATOM Thread: RSS1.0 RSS2.0 ATOM
Level3-BBS System (alpha9) / by 3Lab::CGI