C言語なら俺に聞け(入門篇) Part 12
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2007/05/08(火) 19:39:26・C++言語はスレ違いです。
・分からない事をなるべく詳しく書いて下さい。
・ソースコードを晒すと答えやすくなるかもしれません。
・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。
前スレ
C言語なら俺に聞け(入門篇) Part 11
http://pc11.2ch.net/test/read.cgi/tech/1176800483/
過去スレ
Part 1 ttp://pc8.2ch.net/test/read.cgi/tech/1146700389/ Part 2 ttp://pc8.2ch.net/test/read.cgi/tech/1153818463/
Part 3 ttp://pc8.2ch.net/test/read.cgi/tech/1160682950/ Part 4 ttp://pc8.2ch.net/test/read.cgi/tech/1162999861/
Part 5 ttp://pc8.2ch.net/test/read.cgi/tech/1165022193/ Part 6 ttp://pc10.2ch.net/test/read.cgi/tech/1167325490/
Part 7 ttp://pc10.2ch.net/test/read.cgi/tech/1170064980/ Part 8 ttp://pc11.2ch.net/test/read.cgi/tech/1171946674/
Part 9 ttp://pc11.2ch.net/test/read.cgi/tech/1173284217/ Part 10 ttp://pc11.2ch.net/test/read.cgi/tech/1174290325/
関連スレ
C/C++の宿題を片付けます 86代目
http://pc11.2ch.net/test/read.cgi/tech/1176996941/
くだすれC言語(初心者用) Part.2
http://pc11.2ch.net/test/read.cgi/tech/1172099763/
スレを勃てるまでもないC/C++の質問はここで 2
http://pc11.2ch.net/test/read.cgi/tech/1178503366/l50
はきだめC/C++下級者の質問箱 2
http://pc11.2ch.net/test/read.cgi/tech/1156206091/l50
【C 関数検索 man on WWW】 http://www.linux.or.jp/JM/index.html
0002デフォルトの名無しさん
2007/05/08(火) 19:41:30char c;
char str[100];
もしかしてこのcとstrが同じだと思ってるとか?
0003デフォルトの名無しさん
2007/05/08(火) 19:45:33C言語の場合
char c; /* 文字型の宣言 */
char str[100]; /* 文字列型の宣言 */
Java とか C# とか
char c;
string str;
こういうことなのかな?なんか変なかんじがする…
0004デフォルトの名無しさん
2007/05/08(火) 19:47:26さすがにcがポインタだとは言わないだろ。
0005デフォルトの名無しさん
2007/05/08(火) 19:48:20違うんですか?
0006デフォルトの名無しさん
2007/05/08(火) 19:48:38少なくともポインタ変数ではないし、
ポインタと説明してる紛らわしい本はあって欲しくない。
文字列をポインタを通して渡す、程度の話をしてるんでないかな。
0007デフォルトの名無しさん
2007/05/08(火) 19:50:27上手く動かないだけじゃ何を意味してるのか曖昧だぞ。
0008デフォルトの名無しさん
2007/05/08(火) 19:52:17Cには文字型も文字列型もない
0009デフォルトの名無しさん
2007/05/08(火) 19:56:10期待している動作
printf ("%d\t%d\n",ran,kai);を10回実行し、11回目のループ時にEndを吐き出す
表示例は、以下の様な感じ
32 1
1 2
176 3
43 4
22 5
11 6
299 7
231 8
32 9
98 10
End
実際の動作
何も表示されない
やっぱりgotoじゃ無理なんですかね?
0010デフォルトの名無しさん
2007/05/08(火) 19:56:59授業とかはあくまで補助や学習スケジュール管理と考えたほうがいい
専門学校なんかは1年〜数年単位ですべてが学べるようになっているはずだから
教え方や進歩速度に不満があるならとりあえず教科書読んで池
ポインタもそのうちしっかりやるだろ
0011デフォルトの名無しさん
2007/05/08(火) 19:58:55goto で無理なんてことはあり得ない。
0012デフォルトの名無しさん
2007/05/08(火) 20:05:00C:\KD\sk\practis\goto>bcc32 goto.c
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
goto.c:
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
C:\KD\sk\practis\goto>goto
C:\KD\sk\practis\goto>goto
C:\KD\sk\practis\goto>
0013デフォルトの名無しさん
2007/05/08(火) 20:11:090014デフォルトの名無しさん
2007/05/08(火) 20:11:52#include <stdlib.h>
#include <time.h>
int main() {
int ran;
int kai;
srand((unsigned)time(NULL));
kai = 0;
LOOP:
if(kai >= 10) { goto END; }
ran = rand() % 300 + 1;
printf("%d\t%d\n", ran, kai);
++kai;
goto LOOP;
END:
puts("End");
return 0;
}
0016デフォルトの名無しさん
2007/05/08(火) 20:18:160017デフォルトの名無しさん
2007/05/08(火) 20:19:160018デフォルトの名無しさん
2007/05/08(火) 20:19:48っ .\goto
っ goto.exe
0019デフォルトの名無しさん
2007/05/08(火) 20:20:51goto.exe
↓
.\goto.exe
0020デフォルトの名無しさん
2007/05/08(火) 20:21:36してますよw
証拠
http://www.imgup.org/iup378065.png
因みにclでコンパイルしても結果は同じでした
これがVISTA QUALITY?
0021デフォルトの名無しさん
2007/05/08(火) 20:23:51しまった、gotoはコマンドなのか・・・
これで解決しました
済みませんでしたあああ(ノ-`)
0022デフォルトの名無しさん
2007/05/08(火) 20:24:16プロンプトのコマンドと被るような名前をやめればおk
copy dir del mkdir などなど
0023デフォルトの名無しさん
2007/05/08(火) 20:25:54なるほど
0024デフォルトの名無しさん
2007/05/08(火) 20:26:060025デフォルトの名無しさん
2007/05/08(火) 20:29:01俺も失念してたぜ。
0026デフォルトの名無しさん
2007/05/08(火) 20:29:270027デフォルトの名無しさん
2007/05/08(火) 20:30:45感激です><
因みに、ファイル名の8割が関数名なので、こういうことは偶にあったんですが
今回はコマンドエラーが出なかったので全然気付きませんでした(ノ-`)
0028デフォルトの名無しさん
2007/05/08(火) 20:32:04ついでにpractisも直したといたほうがいいぞw
0029デフォルトの名無しさん
2007/05/08(火) 20:39:29全スレ→前すれ
>>28
>>13で言われて気付いたので直そうとしたんですが
システム系統以外、全部落としてもシステムから蹴られるので
今度再起動した時にでも直しておきます
0030デフォルトの名無しさん
2007/05/08(火) 20:53:510031デフォルトの名無しさん
2007/05/08(火) 21:14:36セッションによるページ間のデータの転送の仕方がわからないのですが・・・
例えば、BMP(体脂肪の奴)を測定するプログラムで、
1ページ目で体重・身長を入力して
2ページ目で結果を表すという流れなんですが・・・
色々調べたり試行錯誤してみても全くわかりません。
ご教授願えませんか??
0032デフォルトの名無しさん
2007/05/08(火) 21:22:56C関係ない気がするが適当にエスパーして答えとく
・1ページ目で入力されたデータを何らかの識別子と共に保持しておく
・2ページ目にその識別子を埋め込んでおく
・2ページ目からの入力がきたら、識別子から保存してるデータと関連づける
0033デフォルトの名無しさん
2007/05/08(火) 21:25:160034デフォルトの名無しさん
2007/05/08(火) 21:44:19FOX★公認!!!
俺たちのクリックで日本を一位にしようぜ!!
“30年は日本に手は出せないな”という勝ち方をしたい
http://wwwww.2ch.net/test/read.cgi/news4vip/1178602852/
1. ポーランド 139,797,680
2. チリ 137,040,439
3. ★日本 86,475,213★
4. イスラエル 80,930,530
5. スロベニア 57,137,042
6. フィンランド 40,857,499
石を投げる戦争から人は進化・進歩を遂げ、剣や槍などの武器をもって戦うようになった
人間はさらに発展し兵器を使う戦争を始めた
そして今、指先一つを武器とした電脳戦争が勃発したのであった・・・
皇国を勝利へと導くには貴様らの参戦が不可欠である
・戦場
http://www.clickclickclick.com/default.asp
・まとめサイト
http://www33.atwiki.jp/clickvip/
0035デフォルトの名無しさん
2007/05/08(火) 23:50:42配列の大きさをただしく認識してくれないのですが、どこが間違っていますか?
内積を計算するプログラムです。
C言語むずい^^;
0036デフォルトの名無しさん
2007/05/08(火) 23:52:25スコープ外で宣言された配列の大きさは取得できない
関数引数で渡されるのはあくまで配列先頭へのポインタのみ
それができるならライブラリ関数でわざわざバッファサイズ指定したりしないだろ?
0037デフォルトの名無しさん
2007/05/08(火) 23:53:06ttp://www.kouno.jp/home/c_faq/c6.html#21
0038デフォルトの名無しさん
2007/05/09(水) 00:02:12だったらこっちも4とでるべきなのでは?
0039デフォルトの名無しさん
2007/05/09(水) 00:05:53>36
0040デフォルトの名無しさん
2007/05/09(水) 00:07:39では、実際この関数で配列の大きさを求めるにはどうしたらいいのでしょう?
rubyでは.sizeでよかったんですが・・計算系はruby遅すぎて;;
0041デフォルトの名無しさん
2007/05/09(水) 00:09:490042デフォルトの名無しさん
2007/05/09(水) 00:11:320043デフォルトの名無しさん
2007/05/09(水) 00:14:020044デフォルトの名無しさん
2007/05/09(水) 00:18:10関数内でもいけるはずです。どうしたらいいでしょう?
もしやひとつひとつ取得していく系?
0045デフォルトの名無しさん
2007/05/09(水) 00:19:06だからできんといっとろーが
0046デフォルトの名無しさん
2007/05/09(水) 00:20:200047デフォルトの名無しさん
2007/05/09(水) 00:21:010048デフォルトの名無しさん
2007/05/09(水) 00:23:100049デフォルトの名無しさん
2007/05/09(水) 00:23:18for(i=0; a[0]!=null; i++){
count++;
}
などは?
0050デフォルトの名無しさん
2007/05/09(水) 00:23:440051デフォルトの名無しさん
2007/05/09(水) 00:24:11配列の要素数が未定なのですが?
ベクトルとベクトルを渡したら内積が得られる。
引数は2つのはずです。
0052デフォルトの名無しさん
2007/05/09(水) 00:25:12nullじゃなかった・・・
0053デフォルトの名無しさん
2007/05/09(水) 00:27:39無理なもんは無理 まじで無理
0054デフォルトの名無しさん
2007/05/09(水) 00:27:45政府の Ruby 計画が心配になってきたぞ。
>>51
要素数はどこかで分かってるはずだ。
inner_product 内に入ってしまうとどうやっても分からないから、
inner_product に要素数を渡すようにするしかない。
0055デフォルトの名無しさん
2007/05/09(水) 00:27:460056デフォルトの名無しさん
2007/05/09(水) 00:30:170057デフォルトの名無しさん
2007/05/09(水) 00:30:17ならその2つの要素数を渡す
0058デフォルトの名無しさん
2007/05/09(水) 00:31:21Cに nil はない
0059デフォルトの名無しさん
2007/05/09(水) 00:31:24値と要素数を持った構造体を作って管理しとけ。
0060デフォルトの名無しさん
2007/05/09(水) 00:34:120061デフォルトの名無しさん
2007/05/09(水) 00:34:510062デフォルトの名無しさん
2007/05/09(水) 00:34:53理解力無さ杉
0063デフォルトの名無しさん
2007/05/09(水) 00:40:54rubyに汚染されすぎ
0064デフォルトの名無しさん
2007/05/09(水) 00:44:370065デフォルトの名無しさん
2007/05/09(水) 00:55:38動的に確保したメモリも開放しなさそう
0066デフォルトの名無しさん
2007/05/09(水) 00:59:23と初心者が申しております
0067デフォルトの名無しさん
2007/05/09(水) 01:03:26性能を求めるならば、対価の代償として、より低級言語のしがらみ、
メモリの動き、キャッシュの動き、CPUのプリフェッチぐあいを理解しないと速くはならないね
0068デフォルトの名無しさん
2007/05/09(水) 01:10:57#include <vector>
#include <iostream>
typedef std::vector<double> vec_t;
typedef unsigned int UINT;
double inner_product (const vec_t& a, const vec_t& b) {
typedef vec_t::size_type vec_sz;
vec_sz len(a.size());
std::cout << "length of a:" << (UINT)len << ", size of a[0]:" << (UINT)sizeof(a[0]) << '\n';
if (len != b.size()) {
std::cerr << "can not define inner product of these vectors" << std::endl;
return 0;
}
double ip(0);
for (vec_sz i = 0; i < len; ++i)
ip += a[i]*b[i];
return ip;
}
int main () {
// 1.3,0,1
vec_t v1;
v1.push_back(1.3); v1.push_back(0); v1.push_back(1);
vec_t v2;
v2.push_back(2); v2.push_back(3); v2.push_back(4);
std::cout << "length of a:" << (UINT)v1.size() << ", size of a[0]:" << (UINT)sizeof(v1[0]) << '\n';
std::cout << inner_product(v1,v2);
return 0;
}
0069デフォルトの名無しさん
2007/05/09(水) 01:13:11何言いたいのか意味不明だが、これで納得できないなら、そういうことが出来る他の言語使ってろ
読みづらいがJISのホームページでPDF化された奴も見れるから確認なり好きにしろ
6.5.3.4 sizeof演算子の注釈(84)
配列型又は関数型をもつと宣言された仮引数に適用する場合、sizeof演算子は、
型調整された(ポインタ)型の大きさを与える(6.9.1参照)。
(JIS X 3010:2003より引用)
0070デフォルトの名無しさん
2007/05/09(水) 01:29:15要素数が欲しければtemplate使って配列の参照を引数にするだけでいいだろ。
まぁ俺ならそれ以前にstd::inner_product使うけど。
0071デフォルトの名無しさん
2007/05/09(水) 02:47:13漏れの知識の程度じゃ読みにくくなるだけしたまる
#include <stdio.h>
#include <numeric>
#define ARRAY_SIZE(X) (sizeof(X)/(sizeof(X[0])))
#define INNER_PRODUCT(x,y) ( g( (x),(y), ( f((x),(y)) ) ) )
template <class T> size_t f(const T& a, const T& b) {
size_t len=0;
len = (ARRAY_SIZE(a));
if (len != ARRAY_SIZE(b)) {
puts("can not define inner product of these vectors");
return -1;
}
else
return len;
}
float g(const float a[], const float b[], size_t len) {
if (len == -1)
return 0;
float ip(0);
for (size_t i = 0; i <len; ++i)
ip += a[i]*b[i];
return ip;
}
int main (void){
float v1[3]={1.3f,0,1}; float v2[3]={2,3,4};
printf("out of function: %d,%d\n", sizeof(v1), sizeof(v1[0]));
printf("%f\n", INNER_PRODUCT(v1,v2) ) ;
return 0;
}
0072デフォルトの名無しさん
2007/05/09(水) 02:48:49double 使え、double 。
0073デフォルトの名無しさん
2007/05/09(水) 07:18:26訳の分からん自作マクロ使って可読性落とすぐらいなら
上で書かれてるように、Vector型とstd::inner_product()使えばいいだろ
なんのための標準ライブラリだと思ってるんだ
0074デフォルトの名無しさん
2007/05/09(水) 08:02:10正直、Ruby→C はキツいだろ
0075デフォルトの名無しさん
2007/05/09(水) 08:12:31ってかこれってC?
#include <vector>
#include <numeric>
#include <iostream>
int main() {
using std::vector;
using std::inner_product;
using std::cout;
// float v1[3]={1.3,0,1}; float v2[3]={2,3,4};
vector<double> v1, v2;
v1.push_back(1.3); v1.push_back(0); v1.push_back(1);
v2.push_back(2); v2.push_back(3); v2.push_back(4);
double ip = inner_product(v1.begin(), v1.end(), v2.begin(), 0.0);
cout << "inner product:" << ip;
return 0;
}
0076デフォルトの名無しさん
2007/05/09(水) 08:17:36Classがあるなら使いますよ。
でもね、C言語じゃないといけないんです。linuxのデフォだからね。
Cを勉強するのは計算が早いからとrubyのライブラリが作りたいから。
あとlinuxプログラミングがしたいから。
0077デフォルトの名無しさん
2007/05/09(水) 08:19:29それならC++でもいいでしょうが。
0078デフォルトの名無しさん
2007/05/09(水) 08:47:03C++はもう終わった言語。手続き型にクラスをくっつけただけの言語でしょ。
純粋なrubyこそソフト開発に向いてるが、やはり速度がネック
0079デフォルトの名無しさん
2007/05/09(水) 09:03:560080デフォルトの名無しさん
2007/05/09(水) 10:04:47こんな奴rubyもたいしてできんだろ
0081デフォルトの名無しさん
2007/05/09(水) 11:35:390082デフォルトの名無しさん
2007/05/09(水) 13:37:48あとC言語って自由に配列数を増やしたり減らしたり出来ない?
出来たらうれしい
0083デフォルトの名無しさん
2007/05/09(水) 13:45:540084デフォルトの名無しさん
2007/05/09(水) 13:59:39sizeofは、コンパイル時にコンパイラが計算する。
配列要素数の増減はできないので、realloc()したりC++のvectorを使っ
たり。
0085デフォルトの名無しさん
2007/05/09(水) 14:11:39それなら手間が増えるだけで増減可能ですね。
sizeofはライブラリではないんですか?
sizeofはどうやって書かれているかを聞いています。
0086デフォルトの名無しさん
2007/05/09(水) 14:13:08なぜならC++はC言語の拡張とはいえないからです。
オブジェクト指向としてはrubyがもっとも純粋であることは確かですし
Cとの互換性が消えたので、linuxで使えません
0087デフォルトの名無しさん
2007/05/09(水) 14:28:35Cとの互換性が不完全でもLinuxでC++は使えるが?
0088デフォルトの名無しさん
2007/05/09(水) 14:32:47sizeof はコンパイラが解釈する演算子の内のひとつです。関数ではありません。
0089デフォルトの名無しさん
2007/05/09(水) 14:33:51C++では書かれていない。これは互換性が消えたことによるものである。
linuxといえばC言語
C++は窓用言語
rubyはクロスプラットフォームの純粋オブジェクト指向型言語
0090デフォルトの名無しさん
2007/05/09(水) 14:45:570091デフォルトの名無しさん
2007/05/09(水) 14:49:08reallocはただの動的確保で配列関係ないから
配列の要素数増減は不可でFA
0092デフォルトの名無しさん
2007/05/09(水) 14:52:210093デフォルトの名無しさん
2007/05/09(水) 15:44:370094デフォルトの名無しさん
2007/05/09(水) 16:05:070095デフォルトの名無しさん
2007/05/09(水) 16:06:07うちの会社に来ないことを祈る。
0096デフォルトの名無しさん
2007/05/09(水) 18:09:22メモリ確保した所を配列として扱うなら可能だと思うが。
0097デフォルトの名無しさん
2007/05/09(水) 18:52:22アセンブリ言語の洗礼を受けてくるといい。
0098デフォルトの名無しさん
2007/05/09(水) 18:59:53すいません。8080, Z80, 6502, 6800, 68000 ぐらいまでしかやってません。
この頃の x86 系についてはよく分かりません。
0099デフォルトの名無しさん
2007/05/09(水) 19:00:420100デフォルトの名無しさん
2007/05/09(水) 19:26:05linuxの為にCを勉強しています。当然です。ちなみにVine
0101デフォルトの名無しさん
2007/05/09(水) 19:27:04■ このスレッドは過去ログ倉庫に格納されています