<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>たすけてーＣ＋＋　一般女子(理系でない)のプログラミング</title>
<link>https://ameblo.jp/louvenck/</link>
<atom:link href="https://rssblog.ameba.jp/louvenck/rss20.xml" rel="self" type="application/rss+xml" />
<atom:link rel="hub" href="http://pubsubhubbub.appspot.com" />
<description>理論的に考えることが苦手な私が、理論的に考えなくてはならない=つまりとても苦手　プログラミングを一から勉強していく過程をつづります。</description>
<language>ja</language>
<item>
<title>リストボックスに追加する</title>
<description>
<![CDATA[ <p>文字列を取り出すには、</p><p>Textプロパティを使用します。</p><br><p>例えば、金額を表すオブジェクト名を「Price」とつけていたら、</p><p><font color="#0000ff">Price　-&gt; Text　</font>と記述するとTextプロパティの値を参照することができます。</p><br><p>もしメッセージボックスに表示させたいときは、</p><p><font color="#0000ff">MessageBox::Show (Price -&gt; Text)</font>でいいみたい。</p><br><p>うん、ここまでは簡単ね。</p><br><p>F5で実行し、</p><p>実際の画面で、金額欄（オブジェクト名：Price）に1000円と入力し、追加ボタンをクリックしたら</p><p>はいっ、無事でてきました。</p><br><p>このように直接プロパティを扱うのと、</p><p>変数を扱うものがある。</p><p>変数を使うと、(　)の中が、変数だけを示せる。</p><br><p><font color="#0000ff">String^ money = Price -&gt; Text;</font></p><p><font color="#0000ff">MessageBox::Show (money);</font></p><br><p>プロパティのを変数に入れて、変数を出す</p><p>2段階を踏むわけだけど・・どうしてこうしたほうがいいんだろ？</p><p>変数を使用することによって、値に意味を持たせてコードを分かりやすくするってことだけど・・</p><p>2行になって私的には分かりにくくなったが？</p><br><p>ところで、また出てきた＾　（ハンドル）。</p><p>以前の自分のハンドルについての記事を読む。フムフム。役立つ。</p><p>でもしっかりとは分からないけどねっ。メモリよね、メモリ。</p><br><p>しかし、C++の時は、cout&lt;&lt; money; とか使っていて、何となく出たっ！って感じだったのに、</p><p>VC++になると、</p><p><font color="#0000ff">MessageBox::Show (money);</font></p><p><font color="#0000ff">って、地味よね。分かりづらい。</font></p><br><p>リストボックスに文字を追加するには、</p><br><p><font color="#ff0000">listPrice -&gt;Items-&gt;Add (out);</font></p><br><p>listPriceはリストボックスのオブジェクト名で、</p><p>これに追加するには、ItemsプロパティのAddメソッドというのを使う。</p><p>それがこれ。</p><p>Itemsプロパティは、リストボックスが持っているそれぞれの項目の集まりを表していて、</p><p>この集まりを「コレクション」という。たまに見る、コレクションって言葉。意味分からなかったけど、これなのね。このリストボックスをよく使ってるってことね。</p><br><p>お楽しみ！F5でデバッグ。</p><br><p>プログラムを実行～！</p><p>あれ、失敗。オブジェクト名のスペルが間違ってた。</p><p>修正して、成功！</p><p><br>次に、削除</p><br><p>さっき、追加のことを考えると</p><p>listPrice -&gt; Items-&gt;Delete(out);</p><p>では？と思っていたら、</p><p>どうやらそんな単純な問題ではなかったようだ。たら－</p><br><p>まずはステップがあり、</p><p>①選択している項目を取得</p><p>②次に、選択した項目を削除</p><br><p>選択した項目を取得しなきゃならんのね。</p><p>それが、</p><p><font color="#0000ff"> int index = listPrice-&gt;SelectedIndex;</font></p><br><p>ん？Selectedindexってあったっけ？</p><p>リストボックスで選択されている項目（行）の番号を「インデックス」と言います。</p><p>これを取得するには、SelectedIndexプロパティを使用します。</p><p>へー、最初からSelectされたプロパティっていうのがあるんかいな。便利やね。</p><p>しかも、さっきまでString^　使っていたのに（金額も）</p><p>intになったよ。なんで？</p><p>リストボックスのカーソル位置の取得は、何番目の項目を取得するかだから、</p><p>int　だそうな。へー。</p><br><p>int 変数　= リストボックス名　-&gt; SelectedIndex;</p><br><p>これ便利やね。</p><br><p>削除は・・リストボックス名-&gt;Items-&gt;Addの反対なのはいいのかな？</p><p>そうすると、</p><p>リストボックス名-&gt;Items-&gt;Delete</p><p>やったー近い！</p><p><font color="#0000ff">リストボックス名-&gt;Items-&gt;RemoveAt (＜インデックス＞）;</font> やって</p><br><p>追加と削除、やってみよー</p><p>できた、できた（嬉）</p><br><p><br><br><br><br><br><br></p>
]]>
</description>
<link>https://ameblo.jp/louvenck/entry-11623152327.html</link>
<pubDate>Fri, 27 Sep 2013 23:47:53 +0900</pubDate>
</item>
<item>
<title>＾ハンドルって？</title>
<description>
<![CDATA[ <p>さて、はじめるぞ、VC++。</p><br><p>ブログを書くと記録にはなるので、見直しには丁度いい。</p><p>でもつい、芸能ニュースとか見てしまう・・。反省</p><br><p>String^ name</p><p>おおーっと、出ました。</p><p>^　こんなやつ。</p><p>C++ではなかったから、VC++に出てきて、当たり前のように、</p><p>説明もほとんどなかったので、意味不明－だったけど。</p><br><p>ハンドル（＾）とは、</p><p>「<font color="#00bfff">あらかじめ記憶している領域を指し示すもの</font>」</p><br><p>なんじゃそりゃ。</p><p>ぼんやりしてる。</p><br><p>String型のハンドルを「name」という名前で宣言しています。</p><br><p>うーん、</p><p>変数の値は、直接示す方法(int num)と</p><p>ハンドルを使用して間接的に示す方法(String^ name)があります。</p><br><p>直接示す方法は、</p><p>これまでC++でやってきたから分かる。</p><p>間接的って？</p><br><p>さらにつき進める</p><p>「通常の変数は、値そのものを格納しているが、</p><p>ポインタ変数は、アドレスを格納しています。」</p><p>ふむふむ、ポインタね、それは分かっていますよ。＆ｂとかアドレスを格納する変数を入れてたもんね。</p><p>「ハンドルは、ポインタと同様にメモリの場所を示しています」</p><p>！！</p><p>そうなの！？</p><p>「ただし、ポインタはメモリの番地を直接示しますが、</p><p>ハンドルは格納されているメモリの識別子を保持しています」</p><br><p>識別子？よお分からんけど、<font color="#0000ff">とにかく、ポインタのようにメモリの場所を指すんやね</font>。</p><br><p>「大きなメモリサイズの配列やクラスなどの時、</p><p>代入のときにメモリのコピーが必要な値型より、</p><p>ポインタ変数を利用したほうが効率がいいです」</p><p><font color="#ff1493">！！</font></p><p>それで、やたら配列の時にでてきてたんや。</p><br><p>ちなみに、ハンドルは.NET Frameworkがメモリを整理し、</p><p>ポインタは解放を行う必要があるが、</p><p>ハンドルは自動的に解放が行われる。</p><br><p><font color="#0000ff">便利屋わぁ～</font></p><br><p>ハンドル変数は、宣言した直後にはどこのハンドルを示しているか分かりません。</p><p>そのため、ドコモ示していない場合はnullptr</p><p>別の変数のハンドルを代入して初期化をします。</p><br><p>なんとなぁ～く分かった、＾。</p>
]]>
</description>
<link>https://ameblo.jp/louvenck/entry-11615607682.html</link>
<pubDate>Mon, 16 Sep 2013 19:53:42 +0900</pubDate>
</item>
<item>
<title>ライブラリと配列</title>
<description>
<![CDATA[ <p>ライブラリの利用</p><br><p>ライブラリって、用意されているし利用しないとね。</p><p>こういうのを利用して短縮化して、仕事を効率化するものなんだろう。</p><br><p>ライブラリを使用する時は、</p><p>#include &lt;string&gt;</p><br><p>int main()</p><p>{</p><p> char str[];</p><p>cout&lt;&lt;"文字を入力してください\n";</p><p>cin&gt;&gt;str;</p><br><p>cout&lt;&lt;"入力した文字の長さは"&lt;&lt;strlen(str)&lt;&lt;"です。\n";</p><br><p>return 0;</p><p>}</p><br><p>なんて文字入れるか分からないからchar str[　]って空欄にしたんだけど、</p><p>これだと通らなかった。数字を入れたらOKだったけど、なんでだろ。</p><br><p>char str1[10];</p><p>char str2[10];</p><p>char str3[10];</p><br><p>strcpy(str2, "OK");</p><p>strcpy(str3, "いいよ");</p><p>strcpy(str1, str2);</p><p>strcat(str1, str3);</p><br><p>cout&lt;&lt;"str2は"&lt;&lt;str2&lt;&lt;"です。\n";</p><p>cout&lt;&lt;"str3は"&lt;&lt;str3&lt;&lt;"です。\n";</p><p>cout&lt;&lt;"連結したので"&lt;&lt;str1&lt;&lt;"です。\n";</p><br><p>return 0;</p><p>}</p><br><p>おっ、できた。面白い。コピーしたり、くっついたり。</p><p>()の1番目にコピーされるのね。簡単。</p><p>文字列のコピーや配列への格納の操作に便利っていうけど、確かに、これだといいね。</p><br>
]]>
</description>
<link>https://ameblo.jp/louvenck/entry-11611455674.html</link>
<pubDate>Wed, 11 Sep 2013 15:12:32 +0900</pubDate>
</item>
<item>
<title>ポインタは、pointer</title>
<description>
<![CDATA[ <p>ポインタと配列について</p><br><p>配列は、大体[ ]の中が空欄状態で使うらしい</p><br><p>最初から、どのくらい必要か分からないことが多いから。</p><br><p>そして、その時はポインタとめちゃくちゃ関係があるらしい。</p><br><p>それでポインタがやたらでてくるんやね。</p><p>てことは、ポインタをなおざりには決して出来ないってことだね。</p><br><p>ちなみに、ポインタとは、</p><p>その名前ズバリ、「指し示す」ということ</p><p>pointer　英語で書けばなるほどね。名の通りでした。</p><br><p>これは、目からうろこでした。</p><p>確かに、名前の通りだし、そしてやたら「指し示す」って出てくるのよ。</p><p>これが意味分からない。何その協調、みたいな。</p><br><p>やっぱり重要らしい</p><p>「指し示す」っていう概念。</p><br><p>これが分かって、ポインタ使いになれる日が近いことを祈ります。</p><br><br>
]]>
</description>
<link>https://ameblo.jp/louvenck/entry-11611411182.html</link>
<pubDate>Wed, 11 Sep 2013 14:13:01 +0900</pubDate>
</item>
<item>
<title>ポインタってなんだっけ</title>
<description>
<![CDATA[ <p>またまたピンとこないポインタに戻る</p><br><p>さて、復習をしてみよう</p><br><p>ちょこちょこ、ポインタや関数が顔を出してきて進まない。</p><br><p>なんだったけ～？っていつもなる。</p><p>さっき*をつけたな。そしたら値が出てきたな。</p><p>ふう～（一服）</p><br><p>さて、ポインタだ。<br></p><p>まず、アドレスを表すのに＆を使う。これは簡単。</p><p>int b;</p><p>b =2;</p><p>//まずはbを定義して、値を代入し、</p><br><p>cout&lt;&lt;変数bのアドレスは、&lt;&lt;&amp;b&lt;&lt;です。</p><p>はい、簡単でしょ。</p><br><p>そんで、このアドレスは簡単なんだけど、ポインタとどう関係があるかっていうと、</p><p>「アドレスを格納する特殊な変数」</p><p>むちゃむちゃ関係あるやん。</p><br><p>で、ポインタがint、doubleみたいに、pointerという変数があるわけではなく、</p><p>（pointer &amp;b　とかじゃないんだね。）</p><p>*をつけるらしい。</p><p>int* double*みたいに。</p><p>そして、ポインタ名には、</p><p>int* pB;</p><p>というようにpをつけて分かりやすくするらしい。</p><p>*がついていたらポインタか、フムフム。</p><p><br>これは、<font color="#ff0000">int型の変数のアドレスを格納できるポインタpB</font></p><br><p>と呼ばれるらしいんだけど、あれ？</p><p>int* &amp;b</p><p>ではなんだね。</p><br><p>もう一度冷静に、ポインタについて勉強しよう。</p><p>腰を据えて、よいしょっと。</p><br><p>間違ってた。早速。</p><p>int* で、ポインタを宣言するらしい。</p><p>ていうことは、</p><p>int*　がポインタだと思っていたけど、</p><p>pBの方がポインタだった。</p><p>ポインタを宣言するのにint*　とするんだった。</p><p>なんじゃそりゃっ。</p><br><p>じゃあ、</p><p>int* &amp;bなわけないやんね。</p><p>int* pBの中に、&amp;bを入れるわけや。</p><p>あー紛らわしい。</p><br><p>まずポインタを宣言して、</p><p>その中にアドレスを格納するってわけか。</p><br><p>pB = &amp;b；</p><br><p>こうすると、もちろんpBはアドレスが入った。</p><br><p>入ったところで、</p><p>ポインタは、逆をたどって、元の変数の値を知ることができるらしい</p><br><p>ここで出てくるのが、</p><p>*ポインタ名</p><p>つまり、*pBってわけだ。</p><p>配列で何気なく出てきたあの！</p><br><p>ここから先はまた今度☆</p><br><p>＊＊＊＊＊＊＊＊＊＊＊＊</p><br><p>配列の時のアドレスはnumという配列名で表すことができた。</p><br><p>ポインタは、*をつけると、それが指し示している変数の値を知ることができたけど、</p><p>配列の配列名に*をつけた時も変数の値を知ることができる</p><br><p>だから、*num　で値が分かったってわけだ。</p><br><p>double avg (int n [ ])</p><p>配列を仮引数としてn[ }とし、実引数ではnumberと配列名を使う。</p><br><p>これをポインタで表して</p><p>double avg (int* pN]</p><p>普通に仮引数をpNと定義したら</p><br><p>sum += n[i]</p><p>のところを</p><p>sum += *(pN+i);</p><p>とすると、n{i]は、*(pN+i)と同じ意味やから。</p><br><p>ポインタの演算って*(pN+i)で、</p><p>最初のn[0]の値を示すんやね。</p><br><p>なんとな～く分かりました。</p><br><p>おっし、次行ってみよー<br></p><br><br><br>
]]>
</description>
<link>https://ameblo.jp/louvenck/entry-11610066383.html</link>
<pubDate>Mon, 09 Sep 2013 14:10:49 +0900</pubDate>
</item>
<item>
<title>配列からちょっと関数に戻る</title>
<description>
<![CDATA[ <p>さらに突き進んでいこう。</p><br><p>数字を入れて、平均点を出す。</p><br><p>int num, num1, num2;</p><p>int avg;</p><p>cout&lt;&lt;"3つの数字を入れてください。\n";</p><p>cin&gt;&gt;num;</p><p>cin&gt;&gt;num1;</p><p>cin&gt;&gt;num2;</p><p>avg = (num+num1+num2)/3;</p><p>cout&lt;&lt;"平均点は"&lt;&lt;avg&lt;&lt;"です。\n";</p><br><p>普通だとこんな感じ。特に工夫はなし。</p><br><p>ちょっと工夫して、forにすると・・？</p><p>int num;</p><p>int avg;</p><p>cout&lt;&lt;"3つの数字を入れてください。\n";</p><p>for(int i = 0; i&lt;3; s++)</p><p>{</p><p>cin&gt;&gt;num;</p><p>}</p><br><p>3つ数字をいれたものの、平均点を出すには？</p><br><p>ちょっと答えを見てみる。</p><br><p>配列には値が入る。ので、配列を使って</p><br><p>int num[3];</p><p>cout&lt;&lt;"3つの数字を入れてください。\n";</p><p>for(int i = 0; i&lt;3; s++)</p><p>{</p><p>cin&gt;&gt;num[i];</p><p>}</p><br><p>こうすれば、num[0], num[1], num[2]という切り訳はできそう。</p><p>ただ、平均点は？</p><br><p>確か、足していくのは、</p><p>sum += num[i]</p><p>みたいなんでよかったような</p><br><p>それを</p><p>sum/3</p><p>で返せばいいか。</p><br><p>部分的には分かるんだけど、なかなか包括的にはいかないもんだね。</p><br><p>この足していって平均を返す、というのを関数内で表して、本文に戻している。</p><br><p>関数かぁ・・これもはっきりとは分からないものの一つ。</p><p>分からないことだらけだね。</p><br><p>ところで、平均average関数っていうのは、自分で作るのね。</p><p>よく作るからあるかと思った。</p><br><p>関数をもう一度復習しよう。</p><br><p>そもそも関数は、</p><p>繰り返し行うようなことをまとめて使う。</p><p>定義して、それを呼び出す、っていう手順を踏む<br>この関数の勉強も定義して、今配列をやっている途中なのに関数が呼び出されてるって感じかな。</p><p>複雑なものも、分けておいて呼び出すと簡単になる気がするよね。</p><br><p>関数の定義</p><p>戻り値の値　関数名　（引数リスト）</p><p>{</p><p>文</p><p>｝</p><br><p>つまり、関数の名前をつけて、引数リストっていうのを（）で括るもの</p><p>よくあるのが、</p><p>void cook()</p><p>{</p><p>cout&lt;&lt;"料理をしました。\n";</p><p>}</p><br><p>呼び出すときは、</p><p>関数名（引数リスト）;</p><p>cook();</p><p>でオッケー。最初のvoid（戻り値の値）を除けたものね。</p><br><p>()内が何もなかったけど、さっきのただ文章を呼び出すだけじゃなくて</p><p>（）には引数っていうのが入るから、これに値を入れることもある。</p><p>（）中に、定義をしておく</p><p>この値は、本文から値をもらって、関数の中に埋め込んで、本文で表示する</p><br><p>なんか、単純のような、難しいような・・</p><br><p>void eat(int x)</p><p>{</p><p>cout&lt;&lt;x&lt;&lt;"円の巨峰を食べました。\n";</p><p>｝</p><p>という風に、()内を本文で示したものを入れるようにもできる。</p><br><p>呼び出す際は、</p><p>eat(1000);</p><p>eat(398);</p><br><p>という風にすれば、</p><p>1000円の巨峰を食べました。</p><p>398円の巨峰を食べました。</p><p>となるわけ。</p><br><p>本文の1000を関数に渡してから、それをxに代入して表示してるわね</p><p>あと、関数内の（）のｘも、定義されてるね。(int x)って。</p><br><p>これは、(1000)とか入れなくても、</p><p>キーボードで入力した値にすることも可能</p><br><p>あー、折角代入するってことを覚えたのに、</p><p>キーボードで入力した値って・・やめてー</p><p>単純に考えなければ、単純に。（ブツブツ）</p><br><p>cin&gt;&gt;num;</p><p>eat(num);</p><p>これでいいみたい。食べたのはいつもの398円のブドウか、はたまた・・</p><br><p>この関数の勉強、3回はやってると思うけど、なかなか身に付かないなぁ。</p><br><p>＿＿＿＿＿＿＿＿＿＿＿＿＿＿</p><p><br>戻り値が、0以外の場合もあって、</p><p>戻り値は、</p><p>関数の定義の時に最初に設定する</p><p><font color="#ff0000">int</font> cook(int x)</p><p>ってあったら、int型のものを返すことになる。　一番最初に、</p><p>戻り値の値　関数名　（引数リスト）</p><p>って書いてあったもんね、そういえば。</p><br><p>さっきやった、本文の（)の中のものを関数に渡して、代入した関数を本文で表示、</p><p>とは逆ってことだけど？どう逆なの？</p><br><p>と、見てみると、逆っていうか、引数と逆っていう意味みたい。</p><p>引数は、本文からやってくるけど、</p><p>戻り値は、関数内のを本文に返す、っていう意味</p><p>それって逆っていうかな？まあいいや。</p><br><p>戻り値を使用するには、本文で代入演算子（＝）を使って代入する</p><br><p>sum= eat (num1, num2);</p><p>cout&lt;&lt;"合計で"&lt;&lt;sum&lt;&lt;”円の巨峰を食べました。あーおいしかった”\n;</p><br><p>むむっ、今一瞬神が降りてきた。</p><p>時々降りかけるんだけど、消える。</p><p>この関数って、関数内で定義した仮引数(int x, int y)</p><p>呼び出すときの</p><p>eat (num1, num2);</p><p>同じ数（今回だと2個）に合わせるんだけど、</p><p>そもそも本文があっての関数、っていうことになるかな。</p><p>何言ってるんだって感じだけど、本文で同表示したいからがまずあってから、</p><p>関数を作成するっていうか・・</p><p>合計のsumは、関数で(引数)としては定義してないもんね。</p><p>別のところで定義してる。</p><p>あと、　sum= eat (num1, num2);とすると、</p><p>まず関数が呼び出されて表示されてる。</p><p>sum=　は関係ないみたい。紛らわしいね。</p><p>でも、戻り値をsumに代入するには、こういう表示方法を使うみたいね。</p><br><p>関数を呼び出して　＝　が付いていたら、</p><p>返り値を使用するって覚えておけばいいかな。</p><p><br>＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊</p><br><p>さて、</p><p>さっきの平均点の話</p><p>あまりにも関数長くて、何の話だったかって感じだけど。</p><br><p>関数で平均点を出すには、</p><p>定義にて</p><p>double avg (int n[ ] )</p><p>{</p><p>for(int i = 0; i&lt;3; i++);</p><br><p>関数では、仮引数（）に、配列を使う。</p><p>ここでは(int n[ ] )としてるけど。<br></p><p>ん？ここで何するんだ？</p><p>入力してくださいっていうのは本文で、</p><p>3つの数字が入ったところで、</p><p>3つの数字を足していく、そして3で割るっていうのが関数で行うのか。</p><p>何だかややこしい気も・・</p><p>int sum += n[i];</p><p>かな？そうすれば回数ごとにn[1], n[2]・・となるから、</p><p>順番に足していける。</p><p>そして割る。</p><p>int avg = sum/3;</p><p>return avg;</p><br><p>それで、本文で、</p><p>cout&lt;&lt;"3つの合計の平均は、"&lt;&lt;avg (n[ ])&lt;&lt;"です。\n";</p><p>みたいな？</p><br><p>return avgでなく、直接　return sum/3でいいみたい</p><br><p>本文で呼び出すとき、</p><p>avg(num)として、引数として配列名を使う。配列名numだけの時は、アドレスを表す。（前回勉強）</p><p>ので、値ではなくアドレスだけが渡されていることになる。</p><br><p>avg(num)だけだと、returnが使えないので、</p><p>double res = avg(num);</p><p>として、</p><p>cout&lt;&lt;"3つの合計の平均は、"&lt;&lt;res&lt;&lt;"です。\n";</p><p>とすればよし</p><br><p>はぁーーむずかし。</p><p>でも2回目で、あと関数にも戻って少しわかった。戻り値のこととか。</p><br><p>アドレスのnumを実引数として使っている</p><p>avg(num)</p><p>っていうことは、実引数はアドレスも使えるっていうことだね。</p><p><font color="#ff0000">引数として配列を使用する時は、実引数として配列名を渡す</font></p><p>これが暗記項目となるわけだ。</p><br><p>でもそうすると、配列は先頭要素のアドレスだけを表すから、おかしい気もするけど、</p><p>これはただ単に<font color="#000000">引数として配列を使うときは、実引数として配列名を渡すから</font>使うってだけで、</p><p>細かいことは気にせず、return sum/3を戻してるってことが重要なのかね？</p><br><br>
]]>
</description>
<link>https://ameblo.jp/louvenck/entry-11610048614.html</link>
<pubDate>Mon, 09 Sep 2013 12:26:01 +0900</pubDate>
</item>
<item>
<title>配列でポインタが入れられる</title>
<description>
<![CDATA[ <p>配列とポインタの関係</p><br><p>ポインタか、ポインタね・・また越えなければならないもの</p><br><p>配列とポインタには密接な関係があるらしい</p><br><p>ポインタとは、</p><p>アドレス演算子（＆）</p><br><p>配列も、要素に＆を使うことができるらしい</p><br><p>&amp;test[0]</p><p>&amp;test[1]</p><br><p>あ、要素って、先頭のね</p><p>[ ]の中ではないのね</p><br><p>この場合、</p><p>配列の先頭要素test[0]、2番目の要素test[1]の値が格納されているアドレスを知ることができる</p><br><p>あ、要素って、各要素のことね。</p><br><p>こういう時ふと思う。</p><p>なんでアドレス知る必要があるの？</p><br><p>でも、これは私の悪い癖で。きっと。</p><p>疑問は後で、ただひたすらに脇目を見ない方がいいのだ。</p><br><p>さて、話を戻して</p><p>配列は、特別な書き方で配列要素のアドレスを表すことができる。フムフム。</p><p>「配列名」を記述しただけで、配列の先頭要素のアドレスを表すことができる</p><br><p>test</p><br><p>[]をつけたり、添え字もなし、＆演算子も不要。</p><br><p>疑問はあるものの、とりあえず練習行ってみよー</p><br><p>int test[5] = {80, 60,55, 50, 23};</p><br><p>cout&lt;&lt;"test[0]の値は"&lt;&lt;test[0]&lt;&lt;"です。\n";</p><p>cout&lt;&lt;"test[0]のアドレスは"&lt;&lt;&amp;test[0]&lt;&lt;"です。\n";</p><p>cout&lt;&lt;"test[0]の値は"&lt;&lt;test&lt;&lt;"です。\n";</p><p>cout&lt;&lt;"つまり*testの値は"&lt;&lt;*test&lt;&lt;"です。\n";</p><br><p>はい、ここまでー</p><br><p>コンパイルしてみた</p><br><p>test[0]の値は80です。<br>test[0]のアドレスは004AFCDです。<br>test[0]の値はは004AFCDです。<br>つまり*testの値は80です。</p><br><p>となった。</p><br><p>test[0] = *test =　値</p><p>&amp;test[0] = test　= アドレス</p><br><p>となっている。</p><br><p>*test　って、いきなり出てきたけど、何だっけ？</p><p>という疑問はさておき、</p><br><p>さっきやったのは、</p><p>testそのままで、アドレスを配列の場合は表せる、ってことだったから、</p><p>確かにそうなっている。</p><p>そして、*testで値を表せている</p><p>でも、最初の要素{0]の値だけど、それはいいの？</p><br><p>と思ったら、おおっ、test[1]を表すには、「＋１」とするらしい。</p><p>これは、ポインタの演算方法</p><br><p>cout&lt;&lt;"test[1]のアドレスは"&lt;&lt;test +1 &lt;&lt;"です。\n";</p><p>cout&lt;&lt;"test[1]のアドレスは"&lt;&lt;*(test+1)&lt;&lt;"です。\n";</p><br><p>コンパイルしてみる。見事にできた。</p><p>ナイス質問。*(test+1)とするのね。</p><br><p>さっきの*のはなし。</p><p>ポインタに＊を使うと、それが指し示している変数の値を知ることができる</p><p>ですって。<br></p><p>＊＊＊＊＊</p><p>まとめー</p><p>&amp;演算子で、アドレス</p><p>*演算子で値</p><br><p>配列の場合、test（例）とすると、一番最初の要素のアドレスが表示され、</p><p>*testで、一番最初の要素の値が表示される。</p><p>次の要素を表示するには、ポインタ演算で</p><p>アドレスの場合、test+1, test+2・・</p><p>値の場合、*(test+1), *(test+2)・・・</p><br><p>ただし、注意点として、通常のポインタは、他の変数のアドレスを代入することができるけど</p><p>配列の場合は他の変数のアドレスを代入することは出来ない。</p><br><p>感想：</p><p>ちょっとポインタとの関係が分かったね。</p><br><br>
]]>
</description>
<link>https://ameblo.jp/louvenck/entry-11609939860.html</link>
<pubDate>Mon, 09 Sep 2013 09:50:46 +0900</pubDate>
</item>
<item>
<title>多次元配列</title>
<description>
<![CDATA[ <p>さて、ブログを更新していない、もう一週間も経った。</p><p>ということは、一週間プログラムの勉強をしていない。ピンチ。</p><br><p>とある事情で、プログラムの優先順位が上がってしまった。</p><p>焦る気持より、手を動かさなきゃ。</p><br><p>＊＊＊＊</p><p>多次元配列</p><br><p>次は、多次元配列</p><br><p>2次元以上にハコが並んだイメージを持つ「多次元配列」を、この配列で作ることができるらしい。</p><br><p>いわゆる、エクセルの表みたいなイメージ。</p><br><p>型名　配列名 [要総数] [要素数];</p><br><p>単純に、要素数を増やせばいいってわけね。</p><p>例えば、</p><p>int test [2] [5];</p><p>こうすれば、2×5　＝10個格納ができる。</p><br><p>5人のテストが2教科（国語・数学）で、これらの値を格納し、表示をしてみよう（軽快）！</p><br><p>1番目の人の国語の点数は80点です。</p><p>1番目の人の算数の点数は89点です。</p><p>2番目の人の国語の・・</p><p>・</p><p>・</p><p>ということで、</p><p>・人でくくる</p><p>・国語、算数と続ける。</p><p>というのが条件</p><br><p>さて、はて、</p><p>まずは宣言かな</p><p>int test [2] [5];</p><p>2は国語と算数で、5は人数でしょ。</p><p>各要素の書き方は、</p><p>ちょっと久しぶりなので本を確認・・</p><p>あ、[2] [5]としたらおかしいかも。</p><p>とりあえず、</p><p>int sub = 2;</p><p>int num =5;</p><p>int test[sub] [num];</p><p>としてみよう。</p><br><p>1個の時は、</p><p>test [0] = 80</p><p>1番目の人の点数80点、としていたけど、</p><p>2つ表すには？</p><p>test[0][0] = 80</p><p>test[1][0] = 90</p><p>でいいのかな？</p><br><p>test[0][0] = 80</p><p>test[1][0] = 90</p><p>test[0][1] = 85</p><p>test[1][1] = 100</p><p>test[0][2] = 69</p><p>test[1][2] = 73</p><p>test[0][3] = 79</p><p>test[1][3] = 90</p><p>test[0][4] = 87</p><p>test[1][4] = 93</p><p>とすると、とりあえず10人分の情報は書けた。</p><br><p>1番目の人の国語の点数は80点です。</p><p>1番目の人の算数の点数は89点です。</p><p>2番目の人の国語の・・</p><p>・</p><p>・</p><p>と出力するんだから、</p><p>for(int i = 0; i &lt;5; i++);</p><p>cout&lt;&lt;i+1&lt;&lt;"番目の人の"&lt;&lt; ?? &lt;&lt;"の点数は"&lt;&lt;test[?][?]&lt;&lt;"です。"\n;</p><br><p>こう書いて疑問が出てきた。</p><p>何番目の～というのを使うにはforだわ～と得意げに気がついたところだったが</p><p>・　i番目って、2つ要素があるけど、どっちの？みたいな。</p><p>・　しかも”国語"とか”算数”　って、どうやって分かるの？</p><p>・　test[0][i]とか、一つの要素を数字使っていいの？</p><p>あれ、意外と素朴に難しい。</p><p>答えをみたい。うずうず。</p><p>でもちょっと考えよう。</p><p>トイレにて考えてみたが、</p><p>forの時、もうひとつ増やしてjとして、、とにかくよく分からないので、今回は答えを見てみることにする。</p><br><p>じゃん！！</p><br><p>はい、チラ見しました。</p><br><p>国語・算数と立て続けに書いていた。</p><p>そして、test[0][i]と、一つの要素に数字が入っていた。</p><br><p>じゃあ、そのチラ見から考えて、</p><p>for(int i = 0; i &lt;5; i++);</p><p>cout&lt;&lt;i+1&lt;&lt;"番目の人の国語の点数は"&lt;&lt;test[0][i]&lt;&lt;"です。"\n;</p><p>cout&lt;&lt;i+1&lt;&lt;"番目の人の数学の点数は"&lt;&lt;test[1][i]&lt;&lt;"です。"\n;</p><br><p>ではどうでしょー？さて、答え合わせ。</p><br><p>合ってるっぽい。</p><p>でも１つだけ、i&lt;5じゃなくて、i&lt;numになってるわ。</p><p>そうだっけ。そうだね。</p><p>じゃあこれで、コンパイルしてみよう。</p><br><p>#include&lt;iostream&gt;<br>using namespace std; </p><p>int main()<br>{<br>const int sub = 2;<br>const int num = 5;</p><p>int test[sub][num];</p><p>test[0][0] = 80;<br>test[1][0] = 90;<br>test[0][1] = 85;<br>test[1][1] = 100;<br>test[0][2] = 69;<br>test[1][2] = 73;<br>test[0][3] = 79;<br>test[1][3] = 90;<br>test[0][4] = 87;<br>test[1][4] = 93;</p><p>for(int i = 0; i&lt;num; i++)<br>{<br> cout&lt;&lt;i+1&lt;&lt;"番目の人の国語の点数は"&lt;&lt;test[0][i]&lt;&lt;"です。\n";<br> cout&lt;&lt;i+1&lt;&lt;"番目の人の数学の点数は"&lt;&lt;test[1][i]&lt;&lt;"です。\n";<br>}<br>return 0;</p><p>}</p><br><p>*****</p><p>constがあればOKだった。なんでだろ？</p>
]]>
</description>
<link>https://ameblo.jp/louvenck/entry-11608662693.html</link>
<pubDate>Sat, 07 Sep 2013 15:13:47 +0900</pubDate>
</item>
<item>
<title>for入れ子　復習</title>
<description>
<![CDATA[ <p>今日は昨日の復習でもやろう。</p><br><p>ソート自体のプログラムは、</p><p>仮置き場みたいなtempを使って入れ替えを行うことは覚えた。</p><br><p>int temp = test{t];</p><p>test[t] = test[s];</p><p>test[s] =temp[t];</p><br><p>これはよしとして、</p><p>やっぱりまだ掴めていないのがforの入れ子と、forの中身</p><br><p>前回、</p><br><p>for(int s = 0; s&lt; num-1; s++)</p><p>for(int t =s+1; t&lt;num; t++)</p><br><p>まず外側のforについて</p><p>for(int s = 0; s&lt; num-1; s++)</p><p>とした。</p><br><p>なんで</p><p>s&lt; num-1</p><br><p>なのかっていうのは、</p><p>このtest[s]は、左側に来る一番大きな値なわけで、</p><p>そうすると</p><p>比較する対象がだんだん減っていき、</p><p>５まではいかずに合計の数のマイナス１までが比較できる数となる。</p><br><p>一方、tのほうは</p><p>int t = s + 1　からスタートするのは、</p><p>test[s] = test[0]からｓはスタートするので、</p><br><p>それと比較するには</p><p>test[t] = test[1]　</p><p>とならざるを得ない。</p><br><p>Ｓ：　test[0] = 50　のとき、</p><p>Ｔ：　test [1], test [2], test[3], test[4]と比べてどうか</p><br><p>ということになる。</p><p>この時、t＜numとなるのは、まあ見ての通りだが、</p><p>[ ]要素が４までなので。</p><br><p>さて、これって分かってんのかなぁ？</p><br><p>また入れ子のは復習し続けなくてはね。</p><br><p>***</p><p>ちょっと考えて、まとめ</p><br><p>最初のforは、</p><p>比較する時、縦の場合は、全体の数-１までとなる。</p><p>次のforは、</p><p>最初のforの中の値との比較なので、</p><p>スタートは、最初のforの値＋１、そして数は、全体の数まで行う。</p><br>
]]>
</description>
<link>https://ameblo.jp/louvenck/entry-11601484812.html</link>
<pubDate>Wed, 28 Aug 2013 10:35:13 +0900</pubDate>
</item>
<item>
<title>とうとうソート</title>
<description>
<![CDATA[ <p>今日は、並び替え。</p><br><p>ずーとあまりよく分からず、腰が上がらずで逃げてきたけど、やるしかない。</p><br><p>並び替えとは、　ソート　とも呼ばれ、</p><p>入力した値を順番に大きい順に並べていく。</p><br><p>さて、連続して値をキーボード入力するには、</p><p>for(int i = 0; i&lt;5; i++)</p><p>{</p><p>cin&gt;&gt;test[i];</p><p>}</p><br><p>test[i]を先に定義しないとね。</p><p>int test[i]</p><p>ん？test[num]にして、</p><p>int num =5;</p><p>int test[num];</p><p>だっけ？</p><br><p>そしたらforの中もtest[num]??</p><p>答えを見てみる。</p><p>test[num]はtest[num]で定義してあって、</p><p>forの中はtest[i]になってる。</p><p>でも、for(int i = 0; i&lt;5; i++)じゃなくて、</p><p>for(int i = 0; i &lt;num; i++)になってるなぁ。</p><br><p>まぁ、入力は簡単として、問題はソートよね。</p><p>5個の値を入力したとして、</p><p>80、50、70、100、90</p><p>これを大きい順に並べる。</p><p>には、</p><p>一番左端とその他の値を比べて、</p><p>そのほかの値が大きければ入れ替えるようにする。</p><p>一番左端の値をtest[s]として、sが0番目のものと</p><p>他の値test[t]とを比べて入れ替え。</p><br><p>さっきのプログラムで、値は5つ入った。</p><br><p>じゃあ、0番目の値（ここでゆう80）と次の値（50）を比較するプログラムは、</p><p>test[t]&gt; test[s]</p><p>{</p><p>int temp = test[t];</p><p>test[t] = test[s];</p><p>test[s] = temp;</p><p>//tempっていう仮の空間にtest[t]の値を入れておいて、</p><p>最終的にtest[s]に入れ込むっ-ちゅう作戦</p><br><p>これで入れ替えは出来るけど、</p><p>test[s]が0番目の時、test[t]は何番目のもの？</p><br><p>for(int s = 0; s&lt;num-1; s++)</p><p>//num　=　ここでは5のこと、つまりs&lt;4となるから、sは、0～3までの4個の数となる。</p><br><p>test[t]は、test[s]よりも1つ大きい順番だとすると</p><p>for(int t = s+1; t&lt;num; t++)</p><br><p>あれ？これだと私簡単にできたじゃない。</p><p>おかしい。簡単にできるわけない。</p><br><p>まぁいいや、おさらいしよう。</p><p>80、50、70、100、90と入力して、</p><p>まずは大きな枠</p><br><p>for(int s = 0; s&lt;num-1; s++)</p><br><p>つまり、最初は、test[s] = 80 の時に、</p><p>for(int t = s+1; t&lt;num; t++)を繰り返す</p><p>最初のtest[t] = 50 だよね。</p><br><p>次に、そのループが終わったら、</p><p>最新のtest[s]で、次の順番の</p><p>test[t] = 70と比べる</p><br><p>つまりは、最新に更新されたtest[s]の値と、順番どおりの次の値とを比べるわけだ。</p><p>全部終わったら、</p><p>test[s]　= 1となって、その値と他のものと比べる。</p><p>ほほ-うまくできてる。</p><br><p>最新の値にtest[s]は更新されてるんだな。</p><p>固定かと思った。</p><br><p>test[0]　対　test[t] (1～4の数）</p><p>　　　　test[1] 　対　test[t]　(2～4の数）</p><p>　　　　　　　　　test[2] 対　test[t]　(3～4の数）</p><p>　　　　　　　　　　　　　　test[3] 対　test[t]  (4との比較)</p><br><p>う～ん、階段状が見えるようだね。</p><p>そうすると、一番左端には100が出てくるわけか。最初にやってるのは横の列ってことね。</p><br><p>最初の値　対　別の値　を表すのに、</p><p>入れ子が使われている</p><br><p>s = 0　の時、</p><p>2番目～5番目の値と1番目の値を比べる。</p><p>比べられながら、いつの間にか1番目は、大きい値に入れ替えられている</p><br><p>これが不思議なのよね、1番目の値が固定されないっていうのが</p><p>私の頭を混乱させていた理由かも。</p><br><p>さて改めて、書いてみよう。</p><br><p>#include&lt;iostream&gt;<br>using namespace std; </p><p>int main()<br>{<br>const int num = 5;<br>int test[num];</p><p>cout &lt;&lt; num &lt;&lt; "個の値を入力してください。\n";<br> for(int i=0; i&lt;num; i++)<br> {<br>  cin&gt;&gt;test[i];<br> }</p><p>for( int s=0; s&lt;num-1; s++)<br>{<br>  for(int t=s+1; t&lt;num; t++)<br>  {<br>   if(test[t] &gt; test[s])<br>   {<br>     int temp = test[t];<br>     test[t] = test[s];<br>     test[s] = temp;<br>    }<br>  }<br>}</p><p>for(int j=0; j&lt;num; j++)<br>{<br>   cout&lt;&lt;j+1&lt;&lt;"番目の値は"&lt;&lt;test[j]&lt;&lt;"です。\n";<br>}<br> return 0;<br>}</p><br><p>やったーコンパイルも通った。（testのところをtempに書き間違える凡ミスもあったけど）</p><br><p>これで、日が経っても書ければいいのだが、とりあえずＯＫってことで。</p><br><br><br><p>    </p><br><p>   </p><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
]]>
</description>
<link>https://ameblo.jp/louvenck/entry-11600916260.html</link>
<pubDate>Tue, 27 Aug 2013 14:46:45 +0900</pubDate>
</item>
</channel>
</rss>
