C++勉強しようと思うんだけど・・・
■ このスレッドは過去ログ倉庫に格納されています
0001初心者
NGNGお勧めなのでしょうか?
初心者の自分ですが、皆様のお知恵をお借りしたいと
思いますので、よろしくお願い致します。<(_ _)>
0175153
NGNGあちゃー、間違ったベクトルに進んでいましたか。
ついつい変数と行数が少ないほど良い気がしちゃうんですよ…反省。
x が入力された回数だから使い回せるな、とか考えて、さらに書き込んだあと
++x; を消して noline[ x - 1 ] を noline[ x++ ] にすれば良かったとかも思ってました。
0176169
NGNGえぇ、知っていますヨ
過去レスを読んでBCCについては、すでに提案されていたもので・・・。
1さんが既にBCCを使われているなら、それでいいと思います。
興味からお尋ねするのですが、BCCのメリットとは何ですか?
0177デフォルトの名無しさん
NGNG俺も工房の時そう言うコード書いてたw(今もたまに)。
昔ならともかく今はメモリなんて腐るほどあるんだからあまり神経質になることはないと思う。
コンパイラがある程度最適化してくれるし。
凝った言葉で作文を書くと後で読んで意味がわからなくなる。そんな感じ。
誰が見てもわかりやすい作文がなんだかんだ言ってよしとされる。
0178デフォルトの名無しさん
NGNGBCCのいいところ・・・無料である・クセが少ない・無難である
>>177
BCCは最適化しない。
しかしケチって醜いソース書いて、実行時間が0.1秒早くなる代わりに
デバッグに1時間かけるよりも、見やすいソース書いて、実行時間が
0.1秒遅くなって、10分でデバッグが終わる方が良かろう。
0179デフォルトの名無しさん
NGNGコマンドプロンプトで動作します。
C++を使いたいだけならcygwinと言う大げさな環境を導入するまでも無いかなと考えたからです。
恐らくフリーと言うことを強調されているのかなと思いこちらもフリーで対抗したと。
0180デフォルトの名無しさん
NGNGそうなの〜。勉強になった。あくまでおためし、学習用って位置づけか。
0181初心者
NGNGちなみに自分はWINです。
0182178
NGNG「この開発環境は初心者勉強用だから…」
と初心者に言ってプログラミングを勉強させると、かなりの確立で
やる気を無くすと思うのだが。。
いや、漏れは実はDelphi使いなんだが、Cのライブラリを使いたい時など、
上手い具合にBCCを使ってる。結してBCCは子供だましではないよ。
0183デフォルトの名無しさん
NGNGまぁ、今はCPU資源も豊富だからね。最適化なんかしなくても(略
Delphiは素晴らしい。
0184デフォルトの名無しさん
NGNGライブラリをDLLでラップする感じ?良いこと聞いた♪
0185デフォルトの名無しさん
NGNG0186169
NGNGそれともプログラミング初心者ですか?
PC経験はどれくらいですか?
WIN環境意外にも興味はありますか?
将来はどっち方面へ(プログラミング全般を極めるとかSEになりたいとか)
答えられる(答えてもいいなと思う)範囲で教えて下さいナ
0187169
NGNG0188デフォルトの名無しさん
NGNG過去ログ読めばわかるらしいぞ。
コード見る限りCとプログラムのリテラシーはあるみたいよ。
0189初心者
NGNG他にどのような環境があるのか分からない状態(知識不足)
なので、なんとも答えられません・・・
0190169
NGNGスマソ、ろくに読んでいなかった(w
今、読んで大体わかったヨ
それでも、もう一度彼から、まとまった形で情報が欲しいな
皆がより的確なアドバイスができるようにネ
0191169
NGNGゴメン、環境についてはWindowsで良いでしょうね(とりあえず、他は視野に入れる必要ナシ)
↓の目的からすれば(Win系が一番充実しているでしょう)
>ちなみにC++を覚えたいという目的は、PC(プログラマブルコントローラー)
>とリンクさせて制御系のシステム構築が出来るようになるのが
>目的なのですが・・・
0192デフォルトの名無しさん
NGNG最終的にはPCをラップするクラス書いたりとか?
0193デフォルトの名無しさん
NGNG好みの問題であるんだけど、
将来、他の言語も勉強するつもりがあるなら、
> while ( no && x < 100 ) {
while ( no != 0 && x < 100 ) {
と書いた方がよいかも。
>>156
おれの場合、
for ( y = 0; y < x; y++ ) {
// nolist[x - y - 1]というように参照
と書いてる。多少難しくなるが。
0195デフォルトの名無しさん
NGNGオプションをつければ最適化するようです(-O1:サイズ,-O2:メモリ)
あと、BCCの良いところは……メッセージが日本語。
(cygwinはいろいろあって便利だけど、gccの為だけに入れるのはどうかと。
unixのツール「群」が要らない人にとっては単なる無用の長物だと思います)
>>163,>>165の問題は、(doの辺りだけ書き換え)
int temp;
do {
cin >> temp;
if (temp == 0)
break;
nolist[x] = temp;
++x;
} while (x < MAX);
こんな感じで良いんでしょうか?
0196162
NGNGおめでとう! 正解だ!
今のところは扱ってるのがintだから実感はないだろうけど、あとあと
クラスオブジェクトを使うようになったらわかるよ。
そのコードが、C++として正しく、安全で、かつ最も効率のいい
ものなんだって。
0197デフォルトの名無しさん
NGNGいかがなもんでしょう。
#include <stdio.h>
#include <stdlib.h>
#define MAX 100
int main(void)
{
int a[ MAX ];
int i, j, tmp;
for (i = 0; i < MAX; i++) {
a[ i ] = rand();
}
printf("ソート前\n");
for (i = 0; i < MAX; i++) {
printf("%d\t", a[ i ]);
}
printf("\n");
for (i = MAX -1; i >= 1; i--) {
for (j = 0; j <= i - 1; j++) {
if (a[ j ] > a[ j + 1 ]) {
tmp = a[ j ];
a[ j ] = a[ j + 1 ];
a[ j + 1 ] = tmp;
}
}
}
printf("ソート後\n");
for (i = 0; i < MAX; i++) {
printf("%d\t", a[ i ]);
}
printf("\n");
return 0;
}
0198デフォルトの名無しさん
NGNGまだまだvectorやistream_iteratorとか、
もっと、その、なんだ、C++っぽくかつスマートな書き方があるだろ、
おい。
0199デフォルトの名無しさん
NGNG変数tempも
> 1.入力された数字を受け取る
> 2.入力された数字が正しいかどうかを判定する
の目的で使われている気がするが違うの?
イマイチ差違がわからん。
0200153
NGNG>>195 は僕じゃないんですが、そっか、break使えばいいんですね。
>>132 の (4を 書きましたが、これも問題多そうで…
採点お願いします。
#include <iostream.h>
#define MAX 1001
int main( void )
{
int all[ MAX ] = { 1, 1 };
int half = MAX / 2;
for ( int x = 2; x < half; ++x ) {
if ( !all[ x ] ) {
for ( int y = 2; x * y < MAX; ++y ) {
all[ x * y ] = 1;
}
}
}
for ( int j = 0; j < MAX; ++j ) {
if ( !all[ j ] ) {
cout.width( 4 );
cout << j;
}
}
return( 0 );
}
0201デフォルトの名無しさん
NGNG0202デフォルトの名無しさん
NGNG俺VBもDelphiも普通に出来るんだけどCは何故か挫折しちゃった。
何が原因なの?
0203デフォルトの名無しさん
NGNG#include <vector>
#include <algorithm>
#include <iterator>
#include <numeric>
using namespace std;
int main( void )
{
vector<int> v;
istream_iterator<int> isit(cin);
copy(isit, istream_iterator<int>(), back_inserter(v));
size_t sz = v.size();
for (size_t i = 0; i < sz; ++i)
{
cout << i + 1 << "回目の入力 = " << v[i] << endl;
}
double avg = accumulate(v.begin(), v.end(), 0) / (double)sz;
cout << sz << "回の平均値 = " << avg << endl;
return 0;
}
0204デフォルトの名無しさん
NGNGまぁそういう主旨のスレではありませんので、大目に見てやってくださいな。
>>200
ナントカの振るい作戦ですね、でも配列は0で初期化しましょう。
>>202
なんでだろうね、漏れもターボパスカルから入ったよ。
0205デフォルトの名無しさん
NGNGはいはい、すごいですねぇ。
>>200
#define MAX 1001
なんか1001ってのがイレギュラーで気持ち悪いな、
0206デフォルトの名無しさん
NGNGCの*優れた*教科書はどれも、計算機科学の基礎知識と、FORTRANやPASCALなどの
高級言語の知識がすでにあるものとして書かれているからです。
計算機科学の素人がいきなり手をつけようとしてCを選ぶのは、たぶん、間違いなのです。
0207デフォルトの名無しさん
NGNG「Cスタイルのキャストを使うなよ」というツッコミを釣りたかったわけか?
0208デフォルトの名無しさん
NGNGとやって、楽しいのだろうか?
本質的な追求は為されないのだろうか<このスレの本質ってナニ
0210204
NGNGそう考えると、"Delphiの良著"もCの轍を踏んでますな。
"Pascalの良著"+Delphi付属の"dcc32.exe"(コンソールコンパイラ)で基礎を
叩き込んで、Delphi→BCB or VC と進むのが現代の王道かもしれない。
0211デフォルトの名無しさん
NGNG0212デフォルトの名無しさん
NGNG208はプログラミング初心者の頃、ソース書いてあーでもない、こーでもない、と
やらなかったのだろうか?
つーか208はプログラム書けないんだろ。
>>210
PASCALの良著の見分け方・・・10年以上前に初版が出版されていて、現在でも
改訂されながら版が重ねられていること。
>>211は男を極めてるので、漏れなく放置致します。
0213デフォルトの名無しさん
NGNG>やらなかったのだろうか?
これが楽しいと思わなければプログラムを趣味に出来ないだろ。
0214208
NGNGそりゃやったさぁ、今だってやるよ
ところで1はこの「betterなソースコードを書こうゼ」コーナーには
参加しているわけ?
1の問いが完結し、その発展形として
「betterなソースコードを書こうゼ」合戦があるのならば良いと思うヨ
0215デフォルトの名無しさん
NGNG0216208
NGNG0217208
NGNG0218デフォルトの名無しさん
NGNG>>1-100読んで彼の今のレベルを認識すればよい。
捨てぜりふ、カコイイ!
0219デフォルトの名無しさん
NGNG使い方が先でしょ。何にしても。
0220デフォルトの名無しさん
NGNG但し、線形リスト全体をクラスメソッド"push"と"pop"を持ったクラスとして
実装し、線形リスト自体は外部から隠蔽すること
という但し書きを加えれば良いと思います。
しかし異色の名スレになりつつあるな・・・
0221デフォルトの名無しさん
NGNGそだね。第一回の締めくくりと第二回の導入が入っていい感じかも。
0222デフォルトの名無しさん
NGNG1はCではなくC++を学びたいと言っている
ということはoop言語に魅力(必要性)を感じたということではないか
ならば始めからclassについて言及されるべきでは
>>219
classの考え方や実装方法を先に知ってもいいのでは
printfじゃ何でダメなのという話になる
0223デフォルトの名無しさん
NGNGピヤノやお琴もそう。
とりあえず、言われたとおりの音をだね、
言われたとおりに、体が覚えるまで、鳴らすの。
徐々に、リズムを買えたり、音階を広げていったり、
和音にしたり、リズムをつけたり、アレンジしたり、
ソロの練習をしたりスンの。
でね、cinとcoutと配列と数字のやりとりはね、
ピアノで言うところのカノンなの。
お琴で言うところのさくらさくらなの。
ちょっと変った教室ではもっとしゃれた曲から教えてくれるけどね、
とりあえず、型からはいるのが、一番なの。
そのうちね、作曲のやり方もやるのよ。もちろん。
0224初心者
NGNGなんか、あっという間に1000までいきそうな
雰囲気にかなり焦ってます・・・
頂いた課題も(((?o?);などと悩みながら、色々
試しながらやってます。
なんか悩んでる間に1000までいきそうな感じですね〜。 (_´Д`)
0225デフォルトの名無しさん
NGNGふと思ったけどC++ってなんでcoutなんですか?
いきなり掟破りな文法なんですが。
0226デフォルトの名無しさん
NGNG0227デフォルトの名無しさん
NGNGごめん。理解が困難。
じゃあprintf()はなぜダメ?可変長引数?
0228デフォルトの名無しさん
NGNGcoutというオブジェクトに文字列を流し込んでいるのよ(<iostream>)
ヤパーリCとC++の考え方の違いを教えないとダメでしょ
0229デフォルトの名無しさん
NGNG・C++の文法
・C++の標準ライブラリの使い方(STL、クラスライブラリ含む)
・OS、作りたいアプリ固有のライブラリ・フレームワークを覚える
(WindowsならMFC, VCL, DirectXなど)
を端からゴリゴリ覚えていけ。
んで暇があったら
・アルゴリズムとデータ構造
・OOP全般
やれ。
突っ込み覚悟で補足しとくと後半の二つはアプリ作成には必須ではないよ。
上と平行して覚えてくのはかまわないけど下からやると飽きて挫折する。
0230デフォルトの名無しさん
NGNG0231デフォルトの名無しさん
NGNG煽るだけならよそで。
始めからいたような顔はやめてください♪
0232デフォルトの名無しさん
NGNGOOPなんて構造化プログラミング知らない人間に教えても混乱するだけじゃない?
構造化プログラミングも十分理解してない人間にcoutだprintfだって言ったって
わからんよ。
それよりOOPのことは>>220のように�Eで始めて触れても遅くないと思う。
CとC++って勉強する上でシームレスに繋がってないのが大きな欠陥だよなぁ。
その点、PascalからObjectPascalを設計した人はエライと思うよ。
0233デフォルトの名無しさん
NGNGだってCじゃなくてC++をやりたいんでしょ?
煽りではないよ、目を向けて欲しいだけです
0234デフォルトの名無しさん
NGNGなんでCは
#include <stdio.h>
int main()
{
printf("Hello, World!\n");
return 0;
}
ではじまるのか?
と同じだな。
話すと長い。
printfには型安全がない。
基本型の理解やポインタの理解、スタックの理解、書式の理解、標準出力の理解が必要だし、
誤った入力や書式指定を許してしまう。
coutの方が、理解に必要なハードルが少ない。
cout << なにか;
を覚えれば、画面(標準出力)になにかが表示される、と覚えれば済む。
0235デフォルトの名無しさん
NGNG0236デフォルトの名無しさん
NGNG例?
char a = 'U';
printf("%d %d",a);
確かに幾度と無く危険な目に遭わされたw。
0237デフォルトの名無しさん
NGNG「<<」ってなんだ、ビットシフトじゃねーの?って聞かれたらまた面倒なんですけど。
cout.operator<<(なにか);
とでも書かせとくか?
0238デフォルトの名無しさん
NGNG頑張れば、
cout += "hello" += "world" += endl;
とか
cout != "hello" != "world" += endl;
0239デフォルトの名無しさん
NGNG「<<は元々整数に対して使う演算子で、そいつのビットを、右や左にn個シフトしたいときに使うんだよ。
で、シフトって言うのはね...」
と説明すればよくて、混乱しそうになったら
「だけど、整数じゃないオブジェクトに << を使うときはね、 xx を流し込むって意味で
使うんだよ。最初に使った cin とか cout の << がそれだよ」
でわかるんじゃないかねえ。
中級になったら、「ostream系のオブジェクトの operator <<は...」って教えればいいだけ。
printf教えるときに、スタックの状態や、可変長引数の片繰上げや細かい書式、
va_argやva_listの説明なんかしないだろ。
そんなもんだよ。
練習用の曲はね、大抵ね、後から振り返ってみるといろいろ示唆すべきものが含まれているもんなの。
あるていどわかるようになってから、「ああ、あれはああいう意味があったんだ」ってわかればいい訳なの。
英語習うときもね、How do you do?みたいにね、よくあるイディオムから始めりゃあいいの。
0240デフォルトの名無しさん
NGNG基本は>>132、>>220の線で行く。クラス云々は�Eまでお預け。
但しC++らしく入出力はcin、coutを使うべし。
0241デフォルトの名無しさん
NGNG賛成++;
0242デフォルトの名無しさん
NGNGかわいそうに
0243デフォルトの名無しさん
NGNG気にせず問題が出来たら持っておいで。みんなでわいわい添削します。w
0244デフォルトの名無しさん
NGNGAlexandrescuマンセー!!!
0245153
NGNG単純に ofstream output( "prime.txt" ); でOKなんですかね。
#include <iostream>
#include <fstream>
#define MAX 1000
using namespace std;
int main( void )
{
int all[ MAX + 1 ] = { 0 };
int half = MAX / 2;
all[0] = 1;
all[1] = 1;
for ( int x = 2; x < half; ++x ) {
if ( !all[ x ] ) {
for ( int y = 2; x * y <= MAX; ++y ) {
all[ x * y ] = 1;
}
}
}
ofstream output;
output.open( "prime.txt", ios::out );
for ( int j = 0; j <= MAX; ++j ) {
if ( !all[ j ] ) {
cout.width( 4 );
cout << j;
output << j << endl;
}
}
output.close();
return( 0 );
}
0246デフォルトの名無しさん
NGNG今こういうの流行ってるの?
確かに0以外は偽だけどさ・・・使い方間違ってる気がする。
0248デフォルトの名無しさん
NGNGいろいろなポリシーの人がいるから何とも言えないけど、個人的には非推奨。
0249デフォルトの名無しさん
NGNG明示的に「0なら」とやりたいなら、if(all[x] == 0)の方が見やすいしわかりやすい。
if ( !all[ x ] ) の方が確かにソースも数バイト短いし、実行ファイルも数命令短く
なるかもしれないけど、それによって得られるメリットよりも、見難いソースの
デメリットの方が多そう・・・。
あと int all[ MAX + 1 ] = { 0 }; じゃ all[0] 以外は初期化できてないんじゃない?
ちゃんとfor文で回そう!
0250デフォルトの名無しさん
NGNGごめん。
>実行ファイルも数命令短くなるかもしれないけど
どっちも結局CMPじゃないの?
0251デフォルトの名無しさん
NGNGif ( !all[ x ] ) だとJZE?を使ってくるかもしれない。
すまん漏れ汗ンブラあまり知らんです。
0252デフォルトの名無しさん
NGNGそういう風に指定したとき、足りない要素は0として初期化される
ことが保証されてなかったっけ?
いや、もちろんコーディングスタイルとしてはやっちゃマズいだろうけどさ。
0253デフォルトの名無しさん
NGNG少なくとも、VCではどっちも同じ。
cmp 変数,0
jne
ってコードだった。
0254249
NGNGそうだったの?知らなかったスマソ。
でもやっぱり初期化したほうが精神的に落ち着くな・・・
0255デフォルトの名無しさん
NGNG9割は、ソースの1割で浪費される、と言われてる(8割2割って言う人もいる)。
ナントカの法則って名前ついてたかも知れないけど忘れた。
つまりソースの大部分は改良してもプログラムの高速化にほとんど貢献しない。
だからあまり細かい実装法( if(!all[x]) とか )にこだわっても、見にくくなる
ばかりでほとんど早くならない。
それよりは多少効率は悪くても、見やすい、美しいソースを書いて、完成してから
ボトルネックとなる1割の部分(再帰呼び出しされる関数や多重ループの一番内側)
だけに小細工をした方がなにかと良い。
ま、そういうことを頭の片隅に置いておくといいと思うよ。
それにソートプログラムを組めばわかるけど、高速化の真髄はアルゴリズムの改良
にあるってことも重要。
初心者のうちは「美しいソース」を書くようにした方がなにかといいです。
0256デフォルトの名無しさん
NGNG普通に9:1の法則でなかったっけ?
確か実行される頻度が高いホットスポットと呼ばれる部分がソース中に1割ある。
後の9割はたいして実行されない。
ホットスポットを最適化することがプログラムの高速化に繋がるって話だった気が。
0257デフォルトの名無しさん
NGNG配列の初期化(と言うより、値の準備)はループを回すべきだ、と。
bool型の変数を評価するときはどうするべきでしょう?
「if (hoge)」「if (hoge == true)」
今は前者を使っていますけど……。
(その割には「if (p == NULL)」と書いてたり)
0258デフォルトの名無しさん
NGNG0259257
NGNGtrueの時も「==」を使いますか。
0260デフォルトの名無しさん
NGNG真偽値はそのまま使おうぜ。
0262デフォルトの名無しさん
NGNG0263デフォルトの名無しさん
NGNGプログラミングでは80:20の法則で
プログラミング(コンピュータ)以外では
9:1の法則って良く聞くような。
「SFの9割は糞である」みたいに。
0264デフォルトの名無しさん
NGNG0265デフォルトの名無しさん
NGNG0266デフォルトの名無しさん
NGNG0267デフォルトの名無しさん
NGNG0268デフォルトの名無しさん
NGNG0269デフォルトの名無しさん
NGNG受講者がいないんじゃしょうがないよね。
しょうがないから、赤ペン先生たちで
例外について語り合っとく?
0270デフォルトの名無しさん
NGNG上級編までお預け。
0271デフォルトの名無しさん
NGNG0272デフォルトの名無しさん
NGNG0273153
NGNG>>132 の 5) バブルソート。
色気を出して関数にしてみました。
#include <iostream>
#include <time.h>
#define QTY 100
using namespace std;
void output( int array[], int qty, char mess[] )
{
cout << mess << endl;
for ( int i = 0; i < qty; ++i ) {
cout << array[ i ] << endl;
}
}
void bsort( int array[], int qty )
{
int temp, i, n;
for ( i = qty -1; i > 0; --i ) {
for ( n = qty - 1; n > 0; --n ) {
if ( array[ n ] < array[ n - 1 ] ) {
swap( array[ n - 1 ], array[ n ] );
}
}
}
}
int main( void )
{
int list[ QTY ];
srand( (unsigned)time( NULL ) );
for ( int i = 0; i < QTY; ++i ) {
list[ i ] = rand();
}
output( list, QTY, "ソート前" );
bsort( list, QTY );
output( list, QTY, "ソート後" );
return( 0 );
}
0274デフォルトの名無しさん
NGNG個人的に配列の引数はポインタで受け取ってほしい。特にchar型は。
■ このスレッドは過去ログ倉庫に格納されています