1 :
デフォルトの名無しさん :
2010/11/06(土) 22:11:05 BE:454421186-S★(531777)
2 :
デフォルトの名無しさん :2010/11/06(土) 22:12:36
.ノ′ } 〕 ,ノ .゙'┬′ .,ノ ノ } ゙l、 」′ .,/′ .,ノ _,,y .,v─ーv_ 〕 〕 .| .il゙ 《 ._ .,,l(ノ^ノ ,i(厂 _,,,从vy .,i「 .》;ト-v,|l′ _,ノ゙|.ミ,.゙'=,/┴y/ l ,zll^゙″ ゙ミ .ノ .il|′アll! .>‐〕 \ _>< 《 il|′ フーv,_ .,i″ ||}ーvrリ、 ¨'‐.` { \《 ヽ .゙li ._¨''ーv,,_ .》′ ゙゙ミ| ,r′ } \ ,゙r_ lア' .゙⌒>-vzト .ミノ′ 〕 .゙'=ミ:┐ .「 ./ .^〃 :、_ リ .} ゙\ア' .-- ,,ノ| 、 ゙ミ} :ト ゙^ー、,,,¨ - ''¨.─ :!., リ ノ 〔^ー-v、,,,_,: i゙「 } .,l゙ l! .´゙フ'ーv .,y ] '゙ミ | ,/゙ .ミ;.´.‐ .] ミ, | ノ′ ヽ 〔 ミ } } ′ } { .| .ミ .< 〔 〕 .{ \,_ _》、 .{ .} { ¨^^¨′¨'ー-v-r《 〔
糞スレ
俺は今せぐふぉにつまづいている
Segmentation Fault
6 :
デフォルトの名無しさん :2010/11/08(月) 08:32:03
ABEND S0C4
バカな質問すみません char *str; scanf("%s", str); のどこがいけないのかをわかりやすく教えて下さい
>>7 strが初期化されてないから
strは配列とかのアドレスで初期化しないと駄目
>>7 strはあくまでポインタを格納するための変数なので
初期化してない状態ではどこを指しているか未定義
たまたまプログラムから書き換え可能なアドレスを指していれば
『その部分を破壊することによって』そこに文字列を読み取ることができるかもしれないが
大抵はアクセス不可能な場所を指しているのでメモリのアクセス違反を起こして止まる
つまりstrはきちんと確保されたメモリ空間の先頭アドレスを指している必要がある
str = malloc(SIZE); if(!str) exit(1);
ありがとうございます 文字、文字列、配列、ポインタ、アドレスあたりを ちゃんと理解しないままきてしまい、 今更困っています わかりやすいサイトや本をご存知の方は 是非教えて下さい
本屋に行って手当たり次第に買ってこい
「C実践プログラミング」 でCの文法、make、gdbなど、基礎を習得 ↓ 「C言語ポインタ完全制覇」 or 「秘伝C言語問答 ポインタ編」 でポインタに関して完全理解する ↓ 「エキスパートCプログラミング―知られざるCの深層」 でスタック、ヒープ、リンカ、ローダなど周辺知識を習得 ↓ 「C言語によるオブジェクト指向プログラミング入門」 で実践的な大規模プログラムの作り方を学ぶ ↓ 神の誕生
>>13 C言語によるオブジェクト思考プログラミング入門って面白そうなタイトルだな
>>14 サンプルがダウソできるから見てみたけど、ドンデモテクニックだった。
16 :
14 :2010/11/08(月) 22:37:43
>>15 マジか
ちょっこら、ダウンロードしてくるわ
thx
>>2 こんなAA作るのってどんな気持ちなんだろう
露出狂であることは間違いないな
19 :
デフォルトの名無しさん :2010/11/08(月) 23:36:57
20 :
デフォルトの名無しさん :2010/11/08(月) 23:39:14
printf("%d\n",*(p[0]));
>>20 printf("%d\n",**p);
p[0]にはいってるのはa[0]のアドレスが入ったアドレス
23 :
デフォルトの名無しさん :2010/11/08(月) 23:59:20
>>21 ポインタ変数の配列は関数に引渡しできるのか、しらなかったです
>>22 はどういう意味ですか?
24 :
デフォルトの名無しさん :2010/11/09(火) 00:03:11
*(p) == *p == p[0] == &a[0] == a
>>21-22 先生そうなんだけど、なんか解りづらい
p[0]=&a[0];
p[0] == *(p + 0) == *(p)
よって、*(p) == &a[0]
*(&a[0]) == a[0] == *(*(p))
>>11 俺的には本気でポインタ完全制覇がお勧めだな。
騙されたと思って読んでみて欲しい
27 :
デフォルトの名無しさん :2010/11/09(火) 00:42:40
p[0]=&a[0]; p[0] == *(p + 0) == *(p) よって、*(p) == &a[0] *(&a[0]) == a[0] == *(*(p)) つまり配列の分、ポインタを設けるということですか? *(&a)=(&a[0])
28 :
デフォルトの名無しさん :2010/11/09(火) 00:46:27
>つまり配列の分、ポインタを設けるということですか? 日本語でおk
29 :
デフォルトの名無しさん :2010/11/09(火) 00:57:17
[]に対応する*という意味です
変数に何が入っているのかとか一回自分で絵に書いてみろ
>>20 >ポインタの配列を出力したかったんですが変な実行結果でした。
正しくポインタ配列の先頭要素を出力しているじゃないか
正しいのを変って.....
あっ、*pでポインタ配列の全ての要素を出力したいってことか
32 :
デフォルトの名無しさん :2010/11/09(火) 01:03:58
>>27 右辺 == *(&a) == a
左辺 == (&a[0]) == a
*(&a)=(&a[0])
は
a = a
をまどろっこしく書いているだけ。
>>29 []と*の関係を述べよ
先生達から駄目判定貰ったら、
>>26 のアドバイスを実行する
int main() { int a[3]={1,2,3}; int *p; p=a; printf("%d\n",*(p)); rerurn 0; }
35 :
デフォルトの名無しさん :2010/11/09(火) 01:33:06
>>33 たとえば**pを*pにしてイメージできることは
格納場所が出力されるor配列の要素すべての値を出力(intなので不可)
or 一番目のa[0]が出力
ということが考えられます
片方の*では単純に*pを出力(アドレス内の値を出力。)
もう一方の*で配列、つまり(*+1)で[1]という意味になる
時間かけて考えましたよ どうですか
K&R読んでるんだけど入力ストリームの意味が今ひとつ分からない。 改行があるたびに配列みたいなのが何本もある感じ? 日本語でおkか分かりませんがお願いします。
>>35 誤解釈してるような?
変数宣言時の*pと参照する(代入とか)ときの*pは違うんだけど...
42 :
デフォルトの名無しさん :2010/11/09(火) 09:39:49
abs関数を使わないで絶対値を求めるにはどうしたらいいでしょうか? 環境にstdlib.hがなくて関数が使えません。
if(n < 0) n = -n;
絶対値が何かを知ってればできないはずが無いんだが。
#define ABS(x) (((x)<0)?-(x):(x))
46 :
42 :2010/11/09(火) 10:20:42
出来ました!ありがとうございます!
>>47 ループ内で毎回 pIn = in; pOut = out; を実行しているので pIn, pOut がいつも同じ場所を指している
pOut--; としているが、配列の先頭よりもさらに前へ戻ってはいけない
文字列 out を '\0' で終えていない
↓コード全部書いてください
>>48 ありがとうございます
具体的に書き直すと、どんな感じでしょうか?
>>49 最近の分岐予測はかなり高精度と聞くが……これはなかなか
#include <stdio.h> char* rev_str(char* str) { int i; char temp; for(i=0; i<strlen(str)/2; i++){ temp = str[strlen(str)-1-i]; str[strlen(str)-1-i] = str[i]; str[i] = temp; } return str; } int main(void){ char str[256+1] = ""; scanf("%s", str); printf("str_num :%d\n", strlen(str)); printf("input_str :%s\n", str); printf("reverse_str:%s\n", rev_str(str)); return 0; }
ひでえなw
>>53 クソコード垂れてんじゃねーよ。書き直してこい。
C#にはデストラクタとファイナライザがあるそうですが、違いを教えてください そして、使い分け方も教えてください
59 :
58 :2010/11/09(火) 20:46:02
ごめん、誤爆した
分からないなら書き込まないでください。 他のスレにもあたってみますので・・・
どうぞどうぞ
>>61 日本語が読めませんか?
知らないならレスしないでください迷惑ですこのスレの総意です。
人にれすんする前に日本語を勉強汗。
釣れますか
>人にれすんする >人にれすんする >人にれすんする
すぐに釣り認定する馬鹿がこのスレにもいるものだなぁ。
>>65 だってマって最底辺者の職種ITドカタが超多いんだからしょうがないよ
釣れますか
C言語でヘッダファイルを利用するときは、externを付けないとダメなんですか? hoge.h extern void hoge(); ←何が違うの? void hoge(); ←これと hoge.c void hoge(){}
関数の宣言においては、externは省略可能で 有無による差は無いよ。
72 :
デフォルトの名無しさん :2010/11/10(水) 00:14:58
>>72 仮引数をいくら入れ替えても無駄
参照先を入れ替えろ
void swap(int *x, int *y)
{
int z = *x;
*x=*y;
*y=z;
}
仮引数のx, yはそれぞれa, bを指している訳だがその関数では仮引数のxがbを指すようにし仮引数のyがaを指すようにしてるみたいだけど仮引数の指すアドレスを変更したからといって実引数を変更することが出来ないので意味がない。 説明が下手なんで分からんかな。
75 :
デフォルトの名無しさん :2010/11/10(水) 00:39:58
結局実値まで言及しなければいけないのか なんとなくだけどわかりました
76 :
デフォルトの名無しさん :2010/11/10(水) 02:00:04
円周率 π の値を近似式 π ≈ 4Σ(−1)^n[{(1/2)^2n+1} +{(1/3)^2n+1}]/( 2 n + 1 ) を用いて小数第8位まで正しい値(3.14159265)を出力し,(Σはn=0。100まで) その π の値を用いて入力された数値 ε に対して,次の不等式を満た す最小の自然数 N を求めるプログラムを作れ. |{π^2}/6-Σ(k=1.N)1/k^2|<ε できる方がいたらやり方を教えてください。 全くできなくて困っています。 不明な点などありましたら教えてください!
マルチ乙
C言語で * * * * * * * * * * * * * * * * こういうのってできるのか?
できる
#include <stdio.h> int main() { printf("*\n"); printf(" *\n"); printf(" *\n"); printf(" *\n"); printf(" *\n"); printf(" *\n"); printf("*\n"); printf(" *\n"); printf(" *\n"); printf(" *\n"); printf(" *\n"); printf(" *\n"); printf("*\n"); printf(" *\n"); printf(" *\n"); printf(" *\n"); return 0; }
ありがとうございました。無事にできました。
まじかーーー
どうもー
いえいえ
8bitの2進数で、 int x = 00110011; x << 1; if(x=1○○○○○○○){ こういう感じで先頭のビットが1の場合(他のビットは不問)で判別したいんですけれども、 x>=128という表記以外に、何かやりかたはありますでしょうか?
&
くだらん事はやめろアホが
なんで16進表記と8進表記はあるのに2進で書けないの?
2進が書けたのはMSX-Cだったかな? 当時は1バイトでも少なくできるコードが主流だった 16進や8進で可読性は十分だった 必要が無かったんだよ
0bってC99でも入らんかったのか
>>82 for文とかを使ってもっと綺麗に書くんだ!こんな汚いコードじゃ点数は貰えないぞ!
ソースを1行1行ノードに見立ててグラフ表示したいんだけど どういった方法がありますか?
ビット扱うなら 8 進が使いやすいよな。 CHAR_BIT が 8 だと半端になるのが難点だけど。 1 バイト 9 ビットだとピッタリなのにな。
そのこころは?
あずにゃんペロペロ
出せや ピッピッ いっぱい出しゃいいって
fgetsで標準入力から読み込んだ際に返り値でエラーが帰ってきた場合に その後続けて読み込みをするのは不味いでしょうか? なにかストリームを回復させる典型的なコードみたいなものはありますか?
うっほっはっ
ふっほっ
エラーステータス自体は clearerr でクリアできるけど その後続けて読み込んでもどうせまたエラーになるんじゃないか
freopen()
特定コンパイラの質問も此処でよかったのかしら・・・・ icc で実行時のエラーをチェックしてくれるコンパイルオプションってありますか?例えば 配列で宣言外の部分を参照したときに、ソースのどこどこで間違ってるぞゴルァと怒ってくれるようなオプション ifortで ifort -check all -traceback *.f とやるようなことをiccでもやりたいのだけれど・・・
お前らちゃんと答えろよ 質問溜まってんぞ
どれが未解決でどれが解決済かわからん
ほっほっ
Windowsでのネットワークプログラミングを学習するにあたってお勧めなC言語の本ってある?
ネットワークスレのテンプレ見たほうがいい C言語とはあまり関係ないかも
110 :
デフォルトの名無しさん :2010/11/12(金) 02:14:26
txtファイルから文字列を読み込んで strcmp関数で文字列を比較して戻り値を利用した処理を行いたいのですが この時文字列に日本語を使うとまずい事ってありますか? 知識が無いので何となくですが 全角文字だと使用者のPC環境によって影響ありそうな気がして…
画像の2次元フーリエ変換について分からないことがあるんですけど、 手順は、 1. 縦方向にDFTを行い実数部分と虚数部分にわける 2 .周波数処理 3. IDFTで元に戻す 4 .横方向にDFTを行い実数部分と虚数部分にわける 5 .2と同様の周波数処理 6. IDFTで元に戻して出力 これで合っていますか?
>>111 ユニコードのテキストだと \0 が頻繁に出てくるので
strcmp では比較できない
>>112 1
4
2(5)
3
6
が普通だと思うが
”周波数処理”したい内容によっては
>>112 のままでもうまくいくかもしれない
116 :
デフォルトの名無しさん :2010/11/12(金) 10:06:11
codepad では kouzou.h が無いと言われるのは仕方が無い 実際のコンパイル環境で出たエラーメッセージを張った方が判りやすいよ 考えられるのは ・kouzou.h を2回 include している、多重インクルードガードが kouzou.h に施されていなければエラーになるだろう ・C言語なら struct P {〜}; ではなく typedef struct P {〜}; とすべきはず でもこれがエラーの原因となるかは俺も定かでは無い
>>116 × up(&suzuk);
○ up(&suzuki);
× p>-age=78;
○ p->age=78;
あと117の言うようにインクルードガードが必要
>>116 エラーを貼れ。
>>117 知識がないなら黙ってろ。少なくとも、下から2行目は見当違いだ。
121 :
デフォルトの名無しさん :2010/11/12(金) 11:49:02
できました ありがとう もう一ついいですか #include<stdio.h> #include"kouzou.h" main() { struct P suzuki; up(&suzuki); printf("name=%s age=%d",suzuki.name,suzuki.age); } mainのプログラムなんですけどこれは教科書のまま書いたものです (up関数を自作したものを別ファイルに保存しています。) そこで上のプログラムを見てもらってわかるんですがup()のプロトタイプ宣言がありません ちなみに"kouzou.h"には構造の定義だけしか書いてません。 教科書ではこのようにプロトタイプ宣言が書いておらず、それにも関わらず 実行可能です。なぜですか 長文すいません 意味不明でしたら修正しますので
>>121 Cの場合はプロトタイプ宣言は必須ではありません。
しかし、必ず書くことをお勧めします。
また、main()の戻り値型も必ず書くべきでしょう。
尚、コンパイラの警告レベルは上げておきましょう。
いまどき、ひどい教科書だ。
10年以上前の教科書じゃないか?
125 :
デフォルトの名無しさん :2010/11/12(金) 12:12:37
教科書というか参考書です「C言語 改訂版1はじめてのプログラミング」 新しいですね CDも付属してる いい参考書ですよ おすすめ
必須じゃないっていうか 宣言してない場合はint型を戻り値とする関数としてみなされるんじゃなかったっけ? これは単になんの値も返してないから一見正常に動いてるように見えるだけで
そそ、extern int up(...)相当と見做される。
128 :
デフォルトの名無しさん :2010/11/12(金) 13:45:13
ファイル操作について教えてほしいです。 50文字Aとかかれたテキストファイルをバイナリで読み込みら、キャラクターコードを加算するという処理を作ってます。 これだとiCntに入るのは文字数となってしまいます。よろしくお願いします。 pFileIn = fopen(゙Test.txt゙, rb゙); while(iRet = fgetc(pFilIn) != EOF){ iCnt += iRet } fclose(pFilIn);
>>128 × while(iRet = fgetc(pFilIn) != EOF){
○ while((iRet = fgetc(pFilIn)) != EOF){
気持ちの悪い変数名だな。
だな。
pFileInなのかpFilInなのかどっちなのかと。
p_file_in
特徴的な変数使ってれば目につきやすいから他人が特定人物のコードを削除するとき楽じゃん
こいつが書いたコードは全部削除じゃ〜
初心者なんだけど eclipseってソフトはc言語には 向いてないの? まだパッケージとか良く分からんから 書いたソースをパッと実行できる感じの ソフトがあるとありがたいんだけど・・・
最初はlinuxがいいよ
>>138 windows なら bcc + bcpad で良いんじゃないの
linux なら普通に gcc と a.out で良いけど
それで良いよ
だあからさ〜
143 :
デフォルトの名無しさん :2010/11/12(金) 20:19:19
struct P suzuki; この一文はsuzukiという変数に構造体Pを宣言しているんですが このsuzukiという変数名を他の変数の値からとってくることは可能でしょうか つまり char a=suzuki; struct P a; というように。
#define a suzuki struct P a;
ぶばぁ!!!!!!!
>>143 それが可能だとしてどんなメリットが生じると考えるのか知りたい
148 :
デフォルトの名無しさん :2010/11/12(金) 20:51:39
配列[]のなかにintで宣言した変数の値って入りますかね
149 :
デフォルトの名無しさん :2010/11/12(金) 20:56:23
>>147 structを渡す関数などで一括に処理したい
>>138 Turbo C++ 1.01 がオススメ。
using namespace std; int main(int argc, char* argv[]) { ifstream ifs(FILE_NAME); string str; while ( !ifs.eof() ) { ifs >> str; cout << str; } return 0; } こういう単にファイルを読み込んでコンソールに出力するプログラムなんですが、 読み込んだ文字列の頭に「・ソ」っていうゴミがいつもくっつくんです。 原因は何でしょうか?
コードがC++だけど bom付きのファイルじゃないかね
>>148 嫌がらせのつもりじゃないがなんで質問する前にやって見ないのかが理解できない。
もう少し簡単にしてみたぞ #include<stdio.h> int main(void) { int space[]={0,1,2,3,2,1}; int i; for(i=0;i<16;i++) { printf("%*s*\n", space[i%6], ""); } return 0; }
158 :
デフォルトの名無しさん :2010/11/12(金) 22:36:02
複数ファイルをアップしたいんですがなんかいいサイトないですか?
グラフとかgnuplot使えよ
ふっ!
#include <stdio.h>
int main(void) {
int i=0;
while(i < 16)
printf("%*s*\n", i%6-((i%6-3)*(i%6
>>2 &1)<<1), ""), ++i;
return 0;
}
全然
>>78 になってないんだが。
これだからゆとりは困る。
164 :
デフォルトの名無しさん :2010/11/12(金) 23:21:10
>>158 なんですが
ファイル3つを三回にわけてここに書き込んだら迷惑ですかね
2chてロートルだよなあ
166 :
デフォルトの名無しさん :2010/11/12(金) 23:36:40
struct a { int *b; }; という構造体があって、bのメモリ領域をmain関数内で動的に確保するにはどうすればいいですか?
>>168 struct a x;
x.b = (int *)malloc( );
じゃだめ?
>>169 もしもbに確保した領域が構造体aのサイズより大きいサイズになっても問題とか起きないんですかね・・・
C言語でセレクトボックスを出すことはできますか? ありましたらヒントをお願いします。
>>170 bはポインタ
つまり、構造体の外のどこかに確保したメモリ領域を「指している」だけ。
struct aのサイズは関係ないよ
コンソールということならncursesで頑張ればできなくもない
>>152 ありがとうございます
新規作成からちゃんとテキストファイル作ったら大丈夫でした
これだからゆとりは
それは言い過ぎ
179 :
デフォルトの名無しさん :2010/11/13(土) 13:50:32
#include<stdio.h> main() { FILE *fp; char *p; char s[500]; char n[100]; puts("ファイル名を入力してください"); gets(n); fp=fopen(n,"r"); while(p!=NULL) { p=fgets(s,500,fp); printf("%s",s); } fclose(fp); } 画面からgetsでファイル名を入力しそれを表示させるプログラムなんですが だぶって表示されてしまいます。(同じ内容が2回表示される) このプログラムでのfgetの動きについて教えてください
>>179 printf の前に
if(p==NULL) break;
をいれればおk
181 :
デフォルトの名無しさん :2010/11/13(土) 14:07:33
fgetの仕組みも教えてください while(p!=NULL) { p=fgets(s,500,fp); printf("%s",s); なんでprintfが2回実行されるかわかりませ }
>>181 2回じゃなくて、読み込むファイルの行数+1だろ。
>>181 仕組みとか関係ねーよ
pの判定がprintfの後だからだ
つか初回ループに入るかどうかすら未定義だな
C言語を独学で始めて1,2ヶ月・・・ ある程度できるようになったけど、完全にできるようになったわけではない… 他のC派生行こうとと思うのですが(C#を勉強しようと思ってます)、C言語を完全に理解できているわけではありません コンパイラの仕組みとかソースファイル分割とかがよくわかっていません このまま他の言語行っても大丈夫でしょうか?つまずきそうですごく怖いんです・・・
これでいいじゃん while(fgets(s,500,fp)!=NULL){ printf("%s", s); }
最初にwhile文に突入するときはpには何も代入していないからpは不定
(はじめからNULLだった場合,while文以下は実行されない)
で,pはfgetsの結果を記録してNULLかどうかを判定させるわけだから
fgetsをやってからp!=NULLか判定をしなければならないのに
>>179 では順序が逆になっている
fgetsは成功したら第1引数のポインタを,失敗したらNULLを返すんだから
while( fgets(s, 500, fp) != NULL )
でも問題ない
つまづいた時に調べればいいじゃん
うーん、よく分からんが何故最初に使わないC言語を選んだんだと小一時間。 別に他の言語でも勉強しっかりやればC経由じゃなくても良いと思うが。
>>184 C、C#だけじゃなくて、C++、Java、Ruby、Python、Ocaml、Scalaあたりも平行してやったほうがいいよ。
>>189 どの言語も使えない駄目プログラマの完成ですね。
>>190 まあ
>>189 は半分ジョークだけど、言語ひとつしか使えないって
プログラマはレベル低い場合が多いよね。
ひとつしか知らないからそれを深く知ってるかっていうとそんなことはない。
そもそも他の言語を学習しようとする学習意欲もないんだろう
吠えてる奴はクリンゴン語くらいは余裕でマスターしてるんだろうなw 他人の目的と手段なんて分からんだろうに
言語を覚えること自体が目的じゃないなら、 用途に足るのを1つ覚えれば充分なんだよな。 ただし、それとは別にアセンブラは必須だけどな。
196 :
デフォルトの名無しさん :2010/11/13(土) 15:27:36
漠然としてC言語学習してんだけど そもそも何ができるの
できないことを見つける方が難しい
>>196 おまえらが生きてるこの世界がそれだよ。
200 :
184 :2010/11/13(土) 15:36:02
>>195 アセンブラが必須な理由を教えてもらえないでしょうか?
>>196 C言語だけじゃほとんど何もできないと思う
Win32APIとかDirectX使えないと駄目だってばっちゃがいってた
コンピューターおばあちゃん
202 :
デフォルトの名無しさん :2010/11/13(土) 15:44:18
fgets()の一行読み込みってどういうこと? 文の終わりって意味?
そもそもfgetsがどういう関数か知らないとか?
>>200 ものすごく大雑把に言うとC言語はアセンブラのラッパ的立ち位置だから。
アセンブラ知っとくと初心者がまずつまづくポインタとかでつまづかない。
アセンブラ必須って言うかCPUやらなんやらの基礎知識をしっかり知っとくといい。
逆に言うとそれらの仕組み知らないやつの書いたCプログラムは信用できない。
今の時代新規だとJavaとかのLL言語のが案件多いから低レベル制御とか書かないやつらは
無理してC言語しなくてもいいんじゃないかと思う。
>>195 それはそれで正論だけど、VBしか知らないとかCしかできないみたいな
連中は実際レベル低いしね。
初心者の「複数の言語をやって中途半端になりませんか」って質問には
そんなもん気にすんなとかしかいいようがない。
Javaを勉強してきた身だけど、システムフック等を弄りたくてC系統を始めようと思ってる。 CとC++どちらが良いだろうか
どちらでもいい
そりゃ上位互換のC++一択。
C++ を“変態 C”として使う奴だけは許せない。
ベターC便利じゃん
213 :
デフォルトの名無しさん :2010/11/13(土) 19:15:54
>>208 Cだね
CとC++は似ているようで言語との付き合い方が違ってくる
せっかくJavaをやってきたのなら、わざわざJavaがアンチテーゼを示したような類似言語で
Java訛りなコード書いてもC++使いとしては三流の域を出られない
いっそまるで思想の違うCのほうが憶え甲斐があると思う
haskellだっけ? あれは文法がCとかBASICみたいな普通の文法とはずいぶん違うので、新鮮でおもしろいかもね。 あとparlだっけ?perlだっけ?あれも新鮮でおもしろいかも。cしか知らない当方には暗号みたいに見えるw
Brainfuck オススメ
ブレインフックw
ん?俺なんか言ったか?
グローバル構造体配列とグローバル構造体配列のカウンタ(giとかだったかなwww) が設置してある(配列・カウンタとも5個くらいあった) 色々な関数でインクリメントやらデクリメントやらしてるプログラムに出会ったんだ 5万行くらいあったんだが、書いた奴出て来いよwww メンテする身になってくれ…マジで綱渡りしてるみたいに仕様変更したぞ
質問です 日本語扱えるようにするには文字列を char型をwchar_t型に変更すればおkですか?
ダメです
変更しなくてもそのままで扱える。
>>229 扱ってるエンコーディングが一文字8ビットのやつなら。
プ板でやれ
236 :
デフォルトの名無しさん :2010/11/13(土) 22:42:27
C++って何ですかwikiみてもわからないのでわかりやすく教えてください
好きなようにすればいい。 でも学習段階なら、かなや漢字の扱いはひとまず後回しにしておいて、 ASCII のみで一通りやってからにしたほうがいいよ。
>>235 文字列はwchar_tであつかって、文字列の操作もwcscpy()とかワイド文字系を
つかえばとりあえず動くよ。
まじめにやろうとすると、サロゲートペアとか結合文字とかあるんで、
けっこうめんどう。
ふざけんな
普通にcharでやればいいじゃん 漢字は1文字2バイトだからchar2個で1文字分のデータを確保すればいいだけやん
勝手に他人の環境の文字コードを決め付けるなよ。
本来はcharを文字型として使うのはまずいんだけどしょうがなく使ってる これは釣りだけどcharが1byte固定って言うのは幻想で厳密にはlimits.hのCHAR_BIT見なきゃいけないし
で?
で?
>>245 「charは1byte固定っていうは幻想」
↓
「いや1バイトだろ」
>本来はcharを文字型として使うのはまずいんだけど え?
char は 1 byte で固定。これは仕様。 1 byte の幅は 8 bits とは限らない。
変態archに関わる人って、あんまりいないでしょ
日本語の文字が2バイト以外の文字コードなんかあるの?
EUCとかUTF-8とか
あるよ?
アセンブラの試験問題用に設定されたCASL2の仕様が1バイト16ビットじゃなかったか?
>>255 バイトってのは若干の曖昧さがある用語で
今日では大部分のケースで1バイト=8ビットを仮定してもいいが、
そうでない環境もある
厳密さが必要な場合は、バイトを使わずにビットのみで表現するか
あるいは(特にネットワーク分野では)オクテットを使ったり
ニブル
>>256 じゃあCASL2の1バイトは何ビット?
Shift JISが使えるフリーのC言語のコンパイラってどれがいいの?
どれでも使えるよ。
struct LIST_UNIT { struct LIST_UNIT* next; }; LIST_UNIT を L で表し、たとえば LIST_UNIT が3個つながった状態 L -> L -> L 各Lを判別しやすいように添字をつけて説明すると、たとえば L0 -> L1 -> L2 と図示した方がわかりやすいかも。 struct LIST_UNIT L0; struct LIST_UNIT L1; struct LIST_UNIT L2; この段階だと、L0,L1,L2 は、まだ繋がっていない。 L0の次にL1をつなげるには、 L0.next = &L1; として、L0のnextが、L1のアドレスを指すようにセットしなければならない。 同様にして L1.next = &L2; とすれば、L1の次にL2を繋げたことになる。 L2.next には NULL が入る。next が NULL だと、最後という意味になる。
263 :
262 :2010/11/14(日) 04:38:38
<<貼り付け>> L0 -> L1 -> L2 を A とする。 L10 -> L11 -> L12 を B とする。 B の L10 と L11 の間の位置に、L0 を挿入すると、それは L0 単体ではなく、Aを挿入することになる。つまり L10 -> L0 -> L11 -> L12 ではなく L10 -> L0 -> L1 -> L2 -> L11 -> L12 となる。 <<シーク>> L0 -> L1 -> L2 -> L3 -> L4 -> L5 -> L6 -> L7 -> L8 -> L9 だとして、 LIST_UNIT から x個先 の LIST_UNIT のポインタを得る。 たとえば struct LIST_UNIT* p; p = シーク(&L5, 3); なら、p には L5 から 3個先の L8 のアドレスが入る。
264 :
262 :2010/11/14(日) 04:45:31
<<コピー>> L0 -> L1 -> L2 -> L3 -> L4 -> L5 -> L6 -> L7 -> L8 -> L9 だとして、 LIST_UNIT から x個先までを、新たなリストにコピーする。 たとえば、 struct LIST_UNIT* p; p = コピー(&L5, 3); なら、L5 から 3個分の L7 までが、あらたに L10 -> L11 -> L12 の、長さ3のリストとして領域確保・設定され、p には L10 のアドレスが入る。 <<消去>> L0 -> L1 -> L2 -> L3 -> L4 -> L5 -> L6 -> L7 -> L8 -> L9 だとして、 LIST_UNIT から x個先までを、リストから消去し、リストをつなぎ直す。 struct LIST_UNIT* p; p = 消去(&L5, 3); なら、L5 から 3個分の L7 までが、リストから消去され L0 -> L1 -> L2 -> L3 -> L4 -> L8 -> L9 L4.next が L8 になる。
265 :
262 :2010/11/14(日) 04:59:03
struct LIST_UNIT { struct LIST_UNIT* next; void* date; }; void* data に、実データへのアドレスを記録できるようにすれば、 struct LIST_UNIT A, B, C; A.next = &B; B.next = &C; C.next = NULL; char c0 = "AAA"; char c1 = "BBB"; char c2 = "CCC"; A.data = (void*)(&c0); B.data = (void*)(&c1); C.data = (void*)(&c2); として、char 型をデータとして記録できる。 また、char 以外の型もデータとして記録できる。たとえば、char 型を記録した A -> B -> C のリストを ABC として、同様に DEF, GHI のリストもあるとしたら、 struct LIST_UNIT X, Y, Z; X.next = &Y; Y.next = &Z; Z.next = NULL; X.data = (void*)(&A); // A -> B -> C Y.data = (void*)(&D); // D -> E -> F Z.data = (void*)(&G); // G -> H -> I という具合に、リストのリストも、わりと単純に書けそうな気がする。
>>260 オススメはいつでも Turbo-C 2.01 だよ。
267 :
262 :2010/11/14(日) 05:07:51
だれか実際に動作するコードに翻訳してくれるとうれしいです。
宿題なら宿題スレへどうぞ
なんでさ、C言語って速いわけ 他の言語も昔からあるけど、それらの言語よりも速いの
Fortranのが速いよ
アセンブラは爆速
Fortranの方が速いって言うけどCの最適化性能も上がってるし実際あんまり変わらん
昔、先生が言ってたんだけど アセンブラで書いたコードが速度でC言語に負けたらしい Cコンパイラ>先生の脳みそ
>>273 12,3年前にアセンブラの高速化の本を読んだら、ペアリングがどうとか
分岐予測がどうとか、すでについていけない世界だった。
配列→ポインタは出来ますが、 ポインタ→配列はできるのですか?
>>276 できるってどういう意味だろう。
[]でアクセスならできるけど。
>>273 レジスタ割り付けとかごく低レベルな部分については
最適化コンパイラが人間を超えることも多い
人間が強い部分は、コードから読み取れない
暗黙の条件などを使って最適化できるケース
例えば、Cのエイリアス周りは最適化困難だと知られている
彼は配列とポインタの関係で混乱していると見た
281 :
276 :2010/11/14(日) 17:41:51
>>277 ,280
配列からポインタへは変換できるけど、ポインタから配列には変換出来ますか
>>281 もっと具体的に書かないと、正確な解答は得られないよ
>>281 int n[10] ;
int* p ;
p = n ;
はできるけど
n = p ;
はできないという意味ではできない
nは既にメモリ上に確保されてしまってるのでそのアドレスはずらせないよ
p=nはそのアドレスを指すポインタを取得してるだけ
「変換」という言葉を使ってる時点でポインタを理解してなさそう
286 :
276 :2010/11/14(日) 17:56:31
>>284 こういう答えが聞きたかった
thx
>>282 何故できるのですか?
ポインタと配列の違いは、こんな感じでおkですか?
・スコープ
・長さ(要素数)を求められるか
・定数かそうじゃないか
とんちんかんすぎ ポインターは参照するメモリー上のアドレス。 配列はメモリー上の実態。
>>284 こういう試せばわかるんじゃね?って疑問って多いよね。
座学でやってたりするんだろうか。
>>286 配列とポインタはセットで語られることが多いけど全く別物です
相互変換できるものではないし、並列で比べることは無意味です
実際やってみてエラーが出たから「なんで?」って思ったんじゃないの?w ポインタで躓く奴の典型だな
ポインタ ポインター エラ エラー
>>290 そういう情報を小出しにする質問もイラっとするな。
最初から、こんなことをしたけどできません、みたいに質問すればいいのに。
1:アーサー王 2:アーサ王 3:アサ王 どれ?
294 :
276 :2010/11/14(日) 18:16:37
string *s = new string[10]; delete[] s; なんで、*sなのに配列のサイズがわかるのかな?って思ったの
>>294 メモリブロックにサイズの情報もってるんだろうな。
malloc()、free()も、開放するときはサイズ指定しないから、
そういう疑問ってもったことなかった。
C++かよ
297 :
276 :2010/11/14(日) 18:27:17
>>295 やっぱり、そう考えるしか無いよね
>>296 C++だけどポインタだから、C言語スレに質問をしてたの
個数じゃなくて、NULLを終端に使ってるんじゃあ?
共用体で、基本的なブロックサイズ単位が決められてて、各ブロックはヘッダーにも領域にも使えるってことでは? mallocで得たメモリの先頭アドレスから、基本ブロックサイズ分だけ戻ったアドレスに、確保された領域サイズの情報が入ってる実装が おそらくいちばん素直な実装だと思う。だからfree89はサイズを必要としないのだと思う。
300 :
299 :2010/11/14(日) 18:56:51
#include <stdlib.h> void main() { unsigned char* p = (unsigned char*)malloc(123); free(p); } たとえば、これは実行時にメモリエラーにならないけど。 #include <stdlib.h> void main() { unsigned char* p = (unsigned char*)malloc(123); // p が指すメモリの、一つ手前の位置の値を、異常な数値に書き換える。 *(p-1) = 0xFF; free(p); } これだと、free(p); が実行時エラーになったです(gcc, eglibc) 逆に言うと、このmallocの内部的な基本ブロックとして使われてる共用体のフォーマットがわかれば、(struct malloc_unit*)(p-1)->len = 3;などと書き換えて、 free()で開放するメモリの量を勝手に多くしたり少なくしたりもできるかもしれないなぁ…と思いました。(なにもメリットありませんがw)
[-4]あたりに確保したサイズが入ってたような 環境によって違うだろうけど
>>300 他のメモリブロックと兼ね合いがあるから、勝手にサイズ変更したらうまくいかないだろ。
*(p-1) = 0xFF; んなことしたら freeとか関係無しに落ちるだろw
304 :
デフォルトの名無しさん :2010/11/14(日) 19:16:05
>*(p-1) = 0xFF; www
>>301 bcc で確認したら p - 4 から入ってたよ、アライメントを考慮して4バイト単位で変化する
char* p = malloc( 1 );
p[3] = 0x00;
こんな事しても平気かな(何もメリット有りませんが2)
>>305 メリットない以前に、動かなくなるんじゃないか?
>>305 まったくの仮定の話ですが、
mallocが内部的に使ってる基本ブロックが、たとえば
union malloc_unit {
struct {
unsigned long block_size;
void* next;
};
unsigned char a[32];
};
だとすれば、共用体 malloc_unit ひとつあたりのサイズは 32バイトなので、
malloc関数に指定した確保サイズが1バイトだとしても、実際には32バイト確保されてしまうのだろうから、
すくなくともp[1] から p[31]までは、なにを書いても平気(mallocの動作には支障ない)ような気がします。
もしも malloc が内部的に使ってる基本ブロックサイズが、たとえば
union malloc_unit {
struct {
unsigned char block_size;
unsigned char next_address;
};
unsigned char a[1];
};
だとしたら、malloc_unit ひとつあたりのサイズは2バイトなので、p[3] は、次のブロックの next_address あたりを指すことになるでしょうし(まったくの仮定の話です)、mallocの動作に問題が生じるはずだと思います。
基本ブロックのサイズ次第だと思います。(そもそも、基本ブロックなんてものが本当に使われてるかどうかもわかりません。まったくの仮定の話です。もしかしたら別テーブルがあるのかもしれませんし…)
>>306 malloc() をキャストしてない点に突っ込んだのなら細かい奴だな
一応確認したけど動くよ、p + 3 は p に割り当てられてるから何の問題も無い
確認して気が付いたんだけど bcc の場合は malloc の最低単位は 12Byte みたいだ
つまり p[11] までは使えるって事だね(そんな実装したら殺されるけど)
310 :
デフォルトの名無しさん :2010/11/14(日) 20:27:58
問題ないわけ無いだろアホ
311 :
デフォルトの名無しさん :2010/11/14(日) 20:30:24
何の問題も無いとかほざくアホは死ね
>>307 bcc ではそんな感じでは無いな、メモリ管理テーブルが別に有るみたいだ
p0=16byte, p1=1byte, p2=1byte と確保して得られたアドレスの差分とアドレス直近8Byteを確認してみたら
アドレスの差分は p1-p0=0x14, p2-p1=0x10
p0 0x0000000010000000
p1 0x000000000c000000
p2 0x000000000c000000
だったよ
p0のサイズが0x10でp1のサイズの0x04を足した0x14がp1-p0だからサイズと領域以外は存在しない
×p0のサイズが0x10でp1のサイズの0x04を足した0x14がp1-p0だからサイズと領域以外は存在しない ○p0のサイズが0x10でp1のサイズ領域の0x04を足した0x14がp1-p0だからサイズ領域と確保領域以外は存在しない
>>310 >>311 倫理的とかの問題は有るけど、物理的な問題は無いって話だぉ
物理的に問題が有るならどういうケースか教えてほしいな
死ね
殺伐としてんな〜
>>312 union malloc_unit {
unsigned char size[0x04]; // unsigned long // 4byte
unsigned char[0x0C]; // 12byte
};
だとしたら、
■ = malloc_unit = 12byte
p0 p1 p2
↓ ↓ ↓
■■■■■■
↑ ↑
| p2_size
|
p1_size
(p0は最低でも16バイト以上必要、p1は最低でも1バイト以上必要、p2は最低でも1バイト以上必要)
p1 - p0 = 12 * (2 + 1) = 36byte
p2 - p1 = 12 * (1 + 1) = 24byte
こうなるかと思ってましたが、
実際にはもっとメモリ使用量を節約できるように、size は4byte、block は12byte と、単位が異なるようですね。
これだと、メモリ領域を未使用領域として再設定する場合など、フラグ関係をどこでどのようにやっているのか想像つきません。
管理用にわざわざ別テーブルを用意するなら、管理情報もふくめて、共用体としてサイズ等のヘッダに項目を作ってしまった方が単純で良いような気が。はて?
使用中と未使用の2種類しかないんですから、サイズが負の場合は未使用とか、いくらでもやりようがあります そのサイズぶんだけ進んだところが次のブロックなのだからサイズさえわかれば先頭から順に全ブロック辿れますし 性能さえ気にしなければ、他に何の情報も要らないと思いますが
319 :
デフォルトの名無しさん :2010/11/14(日) 22:14:17
C言語自体と特に関係のない特定のコンパイラの実装の話は他所でやってくれ。 mallocで確保した領域以外へのアクセスを行ってたまたまプログラムが動きづつけるかどうかなんて特定のコンパイラの実装の話。 言語的には完全にNG。
Cのコード見てるとムラムラしてくるな 変数名の後ろに菊があるとかこの言語考えた人エロすぎ
>>317 確かに管理テーブルで管理するならサイズもそこに書けば良いじゃんって思うしなぁ
2項*演算子の無名関数が ( _ * _ ) になっちゃう言語の方がエロいと思うのだが
>>319 C言語=コンパイラなんだからここで話す
未定義コードを書く奴は死ね
>>324 残念ながら定義されているんだよなぁ、これが。w
はぁ?規格のどこに書いてあんのか言ってみろよ
327 :
デフォルトの名無しさん :2010/11/14(日) 23:30:20
↑規格も読めない周回遅れの知恵遅れクン。w
328 :
デフォルトの名無しさん :2010/11/14(日) 23:38:53
mallocは割り当てた領域の開始アドレス(最小のバイトアドレス)を返す。 開始アドレスより小さいアドレスへのアクセスなんて全く定義されていない。
329 :
デフォルトの名無しさん :2010/11/14(日) 23:43:11
釣られたー!w
規格に頼ってるようじゃアマだな。 組み込みシステムでは「規格に書いてないから・・・」とか通用しない。アドレスじかうち。
331 :
デフォルトの名無しさん :2010/11/14(日) 23:48:08
アドレス直打ちは規格の範囲内。
>>331 *0xFFFFFFFFFFFFFFFFFFFF = 0;
334 :
デフォルトの名無しさん :2010/11/14(日) 23:49:48
規格は根拠にならないと何度言えば(ry
337 :
デフォルトの名無しさん :2010/11/14(日) 23:54:10
規格が根拠にならない話は、C言語の話ではないので、他のスレでお願いします。
えwwwwww
んでC言語のコンパイラはどれを使えばいいの?
>>340 Turbo-C 2.01 がオススメだっつってんだろがよ。
ごめん誤爆
346 :
デフォルトの名無しさん :2010/11/15(月) 01:30:58
諸先輩方に質問がございます。 「決定版 はじめてのC++ 初版」を読みながらXP sp3 / VC++2008 EE sp1 で Windowsプログラムを作成しております。 わたくしはプログラミング歴2日ほどの初心者です。 動的変数の配列への適用(p.405)についての質問です。 TCHAR型の動的配列の書き方についてです。 Windowsの変数型であるTCHAR型変数への記載が当然ながら書いてありません。 またchar型変数のことも記載がないのでとまどっております。 TCHAR *str1 ; str1 = new TCHAR[ 256 ] ; … delete [] str1 ; という記述は正しく機能するでしょうか? なぜネットで散見いたします char *str1 = new char[ 256 ] ; のような書き方をしないかについて申しあげます。 LPCTSTR lpcszMes1 = TEXT( "hogehoge" ) ; LPCTSTR lpcszMes2 = TEXT( "mesomeso" ) ; LPTSTR lpszUnited ; があるときに void MessageUnited( TCHAR *unit , LPCTSTR mes1 , LPCTSTR mes2 ) { // ここでmes1とmes2のそれぞれの文字数を合計した数値sumを計測して // unit = new TCHAR[sum+1] ; } といった関数で合体処理して、新しい文字列変数unitのポインタをlpszUnitedで参照して、活用した後、deleteしたいのです。 私の頭は大丈夫でしょうか。
たらいまわしワロタ 次はWin32スレに誘導されそうな予感w
350 :
デフォルトの名無しさん :2010/11/15(月) 01:39:33
>>348 テンプレを満足に読まなかったわたくしに責任があります。
まことにすみません。
そしてありがとうございます。
C++相談室へ行ってきます。
彼は見応えがある。 将来立派なIT土方になれるだろう
>>347 コンパクトで使い易く性能も良い。
各メモリモデルにも対応していて実用的。
メモリモデルなんて単語ありません。
そんな個人サイト上げられても
いまさらそんなもので悩みたくないだろ。
恥ずかしい台詞、禁止!
359 :
デフォルトの名無しさん :2010/11/15(月) 06:08:27
#include<stdio.h> main() { char *p="hello"; puts(p); } このプログラムのputsなんですが予想に反して正常にコンパイルされました puts()って格納先のポインタも出力できるんですか
>>359 逆に、puts("hello")としたときには"hello"を指すポインタがputs()に引き渡されているだけ。
puts()はどちらの場合もポイント先の文字をナル文字に到達するまで順に出力して、最後に改行文字も出力する。
大体合ってる
合ってるね
これ絶対合ってるよね
○ // ∧_∧ ○ ○、<#`Д´>||<ウリを嫌うやつはネトウヨニダ! ||( ) ○ ○ ヽ___フ/ // レ ○ 「ネット・ウヨクと毎日闘っている」 by民団関係者
なんでもネトウヨ認定してたら韓国人までネトウヨになったでござる
芸術的環境依存と言えば?
言えば?(;゚д゚)ゴクリ…
369 :
デフォルトの名無しさん :2010/11/15(月) 22:21:25
void ai( char **a); main() { char *a="fkuha"; ai(&a); puts(a); } void ai( char **a) { *a="hlh"; }
きめえからこうやれよ char *ai( char *a); main() { char *a="fkuha"; a = ai(a); puts(a); } char *ai( char *a) { return "hlh"; }
今日スクリプト言語触って見たんだが入力する文字数よって領域の確保しないですむことに感動した。 なんでCだと毎回mallocとかで領域確保しないといけないの?
巣に帰れ
>>373 Cでも最初から適当な大きさのバッファを用意しておけば?
スクリプト言語も文字数分の領域を確保してるとか言い出す輩↓
377 :
デフォルトの名無しさん :2010/11/15(月) 22:41:16
早すぎワロタ ちなみに普通の変数に長文を入力するとき、いつも配列をで一つずつ代入してたん だけど配列を使わないで直で長文を代入したらa="njhld"←このように 文字一個一個は変数のどこに格納してるの?
処理系依存
殺伐としたスレにようこそ
こんなんも分からないで教えてもらって早すぎワロタとか言ってんのな。
>>382 そんなのわかってて言ってるに決まってるだろ。
char *p = "hoge"; char a[] = "hoge"; ができるなら、同様に、 int *p = {0,1,2,3}; int a[] = {0,1,2,3}; もできるようにしてほしいよね。
>>384-385 ほーw
じゃあ何でそんな回答が出てきたのかな?w
ま、引っ掛け問題が意地悪だったかもねw
それは言い過ぎ
>>386 型情報が無いんだよね。
単独でリテラルたりえるには。
(int){0,1,2,3}
こんな表記でどうか。
>>387 いや、なんか思い違いしてるのはお前だろ。
ひっかけもなにも
>>377 の日本語、なんとかならんの?
>>386 複合リテラルで出来る
C99未対応なんか知るか
それは言い過ぎ
int *p = {0,1,2,3}; 要素数が無いんだから危ないだろ。 文字列は終端が決まってるからできるんだよ。 読み専用領域にデータ列を配置したいならリソースとか使えば良いんじゃね。
int *p = (int *)"\x00\x00\x00\x00\x01\x00\x00\x00\x020\x00\x00\x00\x03\x00\x00\x00"; int a[] = {0,1,2,3}; これでOK.
400 :
デフォルトの名無しさん :2010/11/15(月) 23:23:00
Cygwin使っている人いますか? その20
http://hibari.2ch.net/test/read.cgi/unix/1268282846/272-273 272 名無しさん@お腹いっぱい。 [sage] 2010/11/15(月) 11:42:30 ID: Be:
マウントオプションとは別に、CRLFをLFに変換するツールはないでしょうか?
美乳セーラー女子高生とSEX顔射フィニッシュ
というコマンドやnkfでも一応可能なのですが
専用のツールはなかったかと思いまして
273 名無しさん@お腹いっぱい。 [sage] 2010/11/15(月) 11:43:21 ID: Be:
>>272 コピペミスった、、、、、
見なかったことにしてください
コマンドは、
cat crlf.txt | tr -d '\r' > lf.txt
です。
なんでこのスレに貼ったんだろうかな 氏ねばいいのに
読解力の無い素人と呼ばれて逆ぎれしたんだろ。
実行ファイルのサイズをなるべく小さくしたいんだけど そういう用途に向いてるC言語のコンパイラって何があるの?
コンパイルって言うか最適化次第 まぁ、いくら最近のコンパイラが頭いいからって 予め小さくなるようなコードで書いとかないと最適化きかないけどな
>>404 Turbo-C 2.01 が最適だよ。
mainstartupをお気軽にいじれる環境と方向付ければgccが一番小さくしやすいかな
ふっふっ
ほっはっ
問題文 素数の総和の計算 2+3+5+…+n+… のとき、総和が初めて9129 以上になる素数n 解答 /* 素数か判定して素数ならその数字を返し、そうでなければ0を返す */ int prime(int n) { int i; for (i = 2; i < n; i++) if (n % i == 0) return 0; return i; } /* 素数の総和の計算 2+3+5+…+n+… のとき、総和が初めて9129 以上になる素数nを求めよ */ int main(void) { int i, sum; sum = 0; for (i = 2; sum <= 9129; i++) sum += prime(i); printf("素数の総和の計算 2+3+5+…+n+… のとき、総和が初めて9129 以上になる素数\nn: %d\n", i - 1); return 0; } という解答らしいのですがここのint prime(int n)とsum += prime(i);の意味がよくわかりません 説明をお願いします
>>410 sum += prime(i);はsum = sum + prime(i);と同じ。
int prime(int n)の何がわからないのだ?
%は剰余(割った余り)。
意味がよくわかりませんね
やめてしまえ
int prime(int n) まずこいつが何をしてるか考えるんだ。 関数単位で物事を見れるようにならないとダメだぞ
って上にコメントあるじゃねーかwww 悪かった。 プログラム辞めた方がいい
>>412 411の回答で意味が分からないとすると
素数の定義が分からないとしか思えないw
int prime(int n)
{
int i;
for (i = 2; i < n; i++)
if (n % i == 0)
return 0;
printf("素数:%d\n",i); ←追加
return i;
}
こうしても分からんか?
if( n == 2 ) return n; for( i=3; i*i<=n; i+=2 ) { if( n%i == 0 ) return 0; } return n;
釣りだろいくらなんでも。
プログラムは、やれば出来る って言うけど 「それは素質のある人が言う言葉」って誰かが言ってたな 412には素質がないんだ諦めろ
関数を知らないだけなのだと思うのだが
素数の一般項出せよおう早くしろよ
422 :
デフォルトの名無しさん :2010/11/16(火) 21:14:24
下記の実行結果が、 #include <stdio.h> int main(void) { unsigned int i,j; for (i=0 ; i<=32 ;i++) { j = (0xFFFFFFFF<<i); printf("%d %08X\n",i,j); } return 0; } こうなります 28 F0000000 29 E0000000 30 C0000000 31 80000000 32 FFFFFFFF これは何故でしょう? コンパイラはMinGWです。 参考になるサイト等教えて頂けないでしょうか?
>>422 32ビット整数を32ビット以上シフトした結果は未定義だからです
参考になるサイト
http://www.vmunix.com/~gabor/c/draft.html#101 > If the value of the right operand is negative
> or is greater than or equal to the number of value and sign
> bits in the object representation of the promoted left
> operand, the behavior is undefined.
>>422 80386以上のCPUではローテート・シフト回数を指定できるが、
32回を超えてシフトした場合の結果は未定義
>>422 IA-32 インテルR アーキテクチャ・
ソフトウェア・デベロッパーズ・
マニュアル
中巻:
命令セット・リファレンス
IA-32 アーキテクチャにおける互換性
8086 は、シフト・カウントをマスクしない。しかし、(Intel 286 プロセッサで始まる) その他の
すべてのIA-32 プロセッサは、シフト・カウントを5 ビットにマスクするので、最大カウント
は31 になる。このマスク設定は、( 仮想8086 モードを含めた) すべての動作モードで行われ、
命令の最大実行時間を減少させる。
つまり32を5ビットでマスクすると0になってしまう
>>425 そんな物は役に立たない
貼るなら規格票を貼れや
§6.5.7 Bitwise shift operators
3 The integer promotions are performed on each of the operands. The type of the result is
that of the promoted left operand. If the value of the right operand is negative or is
greater than or equal to the width of the promoted left operand, the behavior is undefined.
>>423-427 ありがとうございました。#include <stdio.h>
これを実行したところ
int main(void) {
unsigned int i,j;
unsigned long long jj;
for (i=0 ; i<=32 ;i++) {
j = (0xFFFFFFFF<<i);
jj = 0xFFFFFFFF;
jj <<= i;
printf("%d %08X %08X\n",i,j,(unsigned int)jj);
}
return 0;
}
こうなった
28 F0000000 F0000000
29 E0000000 E0000000
30 C0000000 C0000000
31 80000000 80000000
32 FFFFFFFF 00000000
ので、
> 32ビット整数を32ビット以上シフトした結果は未定義だからです
の意味が分かった気がします。
425 名前:あぼ〜ん[あぼ〜ん] 投稿日:あぼ〜ん 427 名前:あぼ〜ん[あぼ〜ん] 投稿日:あぼ〜ん 429 名前:あぼ〜ん[あぼ〜ん] 投稿日:あぼ〜ん
Intel系のマップがどうなってるか分かってるけど 脳内でメモリマップするとZiLOG系でマップしてしまうな 変換するから別に困らんけどね
428=432
>>434 正しいかどうかも分からないサイトのURL貼るなや
436 :
デフォルトの名無しさん :2010/11/16(火) 22:00:28
全角スペースが入ってる点がおかしいです
>>438 悔しいとかの問題ではなくて信用にもとる真似をするなという事
規格至上主義の人間にはよくあること
なんで規格貼る人って英語なの。 JISのを貼ればいいじゃん。
英語読める俺すげぇーをやりたいだけ。 言わせんな恥ずかしい。
>>442 JISに合致してると明言してる処理系使ってないくせに
446 :
デフォルトの名無しさん :2010/11/16(火) 22:58:30
>>433 最初に覚えたのが標準になっちゃうんだよな。
448 :
デフォルトの名無しさん :2010/11/16(火) 23:31:15
マップって何?
辞書型のこと
ヤクザな商売だな。 送料だけで良いだろ
給料をもらったことがない奴は楽でいいな。
454 :
デフォルトの名無しさん :2010/11/16(火) 23:57:02
こんなふうにchar *a="abcdefghijkz"; ポインタ変数に文字列を代入してputs()やprintf()で個々の文字を出力する ことってできないんですか 配列で宣言せずに
無理です
無理ぽ
俺にはできる Intelだからな
puts は無理だが printf ならできる
fwrite()でもできるんじゃないか?
writeでもできる outでもできる
標準関数を使う方向でお願いします。
全部標準関数なんだが
VCだとアンダーバー付になってしまいます。
(゚Д゚ )ハァ?
aの中身は配列でも参照できるでしょ
>>460 は標準。
>>461 は非標準。
どっちにしろ質問の意図から外れる。
printf でできるんだから解答は既に出てる。
>>465 まじでwrite()とかout()とか標準関数と思ってたのか。
大真面目に返答しちゃってる
>>468 ってどうしちゃったの?
C言語ってこんな感じでいいんじゃない? 入門書 適当な本 実用書 Cリファレンスマニュアル コーディングルール本 セキュアプログラミング本 教養書 K&R 娯楽書 エキスパートC
↑いきなり何www
どういうルートでおぼえたらwrite()を標準関数って勘違いしたままで いられるんだろ。 入門書とか読まないで、ネットとかで偏ったおぼえ方でもしたのかね。
釣れたw
熟読して読み直せ。
満4回は熟読して読み直せ。
>>472 「C実践プログラミング」 でCの文法、make、gdbなど、基礎を習得
↓
「C言語ポインタ完全制覇」 or 「秘伝C言語問答 ポインタ編」 でポインタに関して完全理解する
↓
「エキスパートCプログラミング―知られざるCの深層」 でスタック、ヒープ、リンカ、ローダなど周辺知識を習得
↓
「C言語によるオブジェクト指向プログラミング入門」 で実践的な大規模プログラムの作り方を学ぶ
↓
神の誕生
ここまでだ!
これだからゆとりは
神!神!もっと評価されるべき!!!!111
K&Rはクソ本だからな。 なんで普通に説明したら簡単な事をああも煩わしく書けるかね。
>>491 コピペしすぎだろって遠まわしに言ってるんだよ。言わせんなよ。
C言語スレは言語自体も殺伐としてるだけあって住民まで殺伐としてるなと
>>497 人口が多いから、変なのもいっぱいいる。
スレタイに入門編とあるのに、マニアックな回答者が揃ってるから仕方ない
じゃあC言語で複数ファイルからなる大規模プログラムの作り方を学ぶのに適した本を挙げてみろよ
>>502 なんだ、やっぱ下の本の宣伝でコピペしまくってるのか。
エキスパートCとか名著が腐れるから、セットでコピペすんな。
単独でやれ。
出た
>>508 すげーなおい未発見のC言語高度関数実装まで揃っている
>>508 なつかしい感じのサイトだな。
ブログの隆盛でなくなったもんな。
こういうぱっと見で作者のセンスが伝わってくるデザイン。
∧_∧ (´・ω・`) n  ̄ \ ( E) フ アフィ /ヽ ヽ_//
>>511 確かにブログの乱立で役に立たない情報がブログの多すぎだが
>>508 は昔ながらの高度情報を取り揃えているな
言いたいことが分かるぞ同意ですね、分かります。
514 :
デフォルトの名無しさん :2010/11/17(水) 01:38:44
C言語のエキスパートなら、高度情報なんかより、Codeの方が重要だろ。
>>514 いや、高度情報がなきゃCodeを書くにも材料が足りだろ。
情報よりは、基礎(考え方)をしっかりやったほうが... 言葉知ってても、使えなきゃ意味ないし...
コピペプログラマの俺としてはCodeの方がありがたい
エキスパCとか娯楽本じゃねぇか。 プログラミングには役立たない
520 :
410 :2010/11/17(水) 01:55:54
色々お騒がせしてすみません
ご指摘の通りまだ本当に学び始めたばかりで関数も習っていません
sum += prime(i)に関しては
>>411 の方のレスで理解出来ました。
int prime(int n)というのはint prime , nという意味ではないのですよね
すみませんが教えてくださる方はいらっしゃいますか?
後
>>412 は自分でありません
2chじゃなくてもっとまともなところで宣伝したほうがよろしいのでは。
2chだと宣伝するのに必要なのは人件費だけ。
>>520 君はまったく自分で学習をしようとしていない
それが許されるのは小学生の中学年あたりまでだ
人に聞く前に自分で調べる努力をしない奴にタダで教える奴はキチガイだよ?
>>520 関数を習っていないということなら、
まず関数を習うというか自習するのが先決だろう
文法すら分からないんじゃ、本質的な部分の理解にも支障が出る
525 :
410 :2010/11/17(水) 02:22:12
なんだと?俺に説教する気か?いい度胸してるじゃねーか
>>523-524 あの、そんな回答は期待していないのですが……
誰か、この人たちに代わって教えてください
有料だ。
2chで商売しようと企んでいるふてえ野郎のスレか
そんなにふてえの入らないよぉ////
アホ 死ね
>>410 C言語 関数 でググればいいんじゃねーの?
>それが許されるのは小学生の中学年あたりまでだ
523の言うとおりでそれ以上になると自分で解決するか友人に聞くしかないっしょ
>ご指摘の通りまだ本当に学び始めたばかりで関数も習っていません
学生なのであれば先生に聞けば良い
人に聞くことを覚えるのも大切だよ
別にここで聞いてもいいじゃんって話もあるけど、教えてもらう姿勢ってもの学ばないといけないからね
533 :
デフォルトの名無しさん :2010/11/17(水) 17:16:50
パステルカラーをC言語で作りたいんですが教えていただけないでしょうか?
#include <stdio.h> int main() { printf("パステルカラー\n"); }
いくらなんでも設問が難解すぎるぜ ヒントくれ
パステルカラーのRGB値を変数に格納すれば終わりじゃないの
>>533 とりあえずOSとコンパイラの名前を教えてくれ。
int main(){ printf(""); printf(""); return 0; } を void test1(); void test2(); int main(){ test1(); test2(); } void test1(){ printf(""); } void test2(){ printf(""); } のようにすると、プログラムは遅くなりますか? よろしくお願いします。
ずっとここで質問したりしてきたけど分かったためしがない。 入門編何てタイトルにいれんなよクズ。
>>541 殺すぞ、分かりやすく教えてくれよ、手とり足とり教えてくれ。
543 :
デフォルトの名無しさん :2010/11/17(水) 20:40:07
説明不足ですいません、OSはウィンドウズでコンパイラはBCCデベロッパーです。 画像処理でパステル調にしたいんですができないんです
>>539 そらぁ関数コールのコストはかかるから遅くなる
微々たる差だけどループの中で何万回もコールするなら気にしなきゃならない場合も有るだろうな
関数コールを気にするような処理なら、その部分だけインラインアセンブラにするw
>>544 殺すぞてめぇ、気安くしゃべりかけんな。
お前らの話は専門用語並べてるだけなんだよ
キチガイは放置しよう
すまん暴言はいて・・・ でもまじで君らのレスはわかりにくいんだよ。 分からない人の気持ちは分かる人は分からないんだよな。
本当にすいません、教えてくれませんか?
わろた
553 :
Perl忍者 ◆M5ZWRnXOj6 :2010/11/17(水) 21:15:02
>>548 殺人予告で通報しますねwwwwwwwwwwwwwwwwww
ねえ「君逮捕だよwww
クソがクソ言語板でわめいてんじゃねえよがいきちw
Cやってるやつはカスばっかりw
ほんとカスw
クソなPICとかやってろよwハンダゴテかってw
五味みたいな成果物だされてwおわってるじゃんw
Cやってるやつはバカだよw
実用性にかけるごみみたいなも作品ばっかりw
とくに動画プレイヤーつくってるばかなw
死ねw
半田このやろう!
555 :
Perl忍者 ◆M5ZWRnXOj6 :2010/11/17(水) 21:21:35
っではてなのバカインターン生ってまだいますか?w 図星で必死にすげえくいついてきたページャーばかだとおもうけどw まだこのスレにいんの?w カスバカはてなのクソバカインターンwwwwwwwwwwwwwwwwwwwwwwwww
またこいつか。 さすがCスレ、キチガイが続々と湧いてくるな
557 :
Perl忍者 ◆M5ZWRnXOj6 :2010/11/17(水) 21:44:16
キチガイ派お前だろ はてなのバカイーンタンセイ君w 糞なページャー処理してるってほんとですか?w
>>545 >>546 ソースが見やすくなるので関数にしたいと思ってました。
ひとまず関数で作って、そのあと関数コールしない形と比較してみようと想います。
ありがとうございました。
559 :
デフォルトの名無しさん :2010/11/17(水) 22:42:55
さげ
◆QZaw55cn4cは自分の巣に引きこもってて下さい
隔離した意味ねーじゃんか ここ来るならせめてコテハン外せよ
誘導して本人が行かなかったんだし呼んでもねえよ
死ねって言うのと殺すぞって言うのとあんまり違いが無い気がするが… コテハン忍者がキモイのは分かったが
大違いだろ。
んじゃニヤニヤしながら忍者死んだほうが良いって書いてくるわw
570 :
デフォルトの名無しさん :2010/11/18(木) 01:54:42
#include<stdio.h> main() { char *p; char a; char *b; char str[56]; gets(str); p=(&str[2]); puts(p); a=str[2]; b=&a; puts(b); } プログラムを実行したとき二番目のputs()に"(全角文字)("が 余計に表示されてしまいます なんでですか?
572 :
デフォルトの名無しさん :2010/11/18(木) 02:04:42
じゃあ\0が抜けてるときに表示されるものは一体なんですか
面白いレスが思い浮かばない・・・老いたな
strを確保したときにメモリに記憶されていた不定の値とか putsは'\0'にぶつかるまで表示し続けるからね。
>>572 \0 が現れるまでのメモリの内容すべて
576 :
デフォルトの名無しさん :2010/11/18(木) 02:19:16
#include<stdio.h> main() { char *p; char a[2]; char *b; char str[56]; gets(str); p=(&str[2]); puts(p); a={str[2],'\0'}; b=&a; puts(b); } エラーでした 直してくれませぬか
a[0] = str[2]; a[1] = '\0';
578 :
デフォルトの名無しさん :2010/11/18(木) 03:38:31
さげ
下痢便は超苦い
580 :
デフォルトの名無しさん :2010/11/18(木) 10:01:18
ではやはりあげておくべきですね。
581 :
デフォルトの名無しさん :2010/11/18(木) 14:52:04
C言語初心者です。ベクトルなどの数式がわかりません。お願いします。 C言語をやってるのですがさっぱりわかりません。わかる方いればお願いします。 最初にnの値を入力して、各入力を行った後、それぞれの目的を実行する以下のプログラムを必ず配列を用いて作成しなさい。ただし、nの大きさは100を超えないものとする n次元ベクトルの要素を入力して、ベクトルの長さを求めるプログラム (2,3)のベクトルの長さは? 最初に行列の次元nの値を入力し、配列を使って次の計算をするプログラムを作りなさい。ただし、nは100以内で、n次の正方行列とする。 行列AとBを入力すると、その足し算A+Bを計算するプログラム できるかたいればお願いします
ベクトルわかんないのはC言語じゃなくて高校数学やるべき
583 :
デフォルトの名無しさん :2010/11/18(木) 15:31:56
#include <stdio.h> #include <math.h> int main(void) { double a[100], s; int n, i; printf("n: "); scanf("%d", &n); for(i = 0; i < n; i++) { printf("ベクトルの第%d成分を入力せよ: ", i + 1); scanf("%lf", &a[i]); } s = 0.0; for(i = 0; i < n; i++) { s += a[i] * a[i]; } printf("("); for(i = 0; i < n; i++) { printf("%f", a[i]); } printf("の長さは %f です。\n", sqrt(s)); return 0; }
↑優しい
そんなもん出されたって理解できないのわかってるのに、優しいなんて言っちゃうなんて
586 :
デフォルトの名無しさん :2010/11/18(木) 15:57:29
ここは馬鹿が多いからな。
多いですね
ほんと多いよな
#include <stdio.h> #include <stdlib.h> struct MAT { float a[100*100]; int n; }; void init_MAT(struct MAT* m, int n) { float* p = m->a; int i=100; while(i-->0){*p++=0;} m->n = n; } void input_MAT(struct MAT* m) { float* p = m->a; int i = m->n * m->n; while(i-->0) {scanf("%f",p++);} } void print_MAT(struct MAT* m) { float* p = m->a; int i = m->n * m->n; while(i-->0) {printf("%8.8f\t", *p++);} putchar('\n'); } void add_MAT(struct MAT* dst, struct MAT* src1, struct MAT* src2) { float* a = src1->a; float* b = src2->a; float* c = dst->a; int i = dst->n * dst->n; while(i-->0) {*c++ = *a++ + *b++;} } void main() { int n; scanf("%d",&n); struct MAT m0, m1, m2; init_MAT(&m0,n); init_MAT(&m1,n); init_MAT(&m2,n); input_MAT(&m0); print_MAT(&m0); input_MAT(&m1); print_MAT(&m1); add_MAT(&m2, &m0, &m1); print_MAT(&m2); }
増えた!
増えましたね
592 :
Perl忍者 ◆M5ZWRnXOj6 :2010/11/18(木) 18:03:28
こんな基礎教養Cを質問してる時点でカスなんだろw こんなのCできるうちにはいらねってw
糞コテ「Perl忍者」が釣れたぞ!
594 :
Perl忍者 ◆M5ZWRnXOj6 :2010/11/18(木) 21:17:59
CなんてしんじまえよwCとかしんじまえよw(核爆笑)ww(核爆笑)ww(核爆笑)w w(核爆笑)ww(核爆笑)ww(核爆笑)ww(核爆笑)ww(核爆笑)ww(核爆笑)ww(核爆笑)w Cなんてネットやってるやつが遊ぶ必要ないからw(核爆笑)ww(核爆笑)ww(核爆笑)w w(核爆笑)ww(核爆笑)ww(核爆笑)ww(核爆笑)w w(核爆笑)ww(核爆笑)ww(核爆笑)ww(核爆笑)ww(核爆笑)ww(核爆笑)ww(核爆笑)w w(核爆笑)ww(核爆笑)ww(核爆笑)ww(核爆笑)ww(核爆笑)ww(核爆笑)ww(核爆笑)ww(核爆笑)w w(核爆笑)ww(核爆笑)ww(核爆笑)ww(核爆笑)ww(核爆笑)ww(核爆笑)w w(核爆笑)ww(核爆笑)ww(核爆笑)ww(核爆笑)ww(核爆笑)ww(核爆笑)w w(核爆笑)ww(核爆笑)ww(核爆笑)ww(核爆笑)ww(核爆笑)ww(核爆笑)ww(核爆笑)ww(核爆笑)ww(核爆笑)ww(核爆笑)w w(核爆笑)ww(核爆笑)ww(核爆笑)w w(核爆笑)w w(核爆笑)wvw(核爆笑)wvw(核爆笑)wっっvvw(核爆笑)w w(核爆笑)ww(核爆笑)ww(核爆笑)wvw(核爆笑)wvw(核爆笑)w vw(核爆笑)ww(核爆笑)w
これだからruby信者は・・・・
596 :
Perl忍者 ◆M5ZWRnXOj6 :2010/11/18(木) 21:28:38
ここにのってるCソースは全部クソ 基礎教養のウンコード乙
597 :
Perl忍者 ◆M5ZWRnXOj6 :2010/11/18(木) 21:32:01
C言語なら俺に聞けにくるやつはカスしかいない(笑)
荒らしだ、荒らしが来たぞー(^o^)ノ
自分でカスって認めてるのか 達観してるなPerl忍者君
糞コテをNGNameにしてない男の人って
いちいちキチガイを相手にすんな
perlってカスなの?
はい
606 :
Perl忍者 ◆M5ZWRnXOj6 :2010/11/18(木) 23:44:37
>>599 暁に喧嘩うる下忍乙
10名の忍で構成されている謎の小組織
かつて,マツモトヒロユキも所属していた。その後メンバーは倒されていき構成人数は激減した。各国の抜け忍たちで構成され
構成員のほとんどが S 級 犯 罪 者 である
607 :
Perl忍者 ◆M5ZWRnXOj6 :2010/11/18(木) 23:45:52
マツモトヒロユキはスパイ活動してたみたいだからね 前に一緒にツーマンセル組んでいて 行動が不審だったから 暗殺命令がでてたんだよ そして潰そうとしたら逃げられたよ まだどっかに潜伏してるみたいだが
608 :
Perl忍者 ◆M5ZWRnXOj6 :2010/11/18(木) 23:49:53
なんかPerl崩しのために 赤い国を作ってるらしいな よくしらんが 俺のチーム入りたかったら Skype: perlkageにコンタクトおくれ
609 :
Perl忍者 ◆M5ZWRnXOj6 :2010/11/19(金) 00:26:28
一人きたぞhaskellやってるやつ てえめらカスはこれねえか?
610 :
954 :2010/11/19(金) 00:27:12
てす
611 :
Perl忍者 ◆M5ZWRnXOj6 :2010/11/19(金) 00:31:04
これねえの? 2chっていうグループSkypeつくってまってんだけどw
なんか偽者が沸いてるな
613 :
599 :2010/11/19(金) 00:33:59
別に忍者君に喧嘩を売ってる訳じゃないぞ 597で >C言語なら俺に聞けにくるやつはカスしかいない(笑) この発言をした時に自分でカスだと認めたってことなんだと思う。 それ以上でもそれ以下でもない
614 :
Perl忍者 ◆M5ZWRnXOj6 :2010/11/19(金) 00:34:14
お目絵が偽だろwwwwwwwwwwwwwwwwww wwwwwwwwwwwwwwwwwwwww wwwwwwwwwwwwwwwwwwwwwww 早くSkypeこいよ perlkage もう一人きてる 2chの最強グループをつくるために 人材をあつめる
616 :
Perl忍者 ◆M5ZWRnXOj6 :2010/11/19(金) 00:35:38
618 :
Perl忍者 ◆M5ZWRnXOj6 :2010/11/19(金) 00:41:54
とりあえず寝る 休戦
まぁ偽者なんてこんなもんよ。
まだまだ勝負はこれからだぞ!偽物
621 :
デフォルトの名無しさん :2010/11/19(金) 01:55:00
>>621 もしかして \0 と /0 のうち間違い?
バックスラッシュがスラッシュじゃね
× '/0' ○ '\0'
625 :
デフォルトの名無しさん :2010/11/19(金) 02:02:55
そういえばゼニマークだったけ ありがとうございます
zeni mark yen mark back slash
「マーク」は誤用
628 :
デフォルトの名無しさん :2010/11/19(金) 11:44:13
629 :
560 :2010/11/19(金) 12:28:22
e?
631 :
デフォルトの名無しさん :2010/11/19(金) 15:15:00
#include <stdio.h> #include "bmp.h" int main ( void ) { static BMP bitmap1; int i, j; readBMP("input.bmp", &bitmap1); printf("横幅%d,縦幅%d\n", bitmap1.width, bitmap1.height); for (j = 0; j < bitmap1.height; j++) { for (i = 0; i < bitmap1.width; i++) { bitmap1.image[j][i].r = 255; } } writeBMP("output.bmp", &bitmap1); return 0; } 何度もすいません、OSはウィンドウズでコンパイラはBCCデベロッパーです。 これでパステルカラーを作りたいんですがお願いします
ふーん断る
bmp.hはぐぐると一番上に出てくる静岡大のやつでいいのか?
634 :
デフォルトの名無しさん :2010/11/19(金) 15:26:13
ステルス調
校内からじゃないとアクセスできないようだが大丈夫か?
637 :
デフォルトの名無しさん :2010/11/19(金) 15:35:45
静岡大のでも大丈夫だと思います
大丈夫だ、問題ない。
639 :
デフォルトの名無しさん :2010/11/19(金) 15:39:30
定期あげ
パステルカラーって何? RGB→HSL から明度だけ底上げ→RGB なのか 減色なのか
もうすでに答えをもらってんじゃねえか
パステルカラーをしらないんですか 信じられないんですけど
C言語で関数や構造体を作ることをモジュール化って言うんですか?
パステル > ルルベル だよな。
645 :
デフォルトの名無しさん :2010/11/19(金) 16:34:15
>>631 なんで、static BMP bitmap1;
なの?
そして、int i, j;
には、なんでstaticないの?
教えてください
646 :
デフォルトの名無しさん :2010/11/19(金) 16:38:22
>>645 bmp.hを読むことができないので、なんともエスパーするしかありませんが、
もしかして struct BMP bitmap1; のかきまちがいなんじゃないかなぁ〜〜…っておもいました。ちがってたらごめんなさい(^_^/
bitmap1.image[j][i].r = 255; bitmap1.image[j][i].g = 100; bitmap1.image[j][i].b = 100;
スタックに置くにはでかすぎるからだろうな BMPが最大サイズ決め打ちの二次元配列持ってるんだろう多分
BMP* p = new_BMP(bit, width, height) みたいにして使用するメモリ領域を動的に確保できるようにはなってないの?
誰に聞いてんの?
君に
あんだと?やるのお?(´・ω・`)
やるよぉ。
rが255だと問答無用でパステルカラーになるの?
656 :
599 :2010/11/19(金) 17:49:39
>>599 おめえこいよ?
びびってこれねえの?
ってことなのでSkype繋いでみました。
会話ログは「Perlで2ch系まとめサイトを作ろう」にあります。
怖い人ですねぇ
もっとも扱いが簡単な24bit無圧縮ビットマップを BMPファイル → Cの配列 BMPファイル ← Cの配列 と交互に変換できる関数をまず誰かが用意してくれたらいいとおもう。 配列は struct PIXEL { unsigned char r; unsigned char g; unsigned char b; }; struct PIXEL a[bmp_width * bmp_height];
658 :
デフォルトの名無しさん :2010/11/19(金) 18:17:22
定期あげ
>>657 windowsビットマップとOS/2ビットマップは両対応なのか
その解釈はいくらなんでもおかしいんじゃなかろうか
ヘッダー分を読み飛ばしてBGRXの順に一バイトずつ読むだけだろ。
パステルカラーって あくまで色合いの名称 だから相当のものを用意してるんでOKでしょ パステル調 とか セピア調 とか 画像変換の話と違うぜ
低脳じゃなければ、
>>631 のプログラムから
読み込んだinput.bmpをパステルカラー調に変換してoutput.bmpに書き込む
んだって分るだろ。
つまり、パステルカラー調に変換するフィルタを作ってってこと。
断片から全体像を推察できないか?
コーヒーフィルタみたいなもんか
>>657 【◆QZaw55cn4c 隔離】C/C++の問題を片付けます のスレに bmp をパステルカラーに変換するプログラムが上がってるよ
残念なことにパステルカラーに変換する部分は上手く出来てないけど、リードしてライトする機能はちゃんと動く
task_convert() が変換部分だからそこだけ実装すれば良いんじゃないかな
unsigned char dataR[bmp_width * bmp_height];
unsigned char dataG[bmp_width * bmp_height];
unsigned char dataB[bmp_width * bmp_height];
の形だけど大きな問題は無いだろ
あずにゃん
// io_bmp.h 仕様 struct PIXEL { unsigned char r; unsigned char g; unsigned char b; }; struct BMP { int w; int h; struct PIXEL p[30000 * 30000]; }; // file_name のBMPファイル(24ビット無圧縮)を読む。 extern void read_BMP(struct BMP* a, char* file_name); // file_name のBMPファイル(24ビット無圧縮)として書く。 extern void write_BMP(struct BMP* a, char* file_name); こんなのを誰かが書いてくれるといいとおもう。 エラーとか無視でいいから、なるべく短いコードでおねがいしますw
30000は無い
>>668 sizeof(struct BMP) を答えよ
>>672 いまのパソコンってメモリー4ギガくらい普通だし、ダイジョブダヨ!! バンテリンあるよ!! ぜったい有利だよ!!
width と height はヘッダから読むんだから p は可変長になるだろうな
675 :
560 :2010/11/19(金) 20:11:00
無修正がいいです。
また偽者が
いい加減偽物ウザいな
そういうライブラリないのかよ
◆QZaw55cn4cって知識はそこそこ有りそうだけどセンスは無いな
>>681 センス不足と言うより経験不足、学生だと思うよ
すごいおっさんくさいこと言ってるし、コピペしてるうちに勘違いした底辺コーダーかも知れん
#include <stdio.h> #include <stdlib.h> #define T typedef T unsigned long ul; T unsigned short us; T unsigned char uc; T double D; T struct{uc r;uc g;uc b;}P;T struct{long w;long h;P p[4096*4096];}B; T struct{ul f_sz;ul pd0;ul p_ofs;ul bhs;long w;long h;us pd1;us pl;us bit;ul cmp;}H; void r_B(B* a,char* f){ FILE* fp=fopen(f,"rb");H hd;fseek(fp,2,SEEK_SET);fread(&hd,sizeof(H),1,fp); a->w=hd.w;a->h=hd.h;ul p_ofs=hd.p_ofs;int q=4-(a->w%4);q=(q==4)?0:q; P* p;int j=a->h;while(j-->0){ p=a->p+(a->w*3)*j;fseek(fp,p_ofs+((a->w*3)+q)*j,SEEK_SET);fread(p,sizeof(P),a->w*3,fp); } } void w_B(B* a,char* f){ FILE* fp=fopen(f,"wb");fseek(fp,0,SEEK_SET);uc BM[2]="BM"; fwrite(BM,sizeof(uc),2,fp); int q=4-(a->w%4);q=(q==4)?0:q;ul p_ofs=54; H hd={p_ofs+((a->w*3)+q)*a->h,0,p_ofs,40,a->w,a->h,1,24,0};fseek(fp,2,SEEK_SET);fwrite(&hd,sizeof(H),1,fp); P* p;int j=a->h;while(j-->0){ p=a->p+(a->w*3)*j;fseek(fp, p_ofs+((a->w*3)+q)*j,SEEK_SET);fwrite(p,sizeof(P),a->w*3,fp); } } void p_P(P* p){ D o=1.2;D q=0.5;D s=0.2;D r=p->r,g=p->g,b=p->b;r/=255;g/=255;b/=255; D* u=(r>g)?((r>b)?&r:&b):((g>b)?&g:&b);D* d=(r<g)?((r<b)?&r:&b):((g<b)?&g:&b); D _u=*u,_d=*d;r+=(1-_u)*((_u-_d+s)*o);g+=(1-_u)*((_u-_d+s)*o);b+=(1-_u)*((_u-_d+s)*o); _u=*u;_d=*d;r+=(_u-r)*((_u-_d+s)*q);g+=(_u-g)*((_u-_d+s)*q);b+=(_u-b)*((_u-_d+s)*q); p->r=(r>=1)?255:r*255;p->g=(g>=1)?255:g*255;p->b=(b>=1)?255:b*255; } void main(int u,char** v){ B* a=(B*)malloc(sizeof(B));r_B(a,v[1]);P* p=a->p;int i=a->w*3*a->h;while(i-->0){p_P(p++);}w_B(a, "a.bmp"); }
685 :
684 :2010/11/20(土) 08:02:49
パステルカラーってのがよくわからないので、どうせよくわからないのなら、でたらめでもいいだろう(笑)と…w あえて明示的なRGB←→HSV変換を経ないでやってみるアプローチを試してみようと思いました。 ほぼ、でたらめやってます。数式に理論的根拠はあんまり無いですw <つかいかた> 実行ファイル名 画像.bmp 変換結果は a.bmp というファイル名で出力されます。
>>684 何も邪悪なコードにせんでも...
codepad あたりに張ってくれれば見る気になるのに
>>679 ビットマップの一行を構成するピクセルのバイト数が 4 の倍数でないときの処理が必要ではないでしょうか?
あと、コンパイルする環境を教えてください。(bcc32 でいいですか?)
こちらでは実行するとだんまりになってしまいます。
あと 0 division も発生します。 0 division を回避すれば、bcc32 でコンパイルして正常に動作することを確認しました。 >h = 1.0/(double)(max - min) ; テストに使用した画像は、Windows XP のマイドキュメントの下にあるサンプル画像です。
今まで勉強で#include<stdio.h>ばっかだったけど 他にどんなのがあって何が便利で何ができるんでしょうか? あとstdlib.hとstring.hくらいしか使ったことないです /usr/include以下にあるのは知ってるけどこれらのファイルの中身見ても意味がわからないです・・・
ご本を読めばいいと思うの
アホばっかりだなこのスレはwwww Perl最強だぜ!
でもPerlはキチガイばっかなんだよな
C言語のリダイレクトでエクセルに printf("1"); printf("2"); printf("3"); をエクセルの1行目のAセルに1、1行目のBセルに2、1行目のCセルに3、 となるようにリダイレクトしたいんだけどどうやってやるか分かる?
>>694 csv で書き出すなら
printf("1,2,3");
でおk
\tのタブで…と思ったらコンソールからコピーするとスペースになるんだな
698 :
デフォルトの名無しさん :2010/11/20(土) 16:26:00
2^n-1を符号付きで求めたいんだけど、(foo_t)(~0LL ^ (~0LL << n))で大丈夫?規格上どこまで許されるのかよく分からん。
pow(2,n-1); じゃダメなのかな・・・
(2^n) - 1だろ
ひょっひょっ
どびゅっどびゅっ
703 :
デフォルトの名無しさん :2010/11/20(土) 21:55:10
#include<stdio.h> main() { char p[3]; char a; char b; char c; a='a'; b='s'; c='\0'; p=&a; puts(p); } これはなんでエラーなんですか
pは配列だから、それ自身には代入できない。
配列自体に代入はできないから。
pに代入することは俺が許さない
main() { char p[3]; char *pp; p[0]='a'; p[1]='s'; p[2]='\0'; pp=p; puts(pp); } ならわかるが
709 :
デフォルトの名無しさん :2010/11/20(土) 22:18:41
#include<stdio.h> main() { char p[3]; char c[3]; p[0]='a'; p[1]='s'; p[2]='\0'; c=p; puts(c); } これもエラーです
710 :
Perl忍者 ◆M5ZWRnXOj6 :2010/11/20(土) 22:19:18
C言語のどこらへんに魅力を感じるの?
>>709 だから配列名は定数だからエラーだって
変数じゃないか
>>709 #include<stdio.h>
#include<string.h>
main()
{
char p[3];
char c[3];
p[0]='a';
p[1]='s';
p[2]='\0';
strcpy(c, p);;
puts(c);
}
書くならこうしなければならない
>>710 あなたは普段生活していて日本語に魅力を感じますか?
つまりはそういうことです。
714 :
デフォルトの名無しさん :2010/11/20(土) 22:33:00
#include<stdio.h> main() { char p[3]; char c[3]; p[0]='a'; p[1]='s'; p[2]='\0'; p=p+1; puts(p); } なるほど代入できない なんとなくわかったよ
char a[]="abc"; char *b="abc"; a[0] = 0; /* OK */ b[0] = 0; /* NG */ a = (char*)0; /* NG */ b = (char*)0; /* OK */
716 :
デフォルトの名無しさん :2010/11/20(土) 22:38:19
>>713 みたいに上手いこと言おうとして見当外れのこと言っちゃう人って多いよね!ムッハー!!
C言語は、メモリ上でデータがどのように展開されているかとか PC側に偏った考え方を学べる。(アセンブラやっても構わない) Cを分かっているかは他の言語をやる上でも基盤になっていくと思うよ。 脳内にメモリマップしたりするしな
718 :
デフォルトの名無しさん :2010/11/20(土) 23:20:22
#include<stdio.h> main() { char c[6][9]= { "baas", "saaa", "daad" }; char **a; char *b; **a=(c[0][2]); b=**a; puts(b); } またまたエラーです なんでですかね
どひゅっどひゅっ
720 :
デフォルトの名無しさん :2010/11/20(土) 23:32:13
>>718 すいません 解決しました
#include<stdio.h>
main()
{
char c[6][9]=
{
"baas",
"saaa",
"daad"
};
char *a;
*a=(c[0][2]);
puts(a);
}
*aが未定義だから、その参照外しで死ぬ。
何も学ぼうとしないバカが沸いてるな・・・ 718とかスルーだな。712で書かれたことを全く理解してない
それし、スルー出来ないお前がいるわけだ。
724 :
Perl忍者 ◇35I122rnS2 :2010/11/20(土) 23:38:44
C言語とかアホしか使わないからなwww Perl最強だぜ!
perlはperlで出来てるのか?
言うはやすし、行うはたかし。 Cは書きやすし、読みたかし。
727 :
デフォルトの名無しさん :2010/11/21(日) 00:12:14
#include<stdio.h> void t(int t[][9]); main() { char c[6][9]= { "baas", "saaa", "daad" }; t(c); puts(c[0]); } void t(int n[][9]) { *n[0]="hkh";←ここです } すいません 二次元配列の関数側からのアクセス方法を教えてください
728 :
722 :2010/11/21(日) 00:14:13
いやどうせ構ってちゃんなんだろうと思ってな。 初心者がポインタのポインタなんぞ使うもんでもあるまい 警告を発したまでだ、それ以上でもそれ以下でもない。 難解なコード大会があるようにもはやCだかなんだか分からない構文も多々ある ここは初心者の来るべき場所であって適当な構文を理解すべき場所ではない。
>>727 ポインタの概念から読み直してこいよ
正直言って同じような質問にうんざりなんだよ
1+1=2って説明しないと分からないのか?
1+2=が分からないんならプログラム辞めることをオススメする
730 :
デフォルトの名無しさん :2010/11/21(日) 00:24:50
参考書の流れどおりやってるだけだよ 疑問に思ったこととか周りに聞く人がいないからここで質問してるわけ ここならスパッと解答してくれるから重宝してまつ
strcpy(n[0],"hkh");←ここです strncpyのほうがいいかも それと関数tの宣言がおかしい
参考書全部読み終わってからこい
読み終わらないうちに挫折するような
素質が無いなら早めに挫折したほうがいい
735 :
デフォルトの名無しさん :2010/11/21(日) 02:53:32
みなさんどんな職業ですか C言語をはじめるきっかけは?
736 :
デフォルトの名無しさん :2010/11/21(日) 02:55:04
会社員 I/Oの特集を見て
会社員 BASICが処理が遅い → Cが速いらしいと訊いて
739 :
デフォルトの名無しさん :2010/11/21(日) 04:00:04
struct 型 名前 = { {a,b,c},{d,f,g},{h,i,j},}; と言う感じで代入してたのですが ループを出たら全部消えてしまうのですが何故でしょうか?
消える書き方をしたから
doubleの配列をfloatにキャストする関数を作りたいのですが、要素数lengthを求める式がうまく機能しておりません。 mallocした配列の長さはポインタからどう求めればいいのでしょうか? void castDtoF(float *output,double *input){ unsigned int length=sizeof(input)/sizeof(input[0]); for(unsigned int i=0;i<length;i++){ output[i]=(float)input[i]; } }
無理です 長さを別に渡して下さい
他の言語を検討しましょう
746 :
デフォルトの名無しさん :2010/11/21(日) 16:22:59
724 :Perl忍者 ◇35I122rnS2:2010/11/20(土) 23:38:44 C言語とかアホしか使わないからなwww Perl最強だぜ!
すいません質問です。 例えばint a[10][10]などの多次元配列についてです。 この場合、aのポインタの型は(int (*)[10])になり、 *(a+1)==a+1==a[1]が成り立ちますよね? つまり間接参照先が配列の場合、間接参照の対象が、 その配列の先頭のポインタになっているという解釈でよいのでしょか? このあたりが、なかなか理解に苦しむんですが・・・
ポインタへの暗黙変換が許される、であってポインタではない
749 :
デフォルトの名無しさん :2010/11/21(日) 16:34:45
>>748 は完全なる嘘。暗黙変換が許されたオブジェクト体をポインタと定義しているので、mallocはポインタ。
↑ただのバカ
751 :
デフォルトの名無しさん :2010/11/21(日) 16:46:24
早速のお答えありがとうございます。
>>747 で、*(a+1)というのは配列自身
を指している、のであるが、*(a+1)==a+1
などの式の中で用いられた場合には、
間接参照先の値として、*(a+1)がa+1
というポインタに変換される、という理解
でよいのでしょうか?
754 :
デフォルトの名無しさん :2010/11/21(日) 17:35:07
a[1] == &a[1][0] ってだけでしょ? 何が疑問なのかよく判らない。
↑ただのバカ
このスレにずっと粘着してるコピペ馬鹿は何がしたいんだ?
757 :
デフォルトの名無しさん :2010/11/21(日) 17:55:22
758 :
デフォルトの名無しさん :2010/11/21(日) 17:57:23
759 :
デフォルトの名無しさん :2010/11/21(日) 17:58:31
前スレも前前スレもその前も、ずっとこんな感じだろ なんかツライことでもあった?死ねよ
761 :
デフォルトの名無しさん :2010/11/21(日) 17:59:40
釣れたwwww
なんだこいつ
763 :
デフォルトの名無しさん :2010/11/21(日) 18:01:12
定期あげ
あずにゃんペロペロ
このスレにずっと粘着してるコピペ馬鹿は何がしたいんだ?
前スレも前前スレもその前も、ずっとこんな感じだろ なんかツライことでもあった?死ねよ
, ヘ\ / ヽヽ, /ヘ、 / l | /,/ \ / | | | l \ ./ | | . | | \ / /'⌒(⌒\ | | \ / / _/~___`\ \ /⌒)¨゙\ X //:::::::::::::::ノ、`ヽ\ / / ~\ \ /. \ /./::::;;-‐‐''"´ |:::::::|. \ / / .ノ´⌒`ヽヽ / \ / ..|:::| 。 .|:::::::|、 \ / γ⌒´ \ヽ/ \ ( |:/ ⌒ ⌒ ヽ::::| ) ) . / .// ""´ ⌒\ / ヽ. \', .| -・‐ ‐・- |:::| / / | .i / ⌒ ⌒ i./) ノ \ | ー'/ _.'ー `|/ / | i (・ )` ´( ・)/,/ / V \(_人__)ヽ | / こっちも釣れた! | l (__人_)/ | /. 丶ヽ゚しニ ノ / / こいつはもっとスゴいぞ! | \ |┬J゚ ノ/ つ、釣れた! 〉 ヽ_ _/ / ヾ、. `ー' く これは大物のバカに違いない!/ ヽ ヽ / / ヽ /
AAでウケを狙う流れでもない
糞スレ
771 :
デフォルトの名無しさん :2010/11/21(日) 18:08:28
一気に糞化したなw
元から糞だっただろ なんかツライことでもあった?死ねよ
前スレも途中から
>>1000 までずっとコピペだった
一人そういう奴がいて、そいつが気に入らないレスがあったらこうなるってこと
おそらく自分の考えたレスが馬鹿にされたもんだから、他人のレスのコピペしてるんだろうな
まあ自分の考えが書けない奴は死ねばいいと思うよ、いやマジで。邪魔なだけだし
解説する奴って過去にそういうことがあったんだよな
糞スレ
C言語なんかやらずにPerlやれよ。w
釣れた!
784 :
デフォルトの名無しさん :2010/11/21(日) 18:23:57
定期あげ
釣られてんのはお前だカス
どぴゅっどぴゅっ
うひょーーーーーーーーーー!!!!!!!!!
卑猥だカス
で、Perlだと何ができるんだい?
Welcome to Underground
あ
でもコピペの奴消えたwwwだっさ
下手に煽ってる奴も一緒に死ねばいい
ゴガギーン ドッカン m ドッカン =====) )) ☆ ∧_∧ | | / / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ( )| |_____ ∧_∧ < おらっ!コピペ厨出てこいw 「 ⌒ ̄ | | || (´Д` ) \___________ | /  ̄ | |/ 「 \ | | | | || || /\\ | | | | | へ//| | | | | | | ロ|ロ |/,へ \| | | | | ∧ | | | |/ \ / ( ) | | | |〈 | | | | / / / / | / | 〈| | | / / / / | | || | | / / / / =-----=-------- | |
797 :
デフォルトの名無しさん :2010/11/21(日) 18:30:22
あげ
今度はAA厨か どっちもどっちだカス
>>796 ここぞとばかりにAA貼ってるけど、お前も同類だからね。
釣れたw
C言語の話しようぜ
796 :デフォルトの名無しさん:2010/11/21(日) 18:30:01 ゴガギーン ドッカン m ドッカン =====) )) ☆ ∧_∧ | | / / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ( )| |_____ ∧_∧ < おらっ!コピペ厨出てこいw 「 ⌒ ̄ | | || (´Д` ) \___________ | /  ̄ | |/ 「 \ | | | | || || /\\ | | | | | へ//| | | | | | | ロ|ロ |/,へ \| | | | | ∧ | | | |/ \ / ( ) | | | |〈 | | | | / / / / | / | 〈| | | / / / / | | || | | / / / / =-----=-------- | | 800 :デフォルトの名無しさん:2010/11/21(日) 18:33:09 釣れたw 荒らすなボケ
803 :
デフォルトの名無しさん :2010/11/21(日) 18:34:58
糞スレ
釣れたw
805 :
デフォルトの名無しさん :2010/11/21(日) 18:36:52
C言語でインターネットを作るにはどうしたらいいですか
とりあえずソケットでも使えば
エロいこと言うなよ
エロい・・・///
ペロペロ
友達にC言語を自慢したいのですが、何かいい方法はありますか。
下着ゲットして「これ何だと思う?」って言えばいい
ブリーフはいたJKとか
金曜日の夜 土曜日の昼 土曜日の夜 日曜日の昼 日曜日の夕 日曜日の夜 月曜の朝 ↓ ↓ ↓ ↓ ↓ ↓ ↓ ┃:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ∧||∧ ∧ ∧ ∧∧ ∧ ∧ ┃:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ( / ⌒ヽ (・∀・) ∩∀・) (・∀・)∩ ┃:::∧∧:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: | | | / ⊃⊃ ヽ ⊃ノ /⊃ / ....┃:::('д` )::::::::::::::∧∧::::::::::::::::::::::::::::::::::: ∪ / ノ 〜( ( ヽ )つ 〜( ヽノ ......┃:::と ヽ::::::::: ('д` ):::::::( )⌒ヽ;:::::::::: | || (/(/' (/ し^ J ......┃:::⊂,,_UO〜:::(∩∩ ):::::|/.|/uと )〜::::: ∪∪
いや別に
816 :
デフォルトの名無しさん :2010/11/21(日) 21:36:27
あげ
>>814 飛び石連休だからよもう少し別のAAにしとけ
というかズレてるよね
今日も一日一あずにゃんペロペロ
ヾ(´・ω・`)ノ
モキュモキュ
822 :
デフォルトの名無しさん :2010/11/22(月) 23:24:48
MinGWgccでコンパイルするときコンパイル先を指定するのってどうやるんですか cygwinではcd C:cprogram/testって入力したらできるんですが
823 :
Perl忍者 ◆M5ZWRnXOj6 :2010/11/22(月) 23:38:08
リネージュの作り方教えて
やっぱりいいわ
テスト
826 :
Perl忍者 ◆M5ZWRnXOj6 :2010/11/22(月) 23:48:34
Savage2やろう C言語なんてお前らがやっても まじいみねーだろ
827 :
Perl忍者 ◆M5ZWRnXOj6 :2010/11/22(月) 23:58:50
こ こ の ス レ 来 た の が 間 違 え だ っ た
(´・ω・`) ぶつぞ〜
830 :
デフォルトの名無しさん :2010/11/23(火) 03:07:09
ポインタ変数の記述は*p←このようになりますが p*←これはなんですか
乗算
832 :
デフォルトの名無しさん :2010/11/23(火) 05:32:17
糞スレ
アナル
ほっはっ
教材のソースをみてると ポインタ変数を宣言するとき int* i; int *i; というように*の位置が違うんだけど なにか違いがあるの?
ない int*i; でもいいし int * i; でもいいし int * i; でもいいよ
どっちでもいい ポインタ型であることを明確にするために int* i; とする派と 複数宣言するときでも統一できるように int *i, *j; とする派がいるだけ でも1つ宣言のときは前、複数宣言の時だけ後ろの混在で使ってる人がほとんどじゃね?
>>835 Cではint *p
C++ではint* p
が使われることが多い。
>>835 Cではint *p
C++ではint* p
が使われることが多い。
へえ
それほど大事なことでもないから2回言わなくていい
842 :
835 :2010/11/23(火) 15:24:42
なるほど ちなみに int* x, y; とした場合はxだけがポインタ変数ということで いいんでしょうか?
いいです。
844 :
835 :2010/11/23(火) 15:29:13
ありがとう また来る
typedef int *intptr_t; intptr_t x, y; では両方ともポインタですねか?
はい。そうです。
はい。違います。
intptr_tとか紛らわしい型名つけんな c99のstdint.hとかぶってる
if (det > (1e-3)) あるサイトで,detは変数なんだけど。 1eから3引くってことなのかい? 1eってなんぞ?
850 :
デフォルトの名無しさん :2010/11/23(火) 19:12:48
浮動小数点リテラル
C言語以前の問題だな
浮動小数点数の科学的記数法
1e2 = 100 1e1 = 10 1e0 = 1 1e-1 = 0.1 1e-2 = 0.01
854 :
デフォルトの名無しさん :2010/11/23(火) 19:48:07
>>848 みたいに関係ないとこに噛み付く馬鹿ってなんで生きてるのかね
糞スレだからだろ
個人的には自治厨みたいな連中のほうがうざい。
両方うざいです
858 :
デフォルトの名無しさん :2010/11/23(火) 20:48:37
#include <stdio.h> int sum(int *kadf[2]) { return *kadf[1]+*kadf[2]; } int main(void) { int valew[2]={1,2}; printf("%d\n",sum(&valew)); } なぜかエラーが起こる
>>858 return *kadf[0]+*kadf[1];
860 :
デフォルトの名無しさん :2010/11/23(火) 20:53:07
#include <stdio.h> int sum(int *kadf[2]) { return *kadf[0]+*kadf[1]; } int main(void) { int valew[2]={1,2}; printf("%d\n",sum(&valew)); } 修正したけど 何故かエラーになる
>>860 なぜかじゃねーよ。
#include <stdio.h>
int sum(int *kadf) { /* もしくは int kadf[] */
return kadf[0]+kadf[1];
}
int main(void) {
int valew[]={1,2};
printf("%d\n",sum(valew));
return 0;
}
彼はポインタと配列の関係で混乱しているように見える
>>860 #include <stdio.h>
int sum(int (*kadf)[2]) {
return (*kadf)[0]+(*kadf)[1];
}
int main(void) {
int valew[2]={1,2};
printf("%d\n",sum(&valew));
}
>>863 君は 860 ではないか? return 0; がないけど。
int sum(int *kadf[2]) { return *kadf[0]+*kadf[1]; } とした場合の、 int *kadf[2] 、*kadf[0]は何を表すか教えて sum(&valew)とした時に &valewで何が渡ってるんですか
>>865 kadf[0]でintへのポインタで*kadf[0]で、そのポインタの指す先のintの値だろ。
867 :
デフォルトの名無しさん :2010/11/23(火) 21:09:00
int *kadf[2] は、 intへのポインタ型の要素数2の配列を引数kadfを取ることを示す。 *kadf[0] は、 kadfの0番目の要素(intへのポインター型)が指す要素(int型)を示す。
868 :
デフォルトの名無しさん :2010/11/23(火) 21:09:52
&valewは、 変数valewのアドレスを示す。
870 :
デフォルトの名無しさん :2010/11/23(火) 21:16:46
無いよ。
とにかくだ。 value じゃないか?
> int *kadf[2] 、*kadf[0]は何を表すか教えて まず関数の引数に使われる[ ]の中の数字に何の意味もない、 int *kadf[0] だろうが int *kadf[1000] だろうが同じ意味。 * は一番優先度が低い、したがって"int *kadf[] は配列です"と解釈される。 配列のに格納されるデータ型は int*。 だから int sum(int *kadf[2]) は引数にint*の配列を取り、 戻り値 int の関数 sum と解釈される。 *kadf[0]は"配列kadfの最初の値(ポインタint*)"の中身。
>>872 void aho(int saru[][100]);
初心者なんだから背伸びしないでコツコツ行こう。 猛スピードで駆け抜けると何処かで転落する
「C実践プログラミング」 でCの文法、make、デバッグ手法など、基礎を習得 ↓ 「C言語ポインタ完全制覇」 or 「秘伝C言語問答 ポインタ編」 でポインタに関して完全理解する ↓ 「エキスパートCプログラミング―知られざるCの深層」 でスタック、ヒープ、リンカ、ローダなど周辺知識を習得 ↓ 「C言語によるオブジェクト指向プログラミング入門」 で実践的な大規模プログラムの作り方を学ぶ ↓ 神の誕生
mallocで配列の配列を確保するにはどうしたら良いですか。
頭でっかちの誕生じゃねーかwww
878 :
デフォルトの名無しさん :2010/11/23(火) 22:00:48
mallocは指定されたサイズの領域を確保するだけ。型はない。 配列の領域として使いたいなら、配列にキャストして使えばいい。
配列の配列の大きさを計算してまとめて取るか、分割で取るかだけ。 どちらでもお好きなように。
なるほど分かりました。 どうもありがとう。
#include <stdio.h> #include <stdlib.h> int main(void) { char (*p)[5]; char *pp; int i; p = (char(*)[5])malloc(3*sizeof(char[5])); pp = (char*)p; sprintf(pp,"123456789012"); p[0][4] = p[1][4] = p[1][4] = 0; for (i=0;i<3;i++) printf("%s\n",p[i]); return 0; }
ありがとう!
883 :
デフォルトの名無しさん :2010/11/24(水) 00:59:37
main関数で scanf("%d",&i); としてint型の変数iに数字を入力したらその変数iを子スレッドで使用するにはどうすればいいですか?
イミフ 子スレッドにアドレス渡しとけばいいじゃん
885 :
デフォルトの名無しさん :2010/11/24(水) 01:10:25
>子スレッドにアドレス渡しとけばいいじゃん どうやって渡すんですか? 複数でもいけますか?
子スレッドを開始するときにひとつだけポインタを渡せるはずだが それを使って変数 i へのポインタを渡せばいいと思わないか
複数なら構造体にまとめればいい
888 :
デフォルトの名無しさん :2010/11/24(水) 01:13:54
hTh = (HANDLE)_beginthreadex(NULL,0,mythread,ここ?0,&thID); >複数なら構造体にまとめればいい なるほど。 そういう考えですか
そう、そこ
890 :
デフォルトの名無しさん :2010/11/24(水) 01:16:56
ありがとうございます。
891 :
デフォルトの名無しさん :2010/11/24(水) 02:32:09
スレッド間では静的領域しか共有できないんじゃなかったっけ? struct test mode -> static struct test mode にしても駄目かな?
893 :
デフォルトの名無しさん :2010/11/24(水) 03:00:53
100くらいじゃmythreadが動き出す前にmain側で mode.start == mode.end までインクリメントしてしまうと思うよ その後mythreadが動き出してもすでに lpx->start == lpx->end だから何もすることがない
895 :
デフォルトの名無しさん :2010/11/24(水) 03:28:38
なるほど。 理解できました。 では書き方自体におかしいところはないのですね? これたとえばすごい回数まわしたとして 普通にループするより早くなるのでしょうか?
896 :
デフォルトの名無しさん :2010/11/24(水) 03:46:25
いまマルチスレッドで1万回まわしたのと そのままmain関数で一万回まわしたのを比較したら スレッド使わないほうが早かったんですけど・・・
そりゃあなた、複数のスレッドで同じ処理をやっても意味がない 1スレッドで1万回と、2スレッドで各1万回=計2万回を、比べちゃいかん スレッドを管理する負荷が増えるぶん遅くなるだけ せっかく複数のスレッドを使うなら、それぞれのスレッドで役割を分担しなければ 1スレッド目は0から5000まで、2スレッド目は5000から10000まで、とか
あとクリティカルセクションで囲ってたらその間は同時実行できないわけだから速くならないよ
899 :
デフォルトの名無しさん :2010/11/24(水) 05:53:56
ありがとうございます。 やっと完成しました。 早すぎてびっくりです。
へえ
あはぁ
ぶはっぶはっ
どぴゅっどぴゅっ
ほっほっ
アッー!
メリークリスマス! 素敵なイブしてるかい
質問させて下さい。 配列に格納された英文があります。この英文の最初のみ大文字に、それ以外を小文字に変えてファイルに出力したいのですが、どのようにしたらよいのでしょうか。 英文の区切りはピリオドとしているのですが、複数の英文を配列に格納している場合、どのようにしたらいいのかわかりません。 一つの英文のみならtoupper関数などをそのまま利用するだけなのでしょうが、複数の英文を認識し、それぞれ変換させる方法がわかりませんでした。 Who are you. I am Tom. というような感じの複数の英文が格納されています。 なお、ファイルへの出力そのものはできます。
>>907 一例として、ざっくり書くなら
1.先頭文字を大文字にする
2.以降の文字を順に読み、どんどん小文字にしていく
3.ピリオドを発見したら1に戻る
こんな処理を文字列の最後まで繰り返すとかね
>>908 に加えて
読み込んだ文字がピリオドならheadフラグを立てる
その文字が英字なら
headフラグが立っていれば大文字にしてフラグを消す
立っていなければ小文字にする
英字でなければ(ピリオドの場合も)
そのまま
文字列終端になるまで繰り返す
Cのソースをフローチャートに起こして図示するものを作りたいのですが 条件分岐などはコンパイラの中身を理解していないと厳しいですかね
いいえ
今日も一日一あずにゃんペロペロ
どん兵衛昔話!!
914 :
デフォルトの名無しさん :2010/11/25(木) 21:18:24
糞スレ
質問します int flg=0,atk=0; while( 「不明」 ) { flg ^= atk; if( flg == 0 ) { character[1].nHP -= character[0].nAttack; printf("PHP %d \n", character[1].nHP ); } if( flg == 1 ) { character[0].nHP -= character[1].nAttack; printf("敵HP %d \n", character[0].nHP ); } } 互いにHPを削りあうプログラムを組んでるのですが、 マイナス値までいってしまいます。 マイナス値まで行かずに0で止めたいのですが、どうすればいいでしょうか? お願いします。教えて下さい。
>>915 character[1].nHP -= character[0].nAttack; のあとに
if (character[1].nHP <= 0) {
character[1].nHP = 0;
break;
}
を入れれば。
下の計算のあとにも。
>>915 flg ^= atk; これだと、0と-1の繰り返しになるから
flg = !flg; で。
初歩的な事を聞いてさらにスレ違いかもしれなくて恐縮なのですが、 LinuxやBSDなどのシステムコールの表記方法としてopen(2)やexit(3)といったものがありますがカッコの中の数字はどういう意味なのでしょうか?
man のセクションを表す、1はコマンド、2はシステムコール、3は関数、後は忘れた
俺がついさっき始めて知ったことを
>>919 が聞いているっ
同じスレにいたのかな
>>920 ありがとうございます。
ということはカッコ内の数字でシステムコールか関数か判別できるということなのですね。
>>919 おそらく関係ないと思います。2-3日2ch開いてすらいないので…
923 :
デフォルトの名無しさん :2010/11/26(金) 02:34:16
質問させてください 配列a[9]={1,3,2,5,8,4,0,9,0}があるとして 配列には1〜9の数字のどれかが入っているとして 配列の中にない数字6と7を出力したいんですが やり方をおしえてください
>>919 マニュアルの区分
標準コマンドとかC言語の関数とかで分けられてる
926 :
デフォルトの名無しさん :2010/11/26(金) 02:57:34
>>923 普通は
int b[10] = 0;
int i;
for( i = 0; i < 9; i++ )
b[a[i]]++;
for( i = 0; i < 10; i++ )
if( ! b[i] ) printf( "%d\n", i );
ってやるんじゃない、a[] に10以上の数字が入ってたらアウトだけど
928 :
927 :2010/11/26(金) 03:04:52
× b[10] =10; ○ b[10] = {10};
929 :
デフォルトの名無しさん :2010/11/26(金) 03:19:53
VC++2008を使っています。 配列の初期化について質問があります。 test.Buffer[100] = 0.0; 構造体の中の配列を上のようにすると、中身が全て0.0にできていました。 インターネットや参考書には test.Buffer[100] = {0.0}; とするように書いてあります。 しかしこちらでは構文エラーとなりコンパイルできません。 構造体の中の配列を一括で初期化する際、本当はどのように記述したらよいのでしょうか? よろしくお願いいたします。
>>931 納得しました!!
本当にありがとうございます。
933 :
デフォルトの名無しさん :2010/11/26(金) 07:55:48
糞
何を納得したのか本当に謎 おそらく根本的に勘違いしてる
936 :
デフォルトの名無しさん :2010/11/26(金) 15:15:55
ほっほっ
{}で一括代入できないとか正直、糞言語ですよね
そうだな 別に無理して使わなくていいぜ
939 :
デフォルトの名無しさん :2010/11/26(金) 17:31:38
釣れたw
ほんとどうしようもないな
純粋なC言語なら変数を宣言する以前に処理を記述することが出来ないだっけか C++コンパイラでC使ってるから忘れちまったけど… 初期化はちょっと時間掛かるから使わないで済む場合は初期化しないってのが 始まりなのかな(今となっては読みにくくなるだけだから最初にmemsetとかしちゃうけどね)
何を純粋と言ってるのかは知らんが変数宣言がブロック先頭に縛られる制約はC99で取っ払われた
943 :
デフォルトの名無しさん :2010/11/26(金) 22:13:13
「C++ コンパイラで使う」という時点で C99 はない
ほっほっ
freadで格納する先の構造体を宣言するときって 普通に構造体を宣言する時となにか違うの?
基本何も違わないけど アライメントに気をつけないと想定していたサイズと違うサイズで読んじゃうことはあるかもね
947 :
945 :2010/11/26(金) 23:00:34
struct ○○ ○○[?];
どぴゅっどぴゅっ
「C++ クラスと継承完全制覇」 でCとC++の違いを垣間見る ↓ 「ロベールのC++入門講座」 でC++の文法など基礎を習得 ↓ 「Effective C++」 でよりよいC++プログラムの記述法を学ぶ ↓ 「STL標準講座 標準テンプレートライブラリを利用したC++プログラミング」 でSTLを習得 ↓ 「オブジェクト指向における再利用のためのデザインパターン」 で大規模プログラムの設計法について学ぶ ↓ 神を恐れぬ者の誕生
ぶはっ!ぶはっ!
初歩的な質問なんだが chara cnt=’1’; printf(“%d”,cnt); で 49が表示されるのは何故?
昔の人がそう決めたから
int BottonCount; int Part; float i=1/Part*BottonCount; Draw(float tx);って関数にiを突っ込もうとしてもうまくいきませんなぜ?
キリッ
>>951 Asciiコード表で1に割り当てられているコードを
%dで10進数で表示しているから
float i=1.0/Part*BottonCount;
957 :
デフォルトの名無しさん :2010/11/27(土) 01:39:33
ボットンカウント吹いたw
たとえば10000byteとか大量のBYTEデータをファイルに書き込むとき fwrite ( data, 1, 10000, fp ) ; と fwrite ( data, 10000, 1, fp ) ; だったらどっちがいいの? なんか差はある?
>>959 高々10KB程度、大差ないべさ。途中で失敗したときの戻り値は違ってくるけど。
>>959 fwrite() のソース見ないと判らんね
結局は write() をコールするんだけど、write( fd, buf, size * n ) としてるのか write( fd, buf, size ) を n 回コールしてるのか
後者なら、
>>959 の後者の方が良いのは明らかだ
>>959 よく出る話題だわな。これ。
そういえばintelが「将来は1000コアのプロセッサを作るーー!!」とか言ってるそうで。
1byte を 1000回にして、1000個のコアに割り当てたら、1000倍速いじゃん! みたいな?
いや、どうもこの先コアあたりの速度ってムーアの法則みたいには行かないっぽいし? 多コアの時代になるだろうし?
963 :
962 :2010/11/27(土) 03:09:30
あ、でもよく考えたらプロセッサだけ一人で頑張っても、メモリとかバスとかの速度が追いつかないわな…(w そのへん、どうなるんだろうか?やっぱメモリも1000枚差しとかになるのかね…w いや、wじゃなくて、ほんとに
>>963 それ以前に read/write なら物理的な媒体の方が問題じゃね?
965 :
デフォルトの名無しさん :2010/11/27(土) 09:13:52
if(a && b) これはab共に真なら〜てことだけど if(a & b) てどういう意味?
全ビットの論理積を計算して0出なければ真。 0x1 && 0x2 真 0x1 & 0x2 疑 0x2 & 0x2 真 0xF & 0x2 真
おーきに
偽じゃなくて疑かよw
疑ってw
今勉強してるソースに printf( ( c_file.attrib & _A_RDONLY ) ? " Y " : " N " ); ってゆうのが出てくるんだけど このprintfは何かを比べてその結果から'Y'か'N'を出力してるの?
c_file.attrib & _A_RDONLY が真なら"Y"、偽なら"N"をprintfの引数として渡している
>>972 c_file.attrib と _A_RDONLYをビット単位でAND演算して、結果が0以外であればY、0ならNが表示される
ビット演算と条件演算子でググると知りたいことが書いてあると思う
putchar((c_file.attrib & _A_RDONLY) ? 'Y' : 'N')にするべき状況だな。 あー、空白も必要か。 それなら printf(" %c ", (c_file.attrib & _A_RDONLY) ? 'Y' : 'N');だな。
処理としてはprintf(" Y ");の方がprintf(" %c ", 'Y');より軽そうに見えるけど、 実際はどうなの?
977 :
972 :2010/11/27(土) 14:11:56
あーなるほど 処理の重い軽いはまだよく分からんが 使い方としては理解できた ありがとう。
>>976 フォーマット文字列のない場合printfじゃない別の関数に置き換えるコンパイラとかあるらしいが
>>976 重さよりも、通常使用における安全をとって、第一パラメータを可変にするのを避けた。この場合は問題にはならないけどね。
>>978 「フォーマット文字列のない場合」なんて有り得ないので何を言いたいのか判らない。
フォーマット指定がある場合でも例えば、gccはprintf("%s\n", foo)をputs(foo)に置き換えるね。
ふ〜ん
で?
次スレ立てます
Cにコンプレックス持ってましたがもう一度勉強します。 良いサイトおしえてください
>>979 なるほど printf() 内ではフォーマット文字列終端に \n が有るか無いかで分岐が有るんですね
無いと思います
だって puts は自動的に改行を追加するから、そうじゃなきゃ実行結果が変わってしまう
printf() 内部では putc() をコールしてるのかな?それとも直接 write() をコールしてるのかな? 誰か知ってる人居ますか?
答えに困ること聞くんじゃありません
>>987 printf内で処理が分岐してるわけじゃなくて
コンパイル時にprintfをputsに置き換えてるだけだからなあ
┌○┐ │お|ハ,,ハ │断|゚ω゚ ) お断りします │り _| // └○┘ (⌒) し⌒
ume
やっぱり、このシリーズ糞だった しかも途中で忍者が現れて荒し始めるし トンでもテクニックワロタ
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。