C言語なら俺に聞け(入門篇)at TECH
C言語なら俺に聞け(入門篇) - 暇つぶし2ch50:デフォルトの名無しさん
06/05/10 09:00:42
>>48
CでCGI書けばいいだけの話?

51:デフォルトの名無しさん
06/05/10 15:09:41
10000以下の素数をすべて表示するプログラムを
書いていただけないでしょうかお願いします。

52:デフォルトの名無しさん
06/05/10 15:32:58
10000以下の素数を全て表示するアルゴリズム(手順)を示してくれ。

Cのフレームワーク無いね。時代はJava。
遅いって? いいんだよ、速い鯖買わせる理由に成るじゃん。

53:デフォルトの名無しさん
06/05/10 15:42:16
アルゴリズムとか本当よくわからなくて…すいません
ノートにはアルゴリズム=最小単位 ;で区切る 「文」とあります

その前の問題がこんな問題だったので参考になるでしょうか?

変数を二つ以上宣言してそれぞれに自分の好きな値(ゼロではない)を代入し
ふたつの変数のビット演算子による結果を表示するプログラムを作る

int a;
int b;

a=?
b=?


54:デフォルトの名無しさん
06/05/10 22:23:06
>>51
#include <stdio.h>

int main(void)
{
 puts("10000以下の素数すべて");
 return 0;
}


55:デフォルトの名無しさん
06/05/10 22:53:35
int main() {printf("2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199 211 223 227 229 233 239 241 251 257 263 269 271 277 281 283 293 307 311 313"
" 317 331 337 347 349 353 359 367 373 379 383 389 397 401 409 419 421 431 433 439 443 449 457 461 463 467 479 487 491 499 503 509 521 523 541 547 557 563 569 571 577 587 593 599 601 607 613 617 619 631 641 643 647 653 659 661 673 677 683 691 701 709"
" 719 727 733 739 743 751 757 761 769 773 787 797 809 811 821 823 827 829 839 853 857 859 863 877 881 883 887 907 911 919 929 937 941 947 953 967 971 977 983 991 997 1009 1013 1019 1021 1031 1033 1039 1049 1051 1061 1063 1069 1087 1091 1093 1097 1103"
" 1109 1117 1123 1129 1151 1153 1163 1171 1181 1187 1193 1201 1213 1217 1223 1229 1231 1237 1249 1259 1277 1279 1283 1289 1291 1297 1301 1303 1307 1319 1321 1327 1361 1367 1373 1381 1399 1409 1423 1427 1429 1433 1439 1447 1451 1453 1459 1471 1481 1483"
" 1487 1489 1493 1499 1511 1523 1531 1543 1549 1553 1559 1567 1571 1579 1583 1597 1601 1607 1609 1613 1619 1621 1627 1637 1657 1663 1667 1669 1693 1697 1699 1709 1721 1723 1733 1741 1747 1753 1759 1777 1783 1787 1789 1801 1811 1823 1831 1847 1861 1867"
" 1871 1873 1877 1879 1889 1901 1907 1913 1931 1933 1949 1951 1973 1979 1987 1993 1997 1999 2003 2011 2017 2027 2029 2039 2053 2063 2069 2081 2083 2087 2089 2099 2111 2113 2129 2131 2137 2141 2143 2153 2161 2179 2203 2207 2213 2221 2237 2239 2243 2251"
" 2267 2269 2273 2281 2287 2293 2297 2309 2311 2333 2339 2341 2347 2351 2357 2371 2377 2381 2383 2389 2393 2399 2411 2417 2423 2437 2441 2447 2459 2467 2473 2477 2503 2521 2531 2539 2543 2549 2551 2557 2579 2591 2593 2609 2617 2621 2633 2647 2657 2659"
" 2663 2671 2677 2683 2687 2689 2693 2699 2707 2711 2713 2719 2729 2731 2741 2749 2753 2767 2777 2789 2791 2797 2801 2803 2819 2833 2837 2843 2851 2857 2861 2879 2887 2897 2903 2909 2917 2927 2939 2953 2957 2963 2969 2971 2999 3001"
/*

56:デフォルトの名無しさん
06/05/10 22:54:22
*/" 3011 3019 3023 3037"
" 3041 3049 3061 3067 3079 3083 3089 3109 3119 3121 3137 3163 3167 3169 3181 3187 3191 3203 3209 3217 3221 3229 3251 3253 3257 3259 3271 3299 3301 3307 3313 3319 3323 3329 3331 3343 3347 3359 3361 3371 3373 3389 3391 3407 3413 3433 3449 3457 3461 3463"
" 3467 3469 3491 3499 3511 3517 3527 3529 3533 3539 3541 3547 3557 3559 3571 3581 3583 3593 3607 3613 3617 3623 3631 3637 3643 3659 3671 3673 3677 3691 3697 3701 3709 3719 3727 3733 3739 3761 3767 3769 3779 3793 3797 3803 3821 3823 3833 3847 3851 3853"
" 3863 3877 3881 3889 3907 3911 3917 3919 3923 3929 3931 3943 3947 3967 3989 4001 4003 4007 4013 4019 4021 4027 4049 4051 4057 4073 4079 4091 4093 4099 4111 4127 4129 4133 4139 4153 4157 4159 4177 4201 4211 4217 4219 4229 4231 4241 4243 4253 4259 4261"
" 4271 4273 4283 4289 4297 4327 4337 4339 4349 4357 4363 4373 4391 4397 4409 4421 4423 4441 4447 4451 4457 4463 4481 4483 4493 4507 4513 4517 4519 4523 4547 4549 4561 4567 4583 4591 4597 4603 4621 4637 4639 4643 4649 4651 4657 4663 4673 4679 4691 4703"
" 4721 4723 4729 4733 4751 4759 4783 4787 4789 4793 4799 4801 4813 4817 4831 4861 4871 4877 4889 4903 4909 4919 4931 4933 4937 4943 4951 4957 4967 4969 4973 4987 4993 4999 5003 5009 5011 5021 5023 5039 5051 5059 5077 5081 5087 5099 5101 5107 5113 5119"
" 5147 5153 5167 5171 5179 5189 5197 5209 5227 5231 5233 5237 5261 5273 5279 5281 5297 5303 5309 5323 5333 5347 5351 5381 5387 5393 5399 5407 5413 5417 5419 5431 5437 5441 5443 5449 5471 5477 5479 5483 5501 5503 5507 5519 5521 5527 5531 5557 5563 5569"
" 5573 5581 5591 5623 5639 5641 5647 5651 5653 5657 5659 5669 5683 5689 5693 5701 5711 5717 5737 5741 5743 5749 5779 5783 5791 5801 5807 5813 5821 5827 5839 5843 5849 5851 5857 5861 5867 5869 5879 5881 5897 5903 5923 5927 5939 5953 5981 5987 6007 6011"
" 6029 6037 6043 6047 6053 6067 6073 6079 6089 6091 6101 6113 6121 6131 6133 6143 6151 6163 6173 6197 6199 6203 6211 6217 6221 6229 6247 6257 6263 6269 6271 6277 6287 6299 6301 6311 6317 6323"
/*

57:デフォルトの名無しさん
06/05/10 22:54:56
*/" 6329 6337 6343 6353 6359 6361 6367 6373 6379 6389 6397 6421"
" 6427 6449 6451 6469 6473 6481 6491 6521 6529 6547 6551 6553 6563 6569 6571 6577 6581 6599 6607 6619 6637 6653 6659 6661 6673 6679 6689 6691 6701 6703 6709 6719 6733 6737 6761 6763 6779 6781 6791 6793 6803 6823 6827 6829 6833 6841 6857 6863 6869 6871"
" 6883 6899 6907 6911 6917 6947 6949 6959 6961 6967 6971 6977 6983 6991 6997 7001 7013 7019 7027 7039 7043 7057 7069 7079 7103 7109 7121 7127 7129 7151 7159 7177 7187 7193 7207 7211 7213 7219 7229 7237 7243 7247 7253 7283 7297 7307 7309 7321 7331 7333"
" 7349 7351 7369 7393 7411 7417 7433 7451 7457 7459 7477 7481 7487 7489 7499 7507 7517 7523 7529 7537 7541 7547 7549 7559 7561 7573 7577 7583 7589 7591 7603 7607 7621 7639 7643 7649 7669 7673 7681 7687 7691 7699 7703 7717 7723 7727 7741 7753 7757 7759"
" 7789 7793 7817 7823 7829 7841 7853 7867 7873 7877 7879 7883 7901 7907 7919 7927 7933 7937 7949 7951 7963 7993 8009 8011 8017 8039 8053 8059 8069 8081 8087 8089 8093 8101 8111 8117 8123 8147 8161 8167 8171 8179 8191 8209 8219 8221 8231 8233 8237 8243"
" 8263 8269 8273 8287 8291 8293 8297 8311 8317 8329 8353 8363 8369 8377 8387 8389 8419 8423 8429 8431 8443 8447 8461 8467 8501 8513 8521 8527 8537 8539 8543 8563 8573 8581 8597 8599 8609 8623 8627 8629 8641 8647 8663 8669 8677 8681 8689 8693 8699 8707"
" 8713 8719 8731 8737 8741 8747 8753 8761 8779 8783 8803 8807 8819 8821 8831 8837 8839 8849 8861 8863 8867 8887 8893 8923 8929 8933 8941 8951 8963 8969 8971 8999 9001 9007 9011 9013 9029 9041 9043 9049 9059 9067 9091 9103 9109 9127 9133 9137 9151 9157"
" 9161 9173 9181 9187 9199 9203 9209 9221 9227 9239 9241 9257 9277 9281 9283 9293 9311 9319 9323 9337 9341 9343 9349 9371 9377 9391 9397 9403 9413 9419 9421 9431 9433 9437 9439 9461 9463 9467 9473 9479 9491 9497 9511 9521 9533 9539 9547 9551 9587 9601"
" 9613 9619 9623 9629 9631 9643 9649 9661 9677 9679 9689 9697 9719 9721 9733 9739 9743 9749 9767 9769 9781 9787 9791 9803 9811 9817 9829 9833 9839 9851 9857"
/*

58:デフォルトの名無しさん
06/05/10 22:55:31
*/" 9859 9871 9883 9887 9901 9907 9923 9929 9931 9941 9949 9969 9973"); return 0;}


59:デフォルトの名無しさん
06/05/10 23:18:06
わろたw

60:デフォルトの名無しさん
06/05/10 23:20:46
恐らくはプログラムを作るプログラムを作ったのだろうけど、
その手間よりはきっと分割する手間のほうが掛かったに違いないw
#しかも律儀に切れ目がコメントになってるし。

61:デフォルトの名無しさん
06/05/11 01:39:53
もろに宿題かよ。
おまいの単位が取れなくてもちっとも痛くないからねえ。
同じクラスの香具師に学食でもおごって宿題写させてもらったほうがいいよ。

62:デフォルトの名無しさん
06/05/11 02:15:13
C/C++の宿題を片付けます 64代目
スレリンク(tech板)l50

63:デフォルトの名無しさん
06/05/24 23:55:43
#include <stdio.h>

int main(void)
{
int i,j;

for(j=2;j<=10000;j++){
for(i=2;i<=j;i++){
if(i==j){
printf("%d\n",j);
}else if((j%i) == 0){
break;
}
}
}
return 0;
}

64:デフォルトの名無しさん
06/05/28 19:25:29
例えば↓のようにした時ってhogeの有効範囲は宣言されたブロック内ですか?

void main(void)
{
 {
  int hoge;
 }
}

65:デフォルトの名無しさん
06/05/28 19:34:43
>>64
そう

66:64
06/05/28 19:46:19
>>65
どうも。

67:デフォルトの名無しさん
06/05/28 21:09:50
プログラミングって、何をつくるか頭で考えて作り始めますよね。
僕まだ始めたばっかりなんですけど、そういう場合の取っ掛かりがつかめないというか、
どういう風に書いていけばいいのか、全く頭に思い浮かばないんです。
まだ配列を習っているくらいなんですけど、
慣れていくに従って、そういうのは段々できていくものなんでしょうか?

68:デフォルトの名無しさん
06/05/28 21:18:03
>>36は一年生ですか?
あまりに僕がやってる課題とレベルが違いすぎて唖然としてるんですが。


69:デフォルトの名無しさん
06/05/29 04:06:24
C言語を勉強するには、どの参考書を買った方が良いですか?

70:デフォルトの名無しさん
06/05/29 08:15:54
はじめてのC
まだ異性とつき合ったこと無ければ、AとBも勉強してくれ。

71:デフォルトの名無しさん
06/05/29 10:46:37
>>67
> プログラミングって、何をつくるか頭で考えて作り始めますよね。

いいえ。
まず、何をつくるか頭で考えた後、
要求仕様をまとめ、概要設計を行い、詳細設計を行った後に作り始めます。

72:デフォルトの名無しさん
06/05/29 10:58:16
return( (void*)-1 );
という処理を見かけたのですが、意味を教えてください。
そもそもvoidへのポインタとは何を意味するのでしょうか?

73:デフォルトの名無しさん
06/05/29 12:29:43
>>72
「void *」にキャストした-1を呼び元に返す。

> そもそもvoidへのポインタとは何を意味するのでしょうか?

どんなポインタ型にもキャスト可能な汎用ポインタ

74:デフォルトの名無しさん
06/05/29 15:02:08
>>72
-1というのはおそらくヌルポインタ以外で何か有効なポインタでないことを意味させたいのだと思う。

75:デフォルトの名無しさん
06/05/29 17:49:50
VC++6.0で下記コードがエラーとなってしまいます。

コード:
 goto *JumpTable[Opcode];

エラーの内容:
error C2059: 構文エラー : '*'

GCC等ではOKぽいのですが、VCでコンパイルする方法は無いのでしょうか?


76:デフォルトの名無しさん
06/05/29 17:58:07
>>75
*(JumpTable)

77:デフォルトの名無しさん
06/05/29 18:52:59
標準CでもVC++でもgotoに使えるのはラベルだけ。
変数の中身を使えるのはGCC独自拡張のはず。

78:デフォルトの名無しさん
06/05/29 19:51:58
英語の小文字の文字列をキーボードから入力した時、
その文字列の大文字を出力するプログラムを作ってください。
お願いします。scanf関数を使ってください。

79:デフォルトの名無しさん
06/05/29 20:15:47
>>78
氏ね。

80:デフォルトの名無しさん
06/05/29 20:20:50
>>78
if(標準入力がaならば)puts("A");をZまででOK

81:デフォルトの名無しさん
06/05/29 20:26:24
>>78
#include <stdio.h>
int main() {
int i=0; char s[100];
printf("英小文字だけを入力してください:\n");
fgets(s,sizeof(s),stdin);
for(;s[i];)i++[s]&=0xdf;printf("%s",s);
printf("Enterを押してください.\n");
scanf("%*[^\n]%*c");
return 0;}


82:デフォルトの名無しさん
06/05/29 20:35:51
>>81 ありがとうございます。でも、fgets,for,は習ってないので、
scanf,printfだけでお願いできますか?

83:デフォルトの名無しさん
06/05/29 20:42:52
#include <stdio.h>
#include <ctype.h>
int main() {
  int i = 0;
  char s[100];
  puts("英小文字だけを入力してください:");
  fscanf("%99s", s);
  for (; s[i]; ++i)
    s[i] = toupper(s[i]);
  puts(s);
  return 0;
}
次から宿題スレへ行け。

84:デフォルトの名無しさん
06/05/29 20:51:30
ctype,puts,fscanf,for,toupper.
分かりません。あと、宿題スレの人はscanfは分からないって。。。

85:デフォルトの名無しさん
06/05/29 20:55:24
>>77
ありがとうございます。
理解しました^^;。


86:デフォルトの名無しさん
06/05/29 21:01:27
>>84
宿題は自分でやりましょう。分からない所だけ聞きましょう。講義でアスキーコードやったでしょう。

87:デフォルトの名無しさん
06/05/29 22:34:44
#include <stdio.h>
int main(void){
char s[10];

printf("小英字列=");
scanf("%d",s);
printf("大英字列=%s\n",s);

return 0;
}


実行結果を  abcdef
ABCDEF
にしたいんですけどどこが間違ってますか?

88:デフォルトの名無しさん
06/05/29 22:37:15
重要な変換部分が無いんだが・・・

89:デフォルトの名無しさん
06/05/29 22:49:47
マジで教えてください。わけがわからなくなっちゃって。

90:デフォルトの名無しさん
06/05/29 22:50:37
#include <stdio.h>
#include <string.h>

int main(void){
char s[10];
int i;

printf("小英字列=");
scanf("%s",s);
for(i =0; i<(int)strlen(s);i++)
{
s[i] = s[i] - 0x20;
}

printf("大英字列=%s\n",s);

return 0;
}
間違いを指摘するのは面倒なので
これで納得しろ

91:デフォルトの名無しさん
06/05/29 22:54:48
for(i =0; i<(int)strlen(s);i++)
{
s[i] = s[i] - 0x20;
↑は習ってないんで、無しでお願いできますか?

92:デフォルトの名無しさん
06/05/29 23:00:01
0x20の意味を調べたいのですがキーワードを教えてください

93:デフォルトの名無しさん
06/05/29 23:08:13
0x20 = 32
とりあえず32に書き換えとけ

または
0x20 = ('a' - 'A')
でもOK

94:デフォルトの名無しさん
06/05/29 23:08:30
16進数

95:デフォルトの名無しさん
06/05/29 23:10:02 BE:239630786-#
toupper()つかっとけ。

96:デフォルトの名無しさん
06/05/29 23:10:43
なるほど。アスキーコードの差が32って事ですか?
forはどうにかなりませんかね?

97:デフォルトの名無しさん
06/05/29 23:12:10 BE:174730875-#
どうにかって?

98:デフォルトの名無しさん
06/05/29 23:12:38
>>96
forのなにをどうにかすりゃ良いんだよ。

99:デフォルトの名無しさん
06/05/29 23:15:33
いや、習ってないんで、別のc言語に
変えてほしいなと思って(;^ω^)


100:デフォルトの名無しさん
06/05/29 23:16:55
よっしゃわかった習ってないなら教える
まず文字には文字コード体系ってのがある
で、小文字のaは数字に直すと0x61
で、0xって数字の前につけると「これは16進数の61ですよ」
って事を表してる。
そんで、大文字のAは0x41にあたる。
だから大文字のAと小文字のaの差は数値で言えば
0x61-0x41=0x20となる。
と言うことは小文字のaから0x20を引いたら大文字のAとなる
逆に大文字のAに0x20を足したら小文字のaとなる。
なんで16進数を使うかというと文字コードの表が大抵16進数
で書いてるから。だから別に16進数の20を10進数に直した
32と言う数字を使いたいなら使っても問題なし。
90で書いたソースのs[i] = s[i] -0x20をs[i] = s[i] - 60
にしてもOKだ。
これで納得したか?まだたりぬか?
どうなんだゴリャ!!

101:100
06/05/29 23:18:35
まちがった、s[i] = s[i] -32
だ!!

102:デフォルトの名無しさん
06/05/29 23:18:52 BE:279569478-#
forかwhileで書くのが普通で簡単だな。

103:デフォルトの名無しさん
06/05/29 23:19:14
おk(;^ω^)

104:100
06/05/29 23:20:17
ん?for文を習ってないのか?
配列に関して習ってないことがあるのか?


105:デフォルトの名無しさん
06/05/29 23:20:56
ちゅーか、for(i =0; i<(int)strlen(s);i++) の中身がよく分からないんだお(;^ω^)

106:デフォルトの名無しさん
06/05/29 23:21:35
forを習ってませんというなら
他に何を習ったか言ってもらわないと書きようがない罠。

107:デフォルトの名無しさん
06/05/29 23:24:08
配列までは習ってる(^0^)

108:デフォルトの名無しさん
06/05/29 23:27:50
i < sizeof s / sizeof s[0];
これではダメなんですよね?

109:デフォルトの名無しさん
06/05/29 23:29:44
だめ(^ω^)

110:デフォルトの名無しさん
06/05/29 23:31:21
#include <stdio.h>
int main(void){
char s[10];

printf("小英字列=");
scanf("%d",s);
printf("大英字列=%s\n",s-32);

return 0;
}

  じゃ駄目?

111:デフォルトの名無しさん
06/05/29 23:31:41 BE:134793239-#
>>108
↓とか、実行したら違いがわかるかも。

char s[100];
scanf("%s", s);
printf("%d\n", sizeof s / sizeof s[0]);
printf("%d\n", streln(s));


112:デフォルトの名無しさん
06/05/29 23:32:38
size....?


113:デフォルトの名無しさん
06/05/29 23:33:01 BE:134793239-#
>>110
だめだねぇ。
ループで回して、一文字ずつ処理しないと。

114:デフォルトの名無しさん
06/05/29 23:33:52
>>113 ル-プ詳しく

115:デフォルトの名無しさん
06/05/29 23:38:08 BE:119815564-#
ループが分からなかったらこれでもいいけど、評価されるかな?
#include <stdio.h>
#include <ctype.h>
int main(void){
char s[10];
printf("小英字列=");
scanf("%d",s);
s[0] = toupper(s[0]);
s[1] = toupper(s[1]);
s[2] = toupper(s[2]);
s[3] = toupper(s[3]);
s[4] = toupper(s[4]);
s[5] = toupper(s[5]);
s[6] = toupper(s[6]);
s[7] = toupper(s[7]);
s[8] = toupper(s[8]);
s[9] = toupper(s[9]);
printf("大英字列=%s\n",s);
return 0;
}


116:デフォルトの名無しさん
06/05/29 23:40:01
ctype,toupperは習ってないお、周りのみんなもできてないし、
できる問題なのか不安だお(;^ω^)

117:デフォルトの名無しさん
06/05/29 23:41:37
>>116
どういったアルゴリズムなのか考える努力を。

118:デフォルトの名無しさん
06/05/29 23:44:13
>>117 一応みんなのおかげで大体理解できたお。でも習ってないのが
あるから課題としては評価されないお。やばいお(’ω‘)

119:デフォルトの名無しさん
06/05/29 23:46:12 BE:49923825-#
ならってる範囲でって言っても、forもwhileも習ってないんじゃ、ムリな課題なんじゃね?

120:100
06/05/29 23:47:05
for文の中身を解説しろってことだな
まず最初の処理として左端の式を評価するi=0だからint型のiに0を代入。
この式を評価するのは最初だけ。
次にi<(int)strlen(s)の処理に移る。i<(int)strlen(s)が成り立つならfor文内
の処理をする。
でstrlen()という関数は文字列の先頭アドレスを引数に取り戻り値として
文字列の最後の'\0'を含まないだけの文字の数を返す。
で、strlen(s)のsっていうのは文字列の入った配列s[10]の先頭アドレスを意味する
なぜっていわれてもそうなんだから仕方がない。
アドレスなら&がいるんじゃないか?と思うなら&s[0]としても良い。
&s[0] == sって解釈しても、まぁ.......OK!!
で(int)ってついてるのは本来strlenの戻り値はsize_t。
size_tってのは、unsigned int型。なので一応そのままでも良いけど
(int)をつける。これをつけると言うことは戻り値の値をint型にキャストするということ。
キャストとは、値の型を変換する事。
で、i<(int)strlen(s)は、結局sの文字列の長さ('\0'を省いた)よりiの初期値は0
のため成り立つ事が確認される成り立っているので、for文内の処理に以降。
for文内の処理が終わると次のi++に移るi++はiに1足すって事。
で、iに1足した後、i<(int)strlen(s)の評価に移る。で最終的に文字列の長さ
より、iが数値的に超えたら、for文の処理を行わず。for文を抜け出る。

121:デフォルトの名無しさん
06/05/29 23:48:16
無理だよね。やっぱ。>>115で行くお。toupperとctypeは理解できたし。

122:デフォルトの名無しさん
06/05/29 23:48:38
#include <stdio.h> 
int main(void){ 
    int s;
    printf("小英字列=");
    scanf("%x",&s); 
    printf("大英字列=%X\n",s); 
    return 0; 
}
>>87の指定通りにabcdefという入力にはABCDEFを返すぜひゃっほー。

123:100
06/05/29 23:49:04
なんか書いててこんがらがってきた。
俺の書いてることってあってるのか?

124:デフォルトの名無しさん
06/05/29 23:53:19
>>122 そんなんでいいんかなあ。それでいくか。

125:デフォルトの名無しさん
06/05/29 23:54:46 BE:39938742-#
>>122
天才じゃね?

126:デフォルトの名無しさん
06/05/29 23:57:33
だれも思いつかないぞ

127:デフォルトの名無しさん
06/05/29 23:58:10
>>122

> a.exe
> beaf
> BEAF
>
> a.exe
> dead
> DEAD
おーちゃんと動いてるー

128:七氏
06/05/30 00:02:13
libtiffをつかったプログラミングでtiff画像を 
カラー画像→グレー画像
に変換する方法なら書いてあるのですが
グレー画像→カラー画像
に変換する方法がわかりません
どなたかわかる方教えてもらえませんか
参考にしているサイトは URLリンク(www-06.ibm.com) 
ですよろしくお願いします
違うとこにも書き込んだのですが不安なので教えてください

129:100
06/05/30 00:02:26
まじかよ、うちじゃ、>>122の式まともにうごかんぞ
VS2005stdがおかしいのか?
ま、いいや、そんなトリッキーな事することねーし

130:デフォルトの名無しさん
06/05/30 00:03:14
ありがとうございました。たぶん模範解答とは違うけど、
ちゃんと動くから自信を持って提出するお(^ω^)

131:デフォルトの名無しさん
06/05/30 00:05:37 BE:174730875-#
>>128
フツーに考えて、グレーからカラーはムリだろ。
それともファイルのどっかにカラー情報が残されてるのか?

132:七氏
06/05/30 00:09:39
>>131
G3→G4に変換したいんですが
やっぱり無理なんですかね?
カラー情報が仮にノここされていたら可能ですか?

133:デフォルトの名無しさん
06/05/30 00:13:05
G3→G4をグレー→カラーと言うから混乱を招いている。
単なるTiffの画像形式の変換と言えばいいことだ。
しかし、マルチに答える気はないので詳細は割愛。

134:七氏
06/05/30 00:18:13
>>133
そういえばよかったです言葉たらですみません
教えてもらえませんか?

135:デフォルトの名無しさん
06/05/30 01:47:53
どなたかご教授ください。

テキストファイルを開いて、文字コードを判別し、その文字コードを使って文字列を表示するというプログラムを作りたいんですが、どうすればいいんでしょうか?


136:135
06/05/30 01:54:33
文字コード等についていまいちよくわかってないんですが、「○○コードとして表示する」という方法はなく、値を他の文字コード形式に変換するんでしょうか?

137:デフォルトの名無しさん
06/05/30 02:00:32
>>136
そうです

138:135
06/05/30 02:07:21
>>137
なるほどです。という事はコンパイラーが処理するコードの形式に変換すればいいんですね?

139:デフォルトの名無しさん
06/05/30 02:10:04
>>138
コンパイラが処理できるコードに変換するのではなくて、
最終的に表示を行うシェル(Windowsで言えばコマンドプロンプト)の文字コードに合わせる。

140:135
06/05/30 02:25:55
>>139
わかりました。ありがとうございました。

141:デフォルトの名無しさん
06/05/30 03:32:19
C言語を始めるに当たって、お勧めな教本を教えて下さい

142:デフォルトの名無しさん
06/05/30 04:31:59
推薦図書/必読書のためのスレッド PART31
スレリンク(tech板)

143:72
06/05/30 10:05:40
>>73 >>74

ありがとうよくわかりました。

144:デフォルトの名無しさん
06/05/30 23:51:05
ソース書くお勧めのエディターってありますか?
書きやすいとかあるのかな?

145:デフォルトの名無しさん
06/05/31 00:19:27
>>144
つ URLリンク(search.vector.co.jp)

146:デフォルトの名無しさん
06/05/31 00:48:04
 次のプログラムは、キーボードから半径rと数値aを入力し、aが1ならば円の円周を
求め、2ならば円の面積を求めるものである。

/***cex2106.c***/
/*分岐プログラム*/
/*  switch~case 文*/
/************/
#include <stdio.h>
main()
{
int a;
float r,l,s,pai;
pai=3.14159;
printf(

147:デフォルトの名無しさん
06/05/31 00:51:44
アルゴリズムって、何かを作りながら学ぶのがいいの?
それとも、アルゴリズムを学んだ後に何かを作るのがいいの?

148:デフォルトの名無しさん
06/05/31 01:16:14
最初はあまり余計なことはせず、たとえばまずソートならソートについてよく理解できる
単純なソースの記述からはじめた方が良い。
何かを作る際は、全体の構図をしっかり理解して、その一部に
取り込むべきものを取り込む。取り込まれたものが何なのか?なんて
複雑な構造から一部を理解しようってのは初心者には向かないかと。

149:デフォルトの名無しさん
06/05/31 01:54:11
リナックスなんだけどsqrtが使えない!!

#include<stdio.h>
#include<math.h>
main(){
int x, y;
double K, temp, pi, s;
printf(

150:149
06/05/31 01:58:46
途中できれてるし
#include<stdio.h>
#include<math.h>
main(){
int x, y;
double K, temp, pi, s;
printf("x座標を入れてください");
scanf("%d",&x);
printf("y座標を入れてください");
scanf("%d",&y);
temp = x*x+y*y;
K = sqrt(temp);
pi = 3.1416;
s = K*K*pi;
printf("円の面積は%f平方センチメートルです\n",s);
}
って打って


151:149
06/05/31 02:01:43
コンパイルすると
/tmp/ccuVKbmu.o(.text+0xa7): In function `main':
menseki.c: undefined reference to `sqrt'
collect2: ld はステータス 1 で終了しました
ってエラーが出るし・・・

152:デフォルトの名無しさん
06/05/31 02:07:24
x座標を入れてください3
y座標を入れてください3
円の面積は56.548800平方センチメートルです

Borland C++ではコンパイルできて、試しにxとyに3を入れて出したんだが
座標から面積を求めるって・・・

153:デフォルトの名無しさん
06/05/31 02:08:56
>>149
-lm 付けずにコンパイルしてました。
なんて冗談は言わないよな?

154:デフォルトの名無しさん
06/05/31 02:11:07
>>147
>>148さんの言うとおり
ソートでも、探索でも、単純なソースを見てそのやりかたを
知れば、「これをこういう風にしたらこういう風になるな」ってな感じで
考えられる。でも、ネット上で、単純なソースって意外と見つからない。
理屈は書いてあっても、肝心のソースがなかったり。
かといって、アルゴリズム辞典買っても、「あぁ、もう訳わかんない」
ってなるのがたまにきづ。
でも、ネット上にも簡単な例が載ってるページがあったりする。
URL教えれ、って言われてもブックマークしてないから教えれないけど。
ま、こんな偉そうなことを言ってる俺も、ソートなり探索なりその他の
アルゴリズム等、使わないからすぐ忘れる。
だから、一度知ったアルゴリズムは、忘れそうな頃にもういっぺん
復習みたいにした方が良いみたい。
じゃないと、俺みたいに「ああ、あれね、もう忘れた」ってな感じに
なっちゃうよ。

155:デフォルトの名無しさん
06/05/31 02:52:47
>>145
ありがとー

156:デフォルトの名無しさん
06/05/31 12:07:17
配列同士の足し算ってどう書けばいいのでしょ
たとえば

int a[3] = { 1, 2, 3 }
int b[2] = { 4, 5 }

としたときに

int c[5] = { 1, 2, 3, 4, 5 }

という配列を作りたいのです。

157:デフォルトの名無しさん
06/05/31 12:12:57
>>156
それって単に配列aの後ろにbを付け足したってだけだよね?
だったら単純にaの先頭から順番に続けてbの先頭の値を
配列cに入れていけば良いだけでは?

158:デフォルトの名無しさん
06/05/31 12:22:42
>>156
int i=j=0;
for(;i<=((sizeof(a)/sizeof(a[0]))+(sizeof(b)/sizoof(b)));i++){
if(a)c[i]=a[i];
else c[i]=b[j++];
}
俺って天才だよね┐(´ー`)┌

159:デフォルトの名無しさん
06/05/31 12:28:40
>>156
memcpy(c, a, sizeof(a));
memcpy(c+sizeof(a)/sizeof(a[0]), b, sizeof(b));

160:デフォルトの名無しさん
06/05/31 12:45:49
>>157-159
Cで配列を足しあわせるのって難しいんですね。
char型の配列だとstrcatで連結できるけどint型で使おうとするとエラー吐かれるし
perlみたいに
@c = (@a , @b)
こんな記述も使えないし,どう書くのかなと。

どうもありがとうございました

161:デフォルトの名無しさん
06/05/31 12:53:31
>>160
> char型の配列だとstrcatで連結できるけど
配列の中身が文字列じゃない限りそんなことはやっちゃいかん

162:デフォルトの名無しさん
06/05/31 13:35:35
>>158
forの行に間違いが二つ。その次の行に間違いが一つ。
天才っていうより、天災?

>>159
2番目のmemcpy()に間違いが一つ。

163:デフォルトの名無しさん
06/05/31 13:45:52
>>162
どこ?

164:162
06/05/31 13:54:32
>>163
がーん、確かによく見たらcにそのまま足しているから合ってるじゃん..._/ ̄|○

>>159
すまん。

165:デフォルトの名無しさん
06/05/31 17:04:17
下らない質問で恐縮なんですが・・・
構造体の変数に列挙型使えますか?

struct test{
enum tag{sun, mon, tue} week;
};

test.week = sun;

みたいな感じで

166:デフォルトの名無しさん
06/05/31 17:05:38
>>165
なぜ人に聞く前に自分で試して見ないのか。
結論を言ってしまえばできるけど。

167:デフォルトの名無しさん
06/05/31 17:09:06
>>165
ありがとうございますです。

168:デフォルトの名無しさん
06/05/31 18:25:12
>>158
c[]のメモリはどこに確保されているの?

169:デフォルトの名無しさん
06/05/31 18:38:24
if(a) ってどういう意味? a の値って変化するの?

170:デフォルトの名無しさん
06/05/31 19:56:55
>>156

int c[] = {a[0], a[1], a[2], b[0], b[1]};


171:>>147
06/05/31 20:06:15
>>148 >>154

ありがとうございます。

よさそうなサイトを探してみます。



172:149
06/05/31 20:11:39
>>153
その通りでした・・・


173:デフォルトの名無しさん
06/05/31 21:16:16
printf関数のソースの解説してあるサイトってないかな?

174:デフォルトの名無しさん
06/05/31 21:28:03
>>173
 図書館かどこかでANSI C言語辞典を探して
printf関数の定義例をコピーする、というんじゃだめなの?

175:デフォルトの名無しさん
06/05/31 22:21:26
俺、さっきプログラム作ってて、すごいことに気づいた。

ポインタからメンバ変数を取り出すのに使う -> って、いらなくね?

ポインタだろうがそうでなかろうが . でいいじゃん。
わざわざ人間が指定してやる必要ないじゃん。

だって、コンパイラは変数がポインタかどうか分かってるのだから、
勝手に解析してくれればいいのだと思うのだよ

176:デフォルトの名無しさん
06/05/31 23:11:34
const と #typedef の違いってなんですか?


177:176
06/05/31 23:12:32

>>176

ごめんなさい、
#typedef ではなく #define でした。

178:デフォルトの名無しさん
06/05/31 23:19:47
>>175
初心者はそれで構造体の変数と構造体へのポインタを混同しそうだから、
今の区別する仕様でいいと俺は思う。

そういえばDはどっちも . でいけるとアピールしていたような気がしなくもない。

179:デフォルトの名無しさん
06/06/01 00:13:58
>>175
たしかにそうなんだけどさ、
-> はポインタ演算 (*p). の糖衣構文として追加された経緯があって、
既存のコンパイラをあんまりいじくらずにいけるようにしたかったんだよ。

180:デフォルトの名無しさん
06/06/01 00:21:30
あと、ポインタってことはメンバがオーバーライドされてたりすることも考えないといけないから、
いざ機械語になったときのコードが.と->でかなり違ってくる。.*と->*になればなおさら。

ま、コンパイラがちゃんと解析すりゃいいじゃん、ってのは、そうなんだけどね。

181:179-180
06/06/01 01:14:22
ごめんC++と間違えた。

182:デフォルトの名無しさん
06/06/01 11:07:41 BE:34939229-#
>>177
そもそも同じところが見つからない。

183:デフォルトの名無しさん
06/06/01 11:37:03
実行時に

prog.exe para1 para2

のように引数を与えたいプログラムを作るときに、
デバッグ時に、以下のように、自分でargcやargvに直接値を代入しても問題ないですか?
実は、他の人がこのようにしているのを見たので、自分でもまねしてみたのですが、
VC.NETだと、問題なく動いているのですが、正しいのか間違っているのかよくわかりません。

main(int argc, char *argv[])
{
argc = 3;
argv[0] = "prog.exe";
argv[1] = "para1";
argv[2] = "para2";

・・・
・・・
・・・

}




184:デフォルトの名無しさん
06/06/01 11:40:27
>>183
ダメ

185:デフォルトの名無しさん
06/06/01 11:56:47
宿題ではないのでどちらに書こうか悩んだのですが・・・
判る方、いらっしゃいましたら教えて下さい!!

数字を10文字まで表示させて10文字表示して何かキーを押したら
11~20までを新しいページで表示させたいんです。

これはVC++で出来ますか?

186:デフォルトの名無しさん
06/06/01 11:57:58 BE:108696487-#
最初に
argv=(char**)mallock(sizeof(char*)*3);
とでもしておけばとりあえず危険はない。

187:デフォルトの名無しさん
06/06/01 12:01:42 BE:104814296-#
>>185
「表示」の具体的な内容(デバイスとかフォントとか大きさとかタイミングとか)とか
「ページ」が何を指しているのかとかが全然分からんが、それらがPCで制御できる
状態にあるならば、VC++でできるかどうかという問いには「できる」としか答えられない。

188:デフォルトの名無しさん
06/06/01 12:22:23
DOSのMOREコマンドみたいなことをしたいのかな?

189:デフォルトの名無しさん
06/06/01 12:37:57
>>183
> argc = 3;
> argv[0] = "prog.exe";

この二行は問題ない。

> argv[1] = "para1";
> argv[2] = "para2";

これは、問題有り。
不正な領域への書き込みとなる。

190:185
06/06/01 13:15:37
>>187さん
回答有難う御座います。
言葉足らずで申し訳ありません;;

1         11
2         12
3         13
4         14
5  ⇒何か押す⇒ 15
6         16
7         17
8         18
9         19
10         20

と表示したいんです。
(数字は固定値じゃなくて任意で入力された文字)
これじゃぁ、まだ判り辛いですか?
初心者で申し訳ないです;;上手く言葉に出来ないです(;´Д`)


191:デフォルトの名無しさん
06/06/01 13:49:17 BE:139752498-#
>>190
やりたいことは分かったが、お前が何を知りたいのかが分からない。

192:185
06/06/01 14:05:30
>>191さん
190で言ったように表示できるソースを書きたいんですが・・・
10コ表示したら改ページみたいなのをfor文とかで回せば良いのですか?

193:デフォルトの名無しさん
06/06/01 14:09:59
>>185
コンソールAPI ってのを使う。

194:デフォルトの名無しさん
06/06/01 14:10:57
>184
>186
>189
ありがとございました。
そうすると、こういう場合(つまりデバッグ作業をしているときには
とりあえずソースコードの中で固定の引数を与えたい場合は)、何か良いテクニックみたいなの
ありますか?

195:デフォルトの名無しさん
06/06/01 14:14:58
>>194
VCのデバッガなら、コマンドラインから与える引数の設定ができるよ。
他のデバッガにもそういう機能があるんじゃない?



196:デフォルトの名無しさん
06/06/01 14:23:35 BE:108696487-#
>>192
forでもwhileでも好きなようにループ汁。

197:デフォルトの名無しさん
06/06/01 14:51:35
>>194
俺だったらそういうデバッグの時はシェルスクリプト
(Windowsならバッチファイル) 作っちゃうな。
そうすればそこで引数変えられるから。


198:デフォルトの名無しさん
06/06/01 16:51:07
int i =1;

if(i == 5)
{
printf("Hello!");
}

1から100まで既に入力されていて
表示をする時に5件ごとにHello!!と表示させたいのですが、
上の書き方だと5件目の時のみにしかHello!!とつきません。
5件ごとにHello!!とつけるにはどうしたらいいですか?

199:デフォルトの名無しさん
06/06/01 16:52:34
>>198
計算すりゃいい。
5で割ったあまりが0かどうかで判定すればいいんじゃないか?
(i%5)==0とか。


200:デフォルトの名無しさん
06/06/01 17:12:11
>>199

198です!出来ました!!
有難う御座いました!!!

201:デフォルトの名無しさん
06/06/01 17:38:17
このスレ数学得意な人多くてうらやましい

202:デフォルトの名無しさん
06/06/01 17:46:19
>195
VC使っていますが、コマンドラインから与える引数をデバッガで与えられるというのは、
先ほど見つけました。VC3年使っていて今まで知らなかったです。ありがとうございました。
>197
私は、DOSの画面を出しておいて、VCでビルドしたあと、DOSの画面で引数与えて実行
するという初歩的な方法でやっています。

ところで、
186さんに教えていただいた以下の方法ですが、
 argv=(char**)mallock(sizeof(char*)*3);
 とでもしておけばとりあえず危険はない。
この方法でも完全ではないということでしょうか?
こうやって領域を確保しておけば問題ないように思うのですが。


203:デフォルトの名無しさん
06/06/01 17:49:36
>>201
算数の問題だと思うが?

204:デフォルトの名無しさん
06/06/01 17:52:57
>>202
とりあえず、意味をよく理解した上で使う分には問題ない。
しかし、意味を理解せずに使用すると、
後々に問題が出てくることになると思われ。

205:デフォルトの名無しさん
06/06/01 17:55:41 BE:58230656-#
>>202
ちょっとtypo。
argv=(char**)malloc(sizeof(char*)*3); の意味が分かってて、リリース時に間違いなく
消えて無くなるなら問題ないかと。

206:デフォルトの名無しさん
06/06/01 18:28:58
引数を固定的に決めたいだけなら malloc() する必要もないのではないか?
こんな風に書いておけばいいんじゃないの?

int main(int a, char *av[])
{
 char *argv[] = {a[0], "para1", "para2", NULL};
 int argc = 3;

}

で、リリース時に a, av を argc, argv に書き換える。


207:デフォルトの名無しさん
06/06/01 18:29:34
あー! 書き間違いがある。

まあいいや適当に読みかえて。


208:デフォルトの名無しさん
06/06/01 18:42:46 BE:48525555-#
>{a[0], "para1", "para2", NULL};
 ~~~~~
初期化子に変数は使えない。

209:デフォルトの名無しさん
06/06/01 18:58:25
>>208
staticじゃなければOKのはず

210:デフォルトの名無しさん
06/06/01 19:27:46
>>208
とりあえず gcc ではこれは動いた。

#include <stdio.h>

int main(int a, char *av[])
{
char *argv[] = {av[0], "para1", "para2", NULL};
int argc = sizeof(argv) / sizeof(*argv) - 1;
int i;

printf("%d\n", argc);
for (i = 0; i < argc; i++)
printf("%d: %s\n", i, argv[i]);

return 0;
}

実行結果

3
0: ./a.out
1: para1
2: para2


211:デフォルトの名無しさん
06/06/01 19:33:52
> All the expressions in an initializer for an object that has static storage duration shall be
> constant expressions or string literals.
としか書かれてないからな。

212:デフォルトの名無しさん
06/06/01 20:36:04
ひどい質問ですみません。
コンパイラってどこで仕入れるといいんですか?

213:デフォルトの名無しさん
06/06/01 20:46:24
>>212
仕入れということはその後自分の店で売るということですか?


214:デフォルトの名無しさん
06/06/01 21:05:52
>>208
まったく問題ない。

>>211
expression の定義参照。

215:デフォルトの名無しさん
06/06/02 01:29:55
もう、ポインタわけわからんよ(><)


216:デフォルトの名無しさん
06/06/02 02:21:27
int a = 0x100
char *b = "hoge"

とあるときに

char *c = "100hoge"

という文字列を*cに入れたいのですがどうすればよいでしょうか・・

217:デフォルトの名無しさん
06/06/02 02:24:04
char buf[20];
sprintf(buf, "%x%s", a, b);
c = buf;

218:デフォルトの名無しさん
06/06/02 02:25:48
>>212
そういうのは流通業者に聞いてみれば?
ま、どこに聞いても「ウチで仕入れてください」っていうだろうけど。

219:デフォルトの名無しさん
06/06/02 02:26:30
>>217
うぅどうもです><

220:デフォルトの名無しさん
06/06/02 03:05:47
>>212
URLリンク(www.borland.com)
>Borland C++Compiler 5.5インストール手順
のすぐ下にある
>Borland C++Compiler 5.5のダウンロードは、こちら(8.46MB)をクリックして下さい。
の「こちら」をクリック。

エディタは↓を使うと、コンパイルも楽。
URLリンク(www.vector.co.jp)

221:デフォルトの名無しさん
06/06/02 03:11:48
>>220
そんな古いのより Visual C++ 2005 Express Edition のがいいぞい。
URLリンク(www.microsoft.com)

222:デフォルトの名無しさん
06/06/02 03:18:57
>>221
DLにめっさ時間が掛かるね・・・

223:デフォルトの名無しさん
06/06/02 09:02:22
DLオワタ・・・疲れた・・・寝るぽ

224:デフォルトの名無しさん
06/06/03 07:13:57
>>221
vc2005使ってると、ANSI標準の関数使うと、いちいち警告で
「古い定義の関数でなんたらかんたら」って出るけど無視しよう。
MSがあらたに作った関数なんていちいち使ってたら
変にそっちの関数の知識を身につけちゃう可能性あるから。

225:デフォルトの名無しさん
06/06/03 08:18:11
>>224
そもそもそんな警告を表示しないようにすればよいだけだと思う。

226:デフォルトの名無しさん
06/06/03 08:22:08
extern FILE *fp_a

int AAAA()
{
FILE fp ;

fp_a = fopen("a.txt", "w")

if (fp_a == NULL) {
return(-1) ;
}
BBBB() ;

fclose(fp_a) ;
return(0) ;
}

int BBBB()
{
FILE *fp ;
fprintf(fp_a, "test-AAAA-prog") ;

fp = fopen("zzz.txt", "r")
if (fp == NULL) {
return(-1)
}
fprintf(fp_a, "test-BBBB-prog") ;
fclose(fp)
}

227:デフォルトの名無しさん
06/06/03 08:24:52
↑突然すいません、上記場合でfp_aを252回open,closeを繰り返すと
fp_aをopenしている間だけ、fpのopenに失敗してしまいます。
extern宣言しているファイルポインタを使用しているのがまずいのでしょうか?

228:デフォルトの名無しさん
06/06/03 08:26:36
誤記:fprintf(fp_a, "test-BBBB-prog") ;
正記:fprintf(fp, "test-BBBB-prog") ;


229:デフォルトの名無しさん
06/06/03 08:29:01
>>225
あの「警告を表示しない方法」教えてくだされ

230:デフォルトの名無しさん
06/06/03 08:38:02
>>229
URLリンク(msdn2.microsoft.com)
_CRT_SECURE_NO_DEPRECATE

231:224
06/06/03 08:53:03
俺としては、あの警告は「はいはい、ワロスワロス」で流してるけど
入門者の人にとっては、不安だろうな~


232:デフォルトの名無しさん
06/06/03 09:32:28
>>227
それ、症状が再現する最小のモジュールになっていないだろ。
ソース載せるなら、再現することを確認してからにしてくれ。
まぁ恐らく、きちんとファイルをクローズしないでオープンしたままなんだろうけどな。

233:デフォルトの名無しさん
06/06/05 11:25:15
列挙定数ではなく構造体を使用したときの良い点を教えて

234:デフォルトの名無しさん
06/06/05 11:49:21
動画解析をしたいのですが、まず動画を画像ファイルに変換するにはどうしたらよいでしょうか?

235:デフォルトの名無しさん
06/06/05 11:57:05
今から勉強するならVC++ か VC# のどっちを買った方がいいですか?
言語の仕様が大幅に変わってるみたいなのでどうすればいいかわかりません。

どっちもCでしょ?

236:デフォルトの名無しさん
06/06/05 11:59:30
>>233
全く違うもの同士でそういう風に聞かれても・・・。

237:デフォルトの名無しさん
06/06/05 12:11:00
>>236
 全く違う物?
 VC++の方がスキルとして認められ易いと聞きました
 新しい言語なのにC#って普及してないの?

238:デフォルトの名無しさん
06/06/05 12:12:05
志村ー、レス番! レス番!

239:デフォルトの名無しさん
06/06/05 12:13:21
>>235
とりあえず Express Editions を落として使ってみれば?

240:デフォルトの名無しさん
06/06/05 12:17:10
>>239
 タダやん
 いつのまにこんな物…
 勉強するにはもってこいですね
 ありがとうございました。


241:デフォルトの名無しさん
06/06/05 12:17:31
>>235
今から始めるのに言語仕様が変わっていてなぜ困る

242:& ◆lWyMorKHN2
06/06/05 12:19:07
平方根を求めようとしてsqrtを書いたんですが、コンパいるしたときに未定義のシンボルとでます。
何か必要なんでしょうか?

243:デフォルトの名無しさん
06/06/05 12:19:44
>>242
常識。

244:& ◆.uxO1zwzGk
06/06/05 12:20:53
教えてください!!

245:デフォルトの名無しさん
06/06/05 12:24:50
>>242
> 何か必要なんでしょうか?

問題解決能力

246:デフォルトの名無しさん
06/06/05 12:25:11
>>240
勉強し終わったころには新しい言語が出ていてまたいつのまにこんな物・・・

247:デフォルトの名無しさん
06/06/05 15:20:48
x=y^2のグラフを-2<y<2でyを変化させ、
適当な座標軸上にプロットするプログラムを書け、
といった課題が出されました。
while文を用いて、値を出すプログラムまでは作れるのですが、
座標軸をつくり、そこへプロットする仕方がわかりません。

どなたかご教授お願いします。

248:デフォルトの名無しさん
06/06/05 15:22:53
>>244
ヒント
メイクファイル

249:デフォルトの名無しさん
06/06/05 15:24:18
>>247
環境ぐらい書け
宿題丸投げは宿題スレへ

250:デフォルトの名無しさん
06/06/05 16:02:25
>>242
-lm


251:デフォルトの名無しさん
06/06/05 16:47:52
ファイルに書いてあるデータをポインタで参照できないものでしょうか。
例えばあるファイルをバイナリエディタで開くと以下のように見えたとします。
0F 32 5D BC 29
そこでCのソース中にunsigned int *p;などと宣言しておいた
ポインタがあって、なんらかの処理でpが32を指すように
なっているとすると、*(p + 1)とすると5Dが、*(p - 1)とすると
0Fが参照できるようなそんなことはCでは可能ですか?
fgetsでデータを一度配列に格納してそれをポインタで指す方法は、
配列の大きさを一体いくら確保しておけばよいのか、
予め分からないので使いにくいと思い、このような質問をさせて頂きました。
環境はRedHat9 + gcc-3.2.2-5です。

252:デフォルトの名無しさん
06/06/05 16:57:48 BE:48525555-#
>>251
>配列の大きさを一体いくら確保しておけばよいのか、

わかってから確保すりゃいいだろ。

253:デフォルトの名無しさん
06/06/05 17:01:08
>>251
stat()なりfseek()+ftell()なりでファイルサイズを取得し、
fread()でmalloc()した領域に読み込んでしまえばいい。
但し、ポインタの型はint *などではなくchar *になるわけだが。

254:デフォルトの名無しさん
06/06/05 17:01:33
LaTeXで解の方程式をの書き方を教えてください。

255:デフォルトの名無しさん
06/06/05 17:03:14
日本語でおk

256:デフォルトの名無しさん
06/06/05 17:07:21
>>252
>>253
なるほど、一度ファイルを総読み込みして調べるしかないわけですね。
サイズのでかいファイルになると時間がかかりそうですが、
仕方ないですね。
unsigned int *としたのはテキストファイル、バイナリファイルを
区別せずと考えたためです。この辺は自分でどうにかします。
ありがとうございました。

257:デフォルトの名無しさん
06/06/05 17:07:23
式でおねがいします。

258:デフォルトの名無しさん
06/06/05 17:10:08
256ですが追記。
もしかしてstatは総読み込みするような関数ではない…?
この関数はまだよく知らないので後は自分で調べて解決します。
どうもすみません。

259:デフォルトの名無しさん
06/06/05 20:10:52
>>256
一応「メモリマップトI/O」という言葉について調べることをおすすめする。
この頃のメジャーなOSではだいたいできると思う。


260:デフォルトの名無しさん
06/06/05 20:13:54
mmap() についても併せて調べてみるといいとおもう(UNIX系OSの場合)。

261:デフォルトの名無しさん
06/06/05 20:44:23
>>259
老婆心ながら。
× Memory Mapped I/O
○ Memory Mapped File

262:デフォルトの名無しさん
06/06/05 23:46:19
nCmの取り得る組み合わせを全て表示するようなプログラムを組め、という
問題を解くように依頼され、頭を悩ませて再帰関数で解いてみた。

URLリンク(upld3.x0.com)

こんな感じでOKでせうか?

263:デフォルトの名無しさん
06/06/06 00:23:33
ダウソして解凍してまで見る気にならん。
ソースそのまま見えるロダへ上げろ。

264:262
06/06/06 21:48:47
>>263
すいません、これでどうでしょうか? nCm 結果表示プログラムです。
URLリンク(www.uploda.org)


265:デフォルトの名無しさん
06/06/07 15:13:43
んな流れの速いアップロードに上げられてもなぁ。もう消えちゃってるよ。

266:デフォルトの名無しさん
06/06/07 16:02:14
コメントの内容とか見ると俺には>>264が自分で作ったとは思えなかった。

267:デフォルトの名無しさん
06/06/07 20:17:36
つい最近Cの勉強を始めた初心者です。
以下のソースについて質問です。
(画面上に「HELlo」と表示させるものです)

#include<stdio.h>
int main(void)
{
int i;
char a[]="hello";      ・・・A

*a='H';             ・・・B
*(a+1)='E';          ・・・B
*(a+2)='L';           ・・・B
for(i=0;i<5;i++){
printf("%c",a[i]);
}
}

Aの部分ではhelloを「”」の記号でくくっているのに、Bの部分では
「’」でくくっています。
これはどうやって使い分けるのでしょうか。
よろしくお願いします。

268:デフォルトの名無しさん
06/06/07 20:26:03
>>267
文字か文字列の違い

269:デフォルトの名無しさん
06/06/07 20:55:42
>>267
お礼のレスはまだかゴルァ!!!!!!!!!

270:デフォルトの名無しさん
06/06/07 21:09:40
>>267
初心者の俺が親切に答えちゃる。

"hello"は、'h'+'e'+'l'+'l'+'0'+'\0' のことで最後に '\0' = 0 がつく
同様に、"H"だと、'H' の後ろに '\0' が付く。

'\0' はここで文字列は終わりですよという目印
こうすれば最後に '\0' = 0 入っているのが分かんじゃないかな?

for(i=0;i<6;i++){
printf("%d-",a[i]);
}

こんなことをすれば、文字列を途中で終わらせることができるよ。

#include<stdio.h>
int main(void)
{
char a[]="hello";
printf("%s\n",a); /* hello と表示 */

*(a+2)='\0'; /* 3文字目に'\0'を代入。 */
printf("%s",a); /* he と表示される */
}

271:267
06/06/07 21:14:57
>>268-270
すごく良く分かりました~
ありがとうございました(・∀・)

272:デフォルトの名無しさん
06/06/07 21:58:03
char a[] = "hello";
(配列の初期化に限っては)上は下と同じ。
char a[] = {'h', 'e', 'l', 'l', 'o', '\0'};

273:267
06/06/08 02:15:14
>>272
thxです (^^

274:デフォルトの名無しさん
06/06/10 11:06:36
場違いかもしれませんが、質問です。
ソケットプログラムをしようと思っています(当方macです)が
sys/fcntl.h
sys/types.h
sys/socket.h
netinet/in.h
netdb.h
などのヘッダファイルの手の入れ方がわかりません
googleしてみましたが見当たりませんでした。
どこで手に入るのでしょうか?

275:デフォルトの名無しさん
06/06/10 11:39:55
質問ですけど、Aドライブからテキストファイルをよみこむのって
どうしたらいいんですか。

276:デフォルトの名無しさん
06/06/10 12:23:02
Cドライブから読み込むプログラムのCをAに変える

277:デフォルトの名無しさん
06/06/10 13:46:16
>>274
>場違いかもしれませんが
その通り。

278:デフォルトの名無しさん
06/06/10 14:45:44
>>277さん
では、どこが適切な場所か教えて下さい。

279:デフォルトの名無しさん
06/06/10 15:03:36
質問内容が意味不明だから誘導も出来ない。

280:278
06/06/10 15:16:36
こめんなさい。私の質問がまずかったのですね。
あるソースをみたら、上記にあるヘッダが#includeする
部分にかかれていたのです。でもHD内を検索したらそんな
書類はなくって(types.hはあったけど、、)。
で、web上にあるのかなと探したけれど上手く見つけられな
かったのです。だから、何処にあるのかわからなっくって
質問したのですが、、、
このヘッダは有名(と言えばいいの?)じゃないんですね。
ありがとうございました。それだけわかりました。
スレを汚してごめんなさい。

281:デフォルトの名無しさん
06/06/10 15:27:55
macは独自文化だから、macユーザーの集まるところへ行ったほうがいい。
最近のmacと昔のmacではOSが全然違うから、OSバージョンも明確に質問すること。

282:えいいち ◆GRGSIBERIA
06/06/10 15:29:37
WinAPIに手を出そうかと思って、Windowsゲームプログラミングを見ていますが、
以下のソースをコンパイルして実行すると、コンパイルに失敗して、実行ファイルが存在しない、とエラーが出ます。

#include <windows.h>

int WINAPI WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow
) {
MessageBox(NULL , "Hello, world!" , "MessageBox" , MB_OK);
return 0;
}

コンパイラはボーランドのC++Builderで、Cpadというソフトでコンパイル・実行しています。

283:えいいち ◆GRGSIBERIA
06/06/10 15:30:26
あと、エラーメッセージなど。

bcc32 test.c
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
test.c:
警告 W8057 test.c 11: パラメータ 'hInstance' は一度も使用されない(関数 WinMain )
警告 W8057 test.c 11: パラメータ 'hPrevInstance' は一度も使用されない(関数 WinMain )
警告 W8057 test.c 11: パラメータ 'lpCmdLine' は一度も使用されない(関数 WinMain )
警告 W8057 test.c 11: パラメータ 'nCmdShow' は一度も使用されない(関数 WinMain )
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
Error: 外部シンボル '_main' が未解決(C:\BORLAND\BCC55\LIB\C0X32.OBJ が参照)


284:デフォルトの名無しさん
06/06/10 15:31:07
コンパイルに失敗すれば実行ファイルが出来ないのは当たり前だ。

285:デフォルトの名無しさん
06/06/10 15:39:13
>>281
そのヘッダはどうやらunixのものなのらしいです。
とあるwebサイトで以下のような文章を見つけまして、
「WindowsやMacOS などで利用されるC言語処理系はUNIXのシステムコールと
同じ機能をもつ関数 を提供することが多いです。ヘッダーファイルの指定
さえ行えばソケットを利用したプログラムが書けるようになります。」
とあったので、それらのヘッダファィルのをとりあえず手に入れなければ
手の出しようがありません。入手先が皆目見当がつかないので、とりあえず
ここで聞いてみたという次第です。なので今はmacは関係ありません。
デフォルトでそのようなヘッダファイルが入っていないと言いたかったのです。

286:デフォルトの名無しさん
06/06/10 15:39:15
>>282-283
WinMainから始まるプログラムを書くときにはオプション-Wが必要。

287:デフォルトの名無しさん
06/06/10 15:40:39
>>285
元がUnix由来でも、Macで使いたいのだからMacのところで聞いて平気だと思うよ。

288:デフォルトの名無しさん
06/06/10 15:40:49
>>285
ヘッダだけ入手しても、socketプログラミングとかは出来ないがそれでもいいのか?

289:デフォルトの名無しさん
06/06/10 15:48:10
>>288
それでもいいです。と言うかサンプルコードを移植する為に
どういった構造体や定義とかが書かれているのか知りたいのです。
それを基に(mac用に)改変しようと思っています。
とりあえずいきなりsockaddr_in 構造体とかいわれても
ヘッダを見ないと何が何だかさっぱりなので。


290:えいいち ◆GRGSIBERIA
06/06/10 15:48:32
>>286
-wと-Wを間違えていたようでした。
お騒がせすみません。
ありがとうございました。

291:デフォルトの名無しさん
06/06/10 15:50:45
>>289
バージョンは?
ひとまずXcodeを入れる必要があると思います。
自分の環境にはヘッダファイルありますから。

292:291
06/06/10 15:55:01
>>289
これ以上はMac板で訊いた方が良い。


293:デフォルトの名無しさん
06/06/10 15:55:32
>>291
xcode(2.0,os 10.4.6)にありますか?
私はcodewarrior(8.3)をメインに使っていて、
先程(質問する前)ヘッダファィルが含まれているかなと思ってxcodeを
インストールしたのですが、spotlightで検索しましたが見つかりませんでした。
なんででしょう?どこにありました?質問ばかりですみませんが。

294:277
06/06/10 15:58:06
ここで説明すると居座るかと思って説明しなかったんだが
どっちみち居座りやがったか…

295:デフォルトの名無しさん
06/06/10 16:16:00
gccって.cファイルに//コメント使えますか?

296:デフォルトの名無しさん
06/06/10 16:40:17
>>295
たぶん使えるはず。
心配なら-std=c99を付ければ文句無し。

297:デフォルトの名無しさん
06/06/10 17:29:05
マカはマカ板に逝け。
おまいにVC++の話題されても全く理解できないのと同じだ。
おまいの話題はxcode使ってない香具師には全く理解できない。

298:デフォルトの名無しさん
06/06/10 18:31:46
a=(b*c)%2147483647;
の計算したいのですが
b*cの計算した時点で
変な数値になってしまうんですが
うまい方法ないでしょうか?

299:デフォルトの名無しさん
06/06/10 18:43:39
これまた強烈な奴がおいでになりました。
↓が相手してあげてください。

300:デフォルトの名無しさん
06/06/10 18:50:15
>>298
bとcの型が小さくて結果の上位ビットが捨てられているのではないかと予想。
個人的には2147483647の剰余を求めるよりも0x7fffffffとの&を取る方がいいと思う。

301:デフォルトの名無しさん
06/06/10 20:51:51
>>300
>2147483647の剰余を求めるよりも0x7fffffffとの&を取る
それは結果が異なるのだが。

302:デフォルトの名無しさん
06/06/10 21:07:53
struct element{//各要素を構造体で作る
struct element *leader ;//集合のリーダー(構造体)を指すポインタ
struct element *back ;//自分(要素)の後ろにいる要素(構造体)を指すポインタ
int number ;//所属する集合の要素数
};

struct element set[n];//具体的にsetという要素をn個作る

ここまでは問題ないのですが、この構造体を操作する関数を宣言のが上手くいきません。それは、

void yunion(int x,int y)//union関数が予約語だったとは・・・
{
if(set[x].number - set[y].number => 0)★★★//xが要素である集合がyが要素である集合より要素数が多い時
{
set[y]->leader = set[x]->leader;//代表元を書き換える


}

}

これをデバッグすると★★★の行で「set:定義されていない識別子です」とか言われます。
でも上で定義しているし・・・
この関数宣言の問題点はどこでしょうか?

303:デフォルトの名無しさん
06/06/10 21:38:35
>>302

if(set[x].number - set[y].number => 0 じゃなくて、
if(set[x].number - set[y].number >= 0 だろ。
あと、
set[y]->leader = set[x]->leader;//代表元を書き換える  じゃなくて、
set[y].leader = set[x].leader;//代表元を書き換える   だろ。

leaderはstruct element型へのポインタだが、set[x]はstruct element型
であってポインタじゃない。

304:デフォルトの名無しさん
06/06/10 21:44:54
>>302
 まさかとは思うけど、setはグローバル変数じゃなくてローカル変数ですた、
とかいうオチじゃないだろうな?

305:302です
06/06/10 22:12:41
お返事ありがとうございます。

setはメイン関数内で宣言しています。
yunion関数宣言はメイン関数の外で宣言しています。
エラーの理由として、

'set' : 定義されていない識別子です
.number' の左側はクラス、構造体、共用体でなければなりません
.leader' の左側はクラス、構造体、共用体でなければなりません

と言われます。
メイン関数の外で関数を作ってそこで代入を行ってもメイン関数には
反映されないので、ポインタを書き換えるためにアロー演算子で
「代表元を書き換える」をやろうとしています。

・・・まさか、メイン関数内で宣言したらグローバル変数だと
思っていたのですが、実はローカル変数扱いになるのでしょうか?

306:デフォルトの名無しさん
06/06/10 22:18:30
ネタか釣りと言ってくれ……_/ ̄|○

307:デフォルトの名無しさん
06/06/10 22:37:30
なんだコイツは?と思ったらここは入門編だった

308:デフォルトの名無しさん
06/06/10 22:43:14
>>305
 これ、どっから突っ込めばいいんだよ・・・

グローバル変数:プログラム全体から操作できる変数
ローカル変数:関数内で定義され、定義された関数内からしか直接操作できない変数
(関数内static指定の変数はどうなの?とかいう細かい話はとりあえず却下)

main関数もあくまで関数の1つ。よって、main関数内で
定義された変数もローカル変数。OK?
だからsetをmainの外に置きグローバル変数にすれば
とりあえずエラーは消える。
(グローバル変数にせず引数渡しをしてはどうか、
とかいいたいところだけど、ポインタがわかってないみたいだし、
混乱しそうだから止めておく)

>メイン関数の外で関数を作ってそこで代入を行ってもメイン関数には
>反映されないので、ポインタを書き換えるためにアロー演算子で
>「代表元を書き換える」をやろうとしています。
 これは説明できない!なんていえば理解してもらえるのかわからん!
匙を投げました。とりあえず
set[y].leader = set[x].leader;
に変更し、そしてCの基本からやりなおしてください。


入門編だからしょうがないよね。あはは・・・

309:デフォルトの名無しさん
06/06/10 22:48:45
次スレは「C言語なら俺に聞け(くだすれ編)」か「くだすれC言語」にすべきだな。

310:302です
06/06/10 23:04:18
お返事ありがとうございます。

ポインタを使うのは私には難しいのでそういう場合はグローバル変数で
処理しちゃえばポインタは考えなくていい、ということですね。

構造体の配列のポインタを操作、する必要があると思っていたのですが
ポインタが消えてくれてここからは自分で進めそうです。

入門編ということで来てしまいましたが、まだ門に入るに至らなかったようです。
Cの基本からやり直してきます。
疑問は全て解決しました。ありがとうございました。

311:デフォルトの名無しさん
06/06/10 23:15:59
確かにポインタ知識はCで必須というわけじゃないよな

312:デフォルトの名無しさん
06/06/10 23:19:22
そうだな。リスト構造なんてポインタなくてもなんとか作れるし

313:デフォルトの名無しさん
06/06/10 23:21:24
でも、ポインタを上手に使って作るほうがずっと簡単。

314:デフォルトの名無しさん
06/06/10 23:25:03
ポインタ説明なくせばCの授業もすぐ終わるし書籍も薄くできるのに

315:デフォルトの名無しさん
06/06/10 23:30:06
Cの次に出る言語は多分ポインタ使わないだろうな

316:デフォルトの名無しさん
06/06/10 23:39:53
Javaはポインタ使わないってママが言ってた

でもね、NullPointerExceptionていう例外はあるんだって
土曜日に遊びにくるおじさんが言ってた

317:デフォルトの名無しさん
06/06/10 23:45:37
>>311-312
Cで配列を扱う為には、ポインタでなければアクセス出来ない訳だが…。
標準関数ですらポインタを渡すものが多いのに、よくそんな事言えたものだね。


もう一度、勉強し直した方がいいよ。

318:デフォルトの名無しさん
06/06/10 23:46:35
>>316
ガッ

319:デフォルトの名無しさん
06/06/11 00:00:08
>>317
いやリストくらい作れるって

ヒント:マクロ

320:デフォルトの名無しさん
06/06/11 00:01:43
>>319
まず、日本語の勉強が必要そうだね

321:312
06/06/11 00:21:21
あぁポインタの知識の事か
配列を使う=ポインタについて知識が必要なんだよゴラァ

と怒られたのか俺は


配列の知識なんてCで(ry

322:デフォルトの名無しさん
06/06/11 00:53:09
ポインタって宣言がおかしくない?
こんな感じの方がよくない?
ptr は予約語。

ptr char& p;

323:デフォルトの名無しさん
06/06/11 00:53:34
>>289
スレリンク(mac板)

今更だが

324:デフォルトの名無しさん
06/06/11 02:34:55
CとC++一生にどっちかしか身につけれないならどっちやるべき?

325:デフォルトの名無しさん
06/06/11 02:44:32
もう寝ろよ

326:デフォルトの名無しさん
06/06/11 09:34:09
ポインタありと無しの実行結果ぐらいプロファイルして比べてみればいいのに。
ポインタ使ったほうが効率はいいよ。

327:超初心者マー君
06/06/11 09:42:18
すいません。
最近パソコン始めた超初心者なんですが
C言語を動かす為には何が必要なのですか?
「猫でもわかるC言語プログラミング」という本を
買って挑戦してるんですが、全くわかりません。
コンパイラーというもののインストールの仕方が分かりません。
コンパイラー以外にも何か必要なのですか?
添付CDロムのファイルの使い方がそもそも分からないし・・・・・
ぼくは猫以下なんでしょうか。
教えて1さん。

328:デフォルトの名無しさん
06/06/11 09:50:27
>>324
python

329:デフォルトの名無しさん
06/06/11 10:05:11
>>324
CとC++一生にどっちかしか身につけれないならプログラミングなんてしない方がいい。

330:デフォルトの名無しさん
06/06/11 10:48:20
>>327
俺も昔、何万もだして買ったコンパイラーの使い方がわからなくて、
ドブに捨てたよ。

331:デフォルトの名無しさん
06/06/11 11:01:01
初心者なら無料の使えよ~

332:デフォルトの名無しさん
06/06/11 11:17:06
猫でもわかるなんて参考にすると腐るぞ~

333:デフォルトの名無しさん
06/06/11 11:21:07
>>324
C++はCのサブセットだから、C++覚えればCも覚えたことになる。
だから解なしって答えなんだろ?

>>327
URLリンク(www.microsoft.com)


334:デフォルトの名無しさん
06/06/11 11:24:03
>>326
使い方次第。
何でもかんでも「ポインタ=高速」なんて思うのは間違い。

335:超初心者マー君
06/06/11 11:25:04
皆さんありがとう。
コンパイラーってそんなに高いものだったんですか・・・・・
「ハロー、ワールド」すら未だに表示させられません。
誰かインストールの仕方と他に必要なものを教えて
いただけませんか?

336:デフォルトの名無しさん
06/06/11 11:25:13
C言語入門ビギナー編をひととおりやってみて、問題集でも買おうとおもってるんですが、いい本があったら教えてください。

337:デフォルトの名無しさん
06/06/11 11:41:43
>>322
C++だけど。
template<typename T>
struct ptr
{
  typedef T* type;
};
こうすればこう書ける。
ptr<char>::type p;

338:デフォルトの名無しさん
06/06/11 11:47:05
>>335
Borland C++ならここのイントロ~2章を読め。
URLリンク(www.kumei.ne.jp)

VC++ 2005 EEならインストールした後のことはここに少し書いてある。
URLリンク(www.kumei.ne.jp)

339:デフォルトの名無しさん
06/06/11 14:59:45
>>333
>C++はCのサブセット
……

340:デフォルトの名無しさん
06/06/11 15:46:18
逆だな。
っていうかCもC99からはC++と完全な互換性はなくなってるけどな。

341:デフォルトの名無しさん
06/06/11 17:34:12

関数ポインタって何に使うんですか?


342:デフォルトの名無しさん
06/06/11 17:45:09
>>341
DLLから動的に関数をもらう時とか

343:デフォルトの名無しさん
06/06/11 18:34:12
main(int argc,char argv*)
ってなんですか?
本に載ってません。


344:デフォルトの名無しさん
06/06/11 18:53:51
>>343

URLリンク(www.google.co.jp)
↑このサイトにかなり色々載ってるから、みてみるといいよ。

真中に文字入力するとこあるから、「main(int argc,char argv*)」っていれてからボタンを押してね。

345:デフォルトの名無しさん
06/06/11 19:22:54
>>343
そんな糞本は捨てちまえ

346:デフォルトの名無しさん
06/06/11 19:29:32
main(int argc,char argv*)
で載ってる方がよっぽど糞本だがな。

347:デフォルトの名無しさん
06/06/11 19:33:23
本のタイトルは?

348:デフォルトの名無しさん
06/06/11 19:34:09
正しいのって int main(int argc, char** argv) だっけ?

349:デフォルトの名無しさん
06/06/11 21:26:24
>>348
int main(int argc , char *argv[])

350:デフォルトの名無しさん
06/06/11 21:58:17
>>349
言語仕様は以下

返却値の型 int をもち仮引数を持たない関数
int main(void){ /* ... */ }

二つの仮引数を持つ関数(仮引数は, これらが ...)
int main(int argc, char *argv[]) { /* ... */ }

上に揚げた二つの方法のいずれかと等価な方法
--> int と等価な typedef された型でもいいし, char **argv でもいい

上に揚げた三つの方法のいずれでもない処理系定義の方法


351:デフォルトの名無しさん
06/06/11 22:24:53
じゃあ char argv* な環境があるかもしれないと(あるのか?)

352:デフォルトの名無しさん
06/06/11 23:10:43
char argv[] ならともかく char argv* ってなによ?

353:デフォルトの名無しさん
06/06/11 23:24:40
ワイルドカードでは

354:デフォルトの名無しさん
06/06/12 00:47:25
今北。
俺は、C++をやろうと思ってるのですが、C++でもおkですか?

355:デフォルトの名無しさん
06/06/12 00:47:59
>>354
C++相談室 part50
スレリンク(tech板)

356:デフォルトの名無しさん
06/06/12 01:09:20
>>355
すいません。ここじゃないのですね。ありがとうございます。


357:デフォルトの名無しさん
06/06/12 12:06:42
>>354
何がどうだったら「おk」なんだか解らんが
少なくともお前には無理。

358:デフォルトの名無しさん
06/06/12 12:57:35
>>350
> char **argv でもいい

関数の仮引数における「type hoge[]」は、
「type *hoge」のシンタックスシュガー。

正確には「char *argv[] でもいい」と書くのが正しい。

359:デフォルトの名無しさん
06/06/12 12:59:06
仮引数の [] は配列じゃないよ。ただのポインタだよ。

360:デフォルトの名無しさん
06/06/12 14:48:53
>>358,369
おまいらの主張は, 言語の持つ意味としては文句のつけようがないんだが,
JIS の規格書に書いてあるんだよぉ...
俺は JIS の規格を要約しただけで, 俺のせいじゃないんだよぉorz


361:デフォルトの名無しさん
06/06/12 16:23:07
#include<stdio.h>
int main(void)
{
int a;
double b,c;

scanf("%lf",&b);
a=(int)b;c=a*10;
printf("a=%d\n",a);printf("b=%lf\n",b);printf("c=%d",c);
return 0;
}

上記プログラムを実行してbに1.23を代入したら
a=1
b=1.23
c=0

となりました。どうやればaにbの整数部分である1を代入できるのでしょうか・・・・

OS:windows2000
コンパイラ:borland

362:デフォルトの名無しさん
06/06/12 16:25:39
お願い
5×5の魔方陣教えて

363:361
06/06/12 16:43:29
すいません。int c;でした。。。解決しました。

364:デフォルトの名無しさん
06/06/12 17:01:45
積分、不定積分のプログラムをつくりたいんですが
参考になるサイトとかどこかにないですか?

365:デフォルトの名無しさん
06/06/12 17:07:01
以下の論理式を演算↓(NOR)のみを用いて表したいんですがよくわかんないっす。教えて下さい
(1) A|B

(2) A⇔B

A→Bを|のみを用いて表したいんですがこれもできないです

366:デフォルトの名無しさん
06/06/12 17:34:22
>>365
どこまで理解していて、何がわからないのか?
# 全部わからないは論外

367:デフォルトの名無しさん
06/06/12 17:49:33
>>365
日本語でおk

368:デフォルトの名無しさん
06/06/12 17:49:40 BE:122283779-#
C言語関係ねえし。真理値表書いてドモルガン。
(A OR B) = (A NOR B) NOR 0

A→B = (A AND B) OR (A XOR B)
なので、NOTがどっかで使えないとダメぽな予感。

369:デフォルトの名無しさん
06/06/12 17:58:40
>>366
まず何をしたらいいのか・・・・

370:デフォルトの名無しさん
06/06/12 18:07:22
まず「論理式」でぐぐれ
そしてC言語に関連あるところまで理解が進んでからもう一回来い。

371:デフォルトの名無しさん
06/06/12 18:11:16
>>369
> まず何をしたらいいのか・・・・

まずは、日本語の勉強からどうぞ。
算数の勉強も合わせてどうぞ。

372:デフォルトの名無しさん
06/06/12 18:17:18
ひねくれ者うぜーしばいばい

373:デフォルトの名無しさん
06/06/12 18:42:14
URLリンク(www.geocities.co.jp)
ドモホルンリンクルの法則・・・なんでもないw

374:デフォルトの名無しさん
06/06/12 18:45:03
>>368
x nor x = not x だよ。

nor か nandがあればOK。

375:デフォルトの名無しさん
06/06/12 18:46:01
ねぇねぇ、知ってた?論理回路のすべてはnotがあれば全部作れるんだよ?

376:デフォルトの名無しさん
06/06/12 19:10:34
単項演算だけでか?

377:デフォルトの名無しさん
06/06/12 19:11:56 BE:81522667-#
>>374
>A→Bを|のみを用いて

と書いてあるんでNOTの入った物(NOR,NANDも含む)が必要かなと。

378:365
06/06/12 19:16:17
A⇔B = ((not A)or B) and (A or (not B))ですかね?
これを巧く直せないんです

379:デフォルトの名無しさん
06/06/12 19:19:24
>>378
だからスレ違いだっての

380:デフォルトの名無しさん
06/06/12 20:01:16
300あたりから「くだすれC言語」化してきたな、と思ってたら
ついにC言語ですらなくなったか。このスレも終わりかな。

381:デフォルトの名無しさん
06/06/12 21:07:50
入門編だからいいんだよ
質問の仕方入門や
BOOL代数の入門も含まれる

という事にしてマタリしとこう

382:デフォルトの名無しさん
06/06/12 21:15:16
>>381
質問の仕方は勘弁してくれ。
正しい質問の仕方を心得ている事は、最低限必要。


プログラミング言語初心者はいいが、日本語初心者はお断りにすべき。
母国語もマトモに使えないようでは、プログラム以前の問題。


383:デフォルトの名無しさん
06/06/12 21:15:56
2B or (not 2B)

384:デフォルトの名無しさん
06/06/12 22:24:30
>>368
「論理回路 完全系」でググれ。

385:URLエンコード
06/06/14 14:57:40
URLリンク(upld3.x0.com)

このソースは書籍からのCGIのサンプルなんですが
CによってURLエンコードをする際に%xx%nn%yyという2バイトコードをを16進数に変更して1バイトにまとめていく処理があるのですが
229行目での配列への代入が何を代入しているのかがどうしても分かりません。
この代入は次のループで書き換えられているような気がするのですが、これは必ず必要な処理なのでしょうか。
変な文章の質問になりますが、ここだけがどうしても胸につかえていて気持ち悪いんです。どなたかスッキリさせていただけないでしょうか。

386:デフォルトの名無しさん
06/06/14 15:13:41 BE:149769656-#
>>385
%xxという形式じゃなかったら、そのままコピーしてるだけなんじゃない?
インデックスの変数をインクリメントしてるから、次のループでも
上書きはしてないと思う。


387:URLエンコード
06/06/14 15:23:18
>>386
失礼しました。
改行でのみの行番号だと223行目の部分でした。
エディタ入れなおしたばっかりで設定し忘れていました。


388:デフォルトの名無しさん
06/06/14 15:40:38 BE:199692858-#
>>387
ああ、本当だ、それバグっぽいね。

他にも、渡されたデータのサイズに関係なく適当にmalloc()してるとか、
%が現れたら、無条件にインデックスを+2してるとか、危なそうなコー
ディングしてるね。


389:URLエンコード
06/06/14 15:43:59
>>386
>>388
おお。ではこれは必要のない一行ということでよかったのでしょうか。
御教授いただきありがとうございました。
これで胸の支えが取れた感じです、、が危なそうなコーディングですかー。
中々C言語によるCGIの書籍というのがなかったもので、徐々に理解していきたいとおもいます


390:デフォルトの名無しさん
06/06/14 17:47:23
>>385のソース見ると
なんていうか、すごいね。


391:デフォルトの名無しさん
06/06/14 18:17:22
学校ではC++できるのですが、
家ではやり方が良くわかりません。
どうすれば、C++でコンパイルや実行などができるのでしょうか??

392:デフォルトの名無しさん
06/06/14 18:24:56
>>391
学校ではどうやっている?

393:デフォルトの名無しさん
06/06/14 23:31:48
電気屋に逝って店員に相談する。
XPならVC++とかじゃね? VC++スレ逝け。詳しい香具師が多い。

394:デフォルトの名無しさん
06/06/14 23:38:34
いつも思うんだが、なぜ学生なのに先生や同級生に聞かないんだろう

395:デフォルトの名無しさん
06/06/14 23:45:34
キョドってキモがられて虐められて以下無限ループ

396:デフォルトの名無しさん
06/06/14 23:59:58
URLリンク(www.vipper.org)
こんな顔の奴だな。

397:デフォルトの名無しさん
06/06/15 00:04:08
ああ… そういう奴らがここに溜まって来る訳か。

398:デフォルトの名無しさん
06/06/15 00:07:11
下がり眉
常に上目遣い
常に口が開いてる
口をすぼめ気味
自触癖っぽい唇の傷

全てが精神遅滞を思わせる特徴だなwww

399:デフォルトの名無しさん
06/06/15 00:13:10
友達はいないかも知れんが先生に聞くことはできるだろ
それすらできないならちょっとアレだ

400:デフォルトの名無しさん
06/06/15 00:26:38
>>399
この手の人は、他人が書いた答えを写す事しか頭にないだけ。

401:デフォルトの名無しさん
06/06/15 00:36:50
>>399
そうだよね。積極的に教授と交流作っとけば成績もプラスに評価されるよね。
あ、もちろん対教授コミュ法は『教えて君』じゃだめだよ。

402:デフォルトの名無しさん
06/06/15 02:34:08
#include <time.h> #include <stdio.h>
int main(){
time_t times;
struct tm *jt;
time_t tt;
times = time(NULL);
// jt = localtime(×);
jt->tm_year = 100;
jt->tm_mon =1;
jt->tm_mday = 1;
jt->tm_hour = 5;
jt->tm_min = 11;
jt->tm_sec = 33;
printf("%4d年%2d月%2d日 %2d時%2d分%2d秒\n",
1900+jt->tm_year,jt->tm_mon,jt->tm_mday,
jt->tm_hour,jt->tm_min,jt->tm_sec);
tt = mktime(jt);
printf("%d\n",tt);
return 0; }

上記プログラムで、現在時刻を、また通算秒数に戻したいのですが、
localtime()で受け取った値をそのまま使えば、戻せるのですが、
自分で、年月日、時間分秒を指定すると、-1になってしまいます。
年月日、時分秒だけ入力して、
通算秒数に戻す方法はないのでしょうか?改行で怒られて見づらくてすいません。

403:デフォルトの名無しさん
06/06/15 06:04:48
>>402
時刻表示にprintf()で愚直に詰めるのはやめようよ。
ちゃんとstrftime()って関数があるんだから。
処で、jtはどこを指しているのかな?

404:402
06/06/15 07:39:19
そういう関数があるんですか、いろんなHPでprintfで表示してる
のでそれで良いのかと思ってました。

すみません、どこを指してるとはどういう意味でしょうか。
localtime()の返り値を受け取って初めて、
時間指定ができるようになるとか、そういう意味でしょうか。


405:デフォルトの名無しさん
06/06/15 07:56:52
localtime()を使わない場合、struct tm * jt;でポインタを宣言した後初期化もしないで代入してはダメ。
また、localtime()で戻されるポインタが指す領域もlocaltime()が抱える静的領域なのでそれを加工してはダメ。

書くならこんなもんかな。
#if 0 /* localtime()の例 */
time_t tt = time(NULL);
struct tm * pjt = localtime(& tt);
#else /* 自分で代入する例 */
struct tm jt = {33, 11, 5, 1, 1, 100, };
struct tm * pjt = & jt;
#endif
char buf[30];
strftime(buf, sizeof(buf), "%F %r", pjt);

strftime()の使用例などについてはこちら参照。
URLリンク(www.linux.or.jp)
printf()で愚直に詰めるのはアナクロだと言うことを知らないアナクロな表現者は多いと言うことだね。

406:デフォルトの名無しさん
06/06/15 08:56:23
>>405
> strftime(buf, sizeof(buf), "%F %r", pjt);

それ「#else」の方だと

 strftime(buf, sizeof(buf), "%F %r", &pjt);

としないとダメじゃね?

407:デフォルトの名無しさん
06/06/15 09:24:44
>>406
よく見ろ。それを回避するためにstruct tm * pjt = & jt; している。

408:406
06/06/15 10:47:00
>>407
そうか、見落としてたよ。

409:デフォルトの名無しさん
06/06/15 16:16:49
printf 使わないで、
strftime だけで
"2006 年 6 月 15 日 木曜"
て書く方法教えて!

410:デフォルトの名無しさん
06/06/15 16:58:54
>>409
char buf[100];
struct tm date = {0};
date.tm_year=2006-1900;
date.tm_mon=6-1;
date.tm_mday=15;
mktime(&date);
setlocale(LC_TIME, "Japanese");
strftime(buf, sizeof(buf), "%Y 年 %#m 月 %#d 日 %a 曜", &date);
puts(buf);

411:デフォルトの名無しさん
06/06/15 18:47:34
外部関数としてファイルを分割し、
メイン関数で外部関数を呼ぶとき、構造体を引数として外部関数に渡すにはどうしたらいいですか?

412:デフォルトの名無しさん
06/06/15 20:31:57
>>411
普通に呼べばいい。

413:デフォルトの名無しさん
06/06/15 20:48:48
>>411
その構造体をさらに別のファイルfoo.hで宣言して、それぞれのソースファイルでインクルードする。

414:デフォルトの名無しさん
06/06/15 21:47:24

0000000000
1111111111 1セット
2222222222
0000000000
1111111111 2セット
2222222222
0000000000
1111111111 3セット
2222222222
...        xセット

(10+1, 3, x)
10文字ずつ並んでいる(改行コードで文字数が+1と考える)
それが3行で1セットのものがある。
それがxセットあるとする。あと、これがchar str[1024];とかに入ってると考える。

それを次のように横向きにつなげるのにはどうすればいいだろうか?

000000000000000000000000000000
111111111111111111111111111111
222222222222222222222222222222
(10*x+1, 3)

※ここで10と3って書いたけど実際に使うプログラムでは3じゃなくて20です。
長くなりすぎないように3に変えただけです。

頭が悪くてやり方がわからん。教えてくれまいか?

415:デフォルトの名無しさん
06/06/15 23:34:21
// こんなもんかな
const int rowLen = 10;
const int setLen = 3;
const int rowSize = rowLen + 1;
const int setSize = rowSize * setLen;
char newStr[1024];
newStr[0] = '\0';
for (int rc = 0; rc < setLen; ++rc) {
for (int ic = 0; ic < x; ++ic) {
sprintf(strchr(newStr, '\0'), "%.*s", rowLen, & str[ic * setSize + ir * rowSize]);
}
}

416:デフォルトの名無しさん
06/06/15 23:43:26
変数名の付け方が最悪だなウププププ

417:402
06/06/16 00:05:27
>>405
うわ、経過秒表示できました。
自分で代入する場合のサンプルまでどもです。

418:デフォルトの名無しさん
06/06/16 00:47:20
NULLポインタを返す関数を作るのはだめですか?
一々アドレスの有効性を示すブール値が必要とは思ってなかったけど
会社の先輩に言われました。ここは組み込み系だからなとかなんとか・・・

419:デフォルトの名無しさん
06/06/16 00:49:34
>>418
そんなことありません。
ポインタを返す関数の場合、エラーが起こったときにはNULLを返すのが普通です。

420:デフォルトの名無しさん
06/06/16 00:50:49
>>418
その先輩を説得するために、mallocやfopenの例を示しましょう。
ただし、あまり関係が悪くならないように立ち回る必要がありますね。

421:418
06/06/16 00:54:00
>>419
そうですよねー。
なんかアセ屋さん上がりの人たちが得意げに説法してくれるので
自信失いました。

NULLを知らずにアクセスしたらどうすんだって言うんですよ。
ちゃんと返り値のほうでNULLかどうか見てるのですが、
忘れたらどうすんじゃとかなんとか・・・
それ知らない人が次にソース触ったらどうとこかこうとか。

会社辞めようかな orz

422:419
06/06/16 01:22:19
>>421
周りが全部そうだったら、ひとまず先輩を立てておいて転職を画策するって手もありますね。

いずれにせよ・・・がんばってください。

423:デフォルトの名無しさん
06/06/16 07:56:32
>>421
そんな変なスタイルに凝り固まった人たちと仕事していても(技術的に)得る物はありませんよ。
適当に相槌打ちつつ次を模索するのが妥当かと。

424:デフォルトの名無しさん
06/06/16 13:58:33
NULLを知らずにアクセスするのが怖いならCやC++は使うべきじゃないなあ。


425:デフォルトの名無しさん
06/06/16 19:06:53
>>415
ありがと。解決しました。

426:デフォルトの名無しさん
06/06/16 22:42:09
組み込み系だから何か事情があるんじゃないの?
つうか一番大事な理由をちゃんと聞いてないってどういう事よ

427:デフォルトの名無しさん
06/06/16 22:45:22
理由書いてるじゃん、「NULLを知らずにアクセスしたらどうすんだ」って。
推して知るべし。

428:デフォルトの名無しさん
06/06/16 23:14:47
boolean な戻り値が何を意味してるかを知らずに
戻り値を無視したらどう(ry

429:デフォルトの名無しさん
06/06/17 01:04:16 BE:38820454-#
ポインタを戻すこと自体の是非は文脈に依存するが、ポインタが戻されたらNULLかどうかを
チェックするのは当然。

430:デフォルトの名無しさん
06/06/17 01:45:23
仕様で NULL にならないと書いてあっても、
とりあえず assert くらいはするかもしれんな。

431:418
06/06/17 09:15:32
>>426
いろいろ調べてみて分かってきたのですが
今私が使っているCPUではNULLがゼロ番地を示すようにコードが落ちます。
ここまでは普通の話かもしれません。
(違うところを差す環境もあるらしいですが)

このCPUの場合には0番地はCPUが使う特殊な領域として定義されていて
ユーザがアクセスすると暴走するようです。
明確にCPUリセットや決められた割り込みが発生すればいいのですが、
他に使っている割り込み処理を壊してしまったりするようです。

正直、NULLをチェックするのを忘れた場合でも、CPUリセットする
だろうという思い込みはありましたが、
やっぱり、チェックし忘れたらどうするんだっていう言い方だけでは
分かりませんよね。。。

>>428
結局そういうことですよね。
しかも、booleanがTRUEのときに、返り値のアドレスがNULLかチェックする
なんて馬鹿げてるし。
結局NULLかどうかは必ず検査していないといけないですよねw

>>430
NULLが返ることもあることを仕様書に明記すればいいみたいな話で
もういいやみたいな言われてしまいました。

でもやっぱり結局はNULLかどうかを検査するコードを常に書かないと
いけないわけですよねw

難しいですね もっと勉強します。

432: ◆hznrtioKU2
06/06/17 13:25:54
教えてください。
char *str[][] =
{
{"abc", "def"},
{"ghi","jkl"}
};

これを引数として関数側に飛ばす場合、受け側はどういう記述でいけばいいのでしょうか?
*[][]でも***でも**[]でもむりですた('A`)

433: ◆hznrtioKU2
06/06/17 13:28:05
BOOL GetIniFilePos(POINT *coordinate, short PosVal, char **chKeyPos, char *ActDir)
{
short i;
for(i = 0; i < PosVal; i++)
{
/* セクション"POS"からxの値を取得 */
(coordinate + i)->x = GetPrivateProfileInt("POS", &chKeyPos[0][i], -1, ActDir);
if((coordinate + i)->x == -1)
{
goto FUNC_END;
}
/* セクション"POS"からyの値を取得 */
(coordinate + i)->y = GetPrivateProfileInt("POS", &chKeyPos[1][i], -1, ActDir);
if((coordinate + i)->y == -1)
{
goto FUNC_END;
}
}
return TRUE;
FUNC_END:
return FALSE;
}
static char *chItemPos[POS_XY][POS_VALUE] = {
{"One_x", "Two_x", "Three_x", "Four_x", "Five_x", "Six_x"},
{"One_y", "Two_y", "Three_y", "Four_y", "Five_y", "Six_y"}
};
/* SKILLPOSキー項目テーブル */
static char *chSklPos[POS_XY][SKLPOS_VALUE] = {
{"SklOne_x", "SklTwo_x", "SklThree_x", "SklFour_x", "SklFive_x", "SklSix_x"},
{"SklOne_y", "SklTwo_y", "SklThree_y", "SklFour_y", "SklFive_y", "SklSix_y"}
};


434: ◆hznrtioKU2
06/06/17 13:29:57
GetIniFilePos()の3番目の引数に下記の配列を渡して参照させたいんだが・・・
chKeyPos部分の受けの型はいったいどうすればいいのかさっぱりなんで('A`)


435:デフォルトの名無しさん
06/06/17 13:35:33
>>431
君にはこれがきっと役に立つと思うから読んでごらん。
URLリンク(sec.ipa.go.jp)

ただ、これで先輩を納得させたり教育したりしようと思わないこと。
一人でこっそりスキルアップに励むが吉。

436:デフォルトの名無しさん
06/06/17 13:42:07
>>434
無理。
char*を二つメンバーにもつ構造体を宣言し、その配列を使うようにしろ。

437: ◆hznrtioKU2
06/06/17 13:44:05
>>436
あー、やっぱそうなのか
それとなぜ無理なのかを教えてほしいんですけどいまいち納得がいかないというか
ポインタについてまだ理解できてないというか・・

438:デフォルトの名無しさん
06/06/17 14:19:36
>>437
結論だけ言うと、多次元配列を関数に渡す場合、仮引数の型は最初の次元を除いてその大きさを
全て明記しなければならない。

詳しくはC FAQ参照。
URLリンク(www.kouno.jp)

この説明で理解できない場合は、『ポインタ完全制覇』のような(そのような書籍が実在するのか
知らないし、読んだこともないが、確かにポインタに特化した書籍は存在する)書籍を読むと良い。

あるいは、”多次元配列 仮引数”などで検索してヒットしたページを読んでみると良いかもしれない。


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch