ピラミッドアートwhile文→for文へ
ピラミッドアートwhile文→for文へ
プログラムを作ることに意味がある・・・作り続け約6時間。自分の理解力のなさに絶望しました。
友達が参考にしてくれたプログラムや教科書を比べ合わせ、wordで文章作成までして作ったのですが、
まったく自分は理解できていないようです。なんとかできると思ったのですが、
皆さん。本当に申し訳ありません。もう一度お願いいたします。
私は、visual stdio2008を使っています。
友達が教えてくれた四角形のwhile文のピラミッドアートがあります。
#include<stdio.h>
void main(void)
{
int gyou,retu,atai;
printf("数字を入力してください");
scanf("%d",&atai);
gyou=0;①カウンタの初期化
while(gyou<atai)②条件式
{
retu=0;①カウンタの初期化
while(retu<atai){②条件式
printf("*");④条件満たした場合の処理
retu++;③→②カウンタの増減式+1,-1
}
printf("\n");④条件満たした場合の処理
gyou++;③→②カウンタの増減式+1,-1
}
}
これは、友達が教えてくれたものなので、きちんと四角形が表示されました。
そして、これをfor文に作り変えたいと思い、自分で作り変えたところ・・・{や、;のエラーが大量発生と
悲惨なことになってしまいました。
恐らくまったく、理解できてないと思いながらも、自分でwhile文を参考にfor文を作ってみました。
(①などの説明は私が書いたものなので、友達が間違えているわけではありません。)
けれど、どこが違うのか全くわからないんです。
for文
#include<stdio.h>
void main(void)
{
int gyou,retu,atai,;
for(gyou=0;gyou <atai;gyou ++)
{
for(retu=0;retu<=3;retu++)
printf(“*”);
}
printf("\n");
}
とりあえず、while文からにた箇所を抜粋して、そのままfor文に張り付けるという、自分でなんて考え方なんだと思うのですが、これ以上考え方が分からないのです。
本当に、全く理解力の乏しい物で申し訳ありません。
今日ずっと作っているのですが、、やはり自分で作ることができませんでした。
友達が参考にしてくれたプログラムや教科書を比べ合わせ、wordで文章作成までして作ったのですが、
まったく自分は理解できていないようです。なんとかできると思ったのですが、
皆さん。本当に申し訳ありません。もう一度お願いいたします。
私は、visual stdio2008を使っています。
友達が教えてくれた四角形のwhile文のピラミッドアートがあります。
#include<stdio.h>
void main(void)
{
int gyou,retu,atai;
printf("数字を入力してください");
scanf("%d",&atai);
gyou=0;①カウンタの初期化
while(gyou<atai)②条件式
{
retu=0;①カウンタの初期化
while(retu<atai){②条件式
printf("*");④条件満たした場合の処理
retu++;③→②カウンタの増減式+1,-1
}
printf("\n");④条件満たした場合の処理
gyou++;③→②カウンタの増減式+1,-1
}
}
これは、友達が教えてくれたものなので、きちんと四角形が表示されました。
そして、これをfor文に作り変えたいと思い、自分で作り変えたところ・・・{や、;のエラーが大量発生と
悲惨なことになってしまいました。
恐らくまったく、理解できてないと思いながらも、自分でwhile文を参考にfor文を作ってみました。
(①などの説明は私が書いたものなので、友達が間違えているわけではありません。)
けれど、どこが違うのか全くわからないんです。
for文
#include<stdio.h>
void main(void)
{
int gyou,retu,atai,;
for(gyou=0;gyou <atai;gyou ++)
{
for(retu=0;retu<=3;retu++)
printf(“*”);
}
printf("\n");
}
とりあえず、while文からにた箇所を抜粋して、そのままfor文に張り付けるという、自分でなんて考え方なんだと思うのですが、これ以上考え方が分からないのです。
本当に、全く理解力の乏しい物で申し訳ありません。
今日ずっと作っているのですが、、やはり自分で作ることができませんでした。
Re:ピラミッドアートwhile文→for文へ
6時間ぶっつけでやっているなら一息休憩することをお勧めします
休憩後、やりたいことを紙にいったん書いてから
自分で自分に説明できてから
プログラムにするのがいいです
休憩後、やりたいことを紙にいったん書いてから
自分で自分に説明できてから
プログラムにするのがいいです
Re:ピラミッドアートwhile文→for文へ
{}が閉じられていない~
#include<stdio.h>
void main(void)
{
int gyou,retu,atai,;
for(gyou=0;gyou <atai;gyou ++)
{
for(retu=0;retu<=3;retu++) {
printf(“*”);
}
printf("\n");
}
}
前からある奴:黒、黄、ライム
付けくわえた奴:アクア、赤、青
対応する{}からーは↑の順番通り
色付けたほうが分かりやすいかな?と思ってつけて、
付けくわえた奴と前の奴分けたほうがいいかな?とか思ったら逆に見づらくなったかもしれない…
#include<stdio.h>
void main(void)
{
int gyou,retu,atai,;
for(gyou=0;gyou <atai;gyou ++)
{
for(retu=0;retu<=3;retu++) {
printf(“*”);
}
printf("\n");
}
}
前からある奴:黒、黄、ライム
付けくわえた奴:アクア、赤、青
対応する{}からーは↑の順番通り
色付けたほうが分かりやすいかな?と思ってつけて、
付けくわえた奴と前の奴分けたほうがいいかな?とか思ったら逆に見づらくなったかもしれない…
Re:ピラミッドアートwhile文→for文へ
四角系のピラミッドアートですと
3と入力したら、縦横3で*が
***
***
***
と表示されます。(当たり前ですが)
もう一つのスレッドも少し見ましたが、リクさんがどこまで理解できているのか私には分かりません。
なので、whileからforに書き直すのが困難なのであれば、それぞれの意味や条件式を順を追って考えてみるといいと思います。
while文ですと
while(条件式){
処理内容
gyou++;
}
となります。
リクさんのコードでは
while(gyou<atai){
処理内容
gyou=gyou+1;
}
・ataiはユーザーに入力させる
・gyouを0に初期化する
・gyou++(gyou=gyou + 1と同じ意味)でgyouを1ずつ増やしていく
となっています。
ここで例えばユーザーが3と入力した場合、ataiに3が入ります。
また、gyouを初期化しているのでgyouに0が入ります。
これをwhile文の条件式にに数値で表してみると
while(0<3){
処理内容
gyou=gyou+1;
}
となります。
条件式が成り立っているのでまず1回目の処理が行われます。
処理内容にgyou=gyou+1とありますのでgyouが1になります。
すると次のwhile文は
while(1<3){
処理内容
gyou=gyou+1;
}
となります。
このように1つずつ増えていくといずれ・・・
while(4<3){
処理内容
gyou=gyou+1;
}
となると思います。
こうなると条件式が合っていないので、while文が抜けることになります。
これくらい分かるよ!と感じたのなら、余計なお節介だと思って下さい^^
長文失礼しました。頑張ってください。
3と入力したら、縦横3で*が
***
***
***
と表示されます。(当たり前ですが)
もう一つのスレッドも少し見ましたが、リクさんがどこまで理解できているのか私には分かりません。
なので、whileからforに書き直すのが困難なのであれば、それぞれの意味や条件式を順を追って考えてみるといいと思います。
while文ですと
while(条件式){
処理内容
gyou++;
}
となります。
リクさんのコードでは
while(gyou<atai){
処理内容
gyou=gyou+1;
}
・ataiはユーザーに入力させる
・gyouを0に初期化する
・gyou++(gyou=gyou + 1と同じ意味)でgyouを1ずつ増やしていく
となっています。
ここで例えばユーザーが3と入力した場合、ataiに3が入ります。
また、gyouを初期化しているのでgyouに0が入ります。
これをwhile文の条件式にに数値で表してみると
while(0<3){
処理内容
gyou=gyou+1;
}
となります。
条件式が成り立っているのでまず1回目の処理が行われます。
処理内容にgyou=gyou+1とありますのでgyouが1になります。
すると次のwhile文は
while(1<3){
処理内容
gyou=gyou+1;
}
となります。
このように1つずつ増えていくといずれ・・・
while(4<3){
処理内容
gyou=gyou+1;
}
となると思います。
こうなると条件式が合っていないので、while文が抜けることになります。
これくらい分かるよ!と感じたのなら、余計なお節介だと思って下さい^^
長文失礼しました。頑張ってください。
Re:ピラミッドアートwhile文→for文へ
ぴよぴよさん>while文についてとても分かりやすい説明、ありがとうございます。
どこまで、わからないか・・・ですか、本当に恥ずかしいのですが、
ただ単に教科書のプログラムを打っているという感じで、このように、課題でピラミッドアートを作れと出題されても、先生や友達がヒントを下さらなければ、whileやforも思い浮かびませんでした。最初はループなのでは?と全く見当違いな方向に進んでいました。
いえいえ、本当に余計なお節介なんてとんでもないです。
もし、よろしければ、for文について教えていただけると助かります。友達が教えてくれた(記載しているwhile文は実行するときちんと四角形が表示されるのですが)これを元に自分で考えたfor文がエラーが大量表示されてしまい、全くもって手がつきません。ほかの皆様の回答をもとに作りなおしてみたのですが、エラー表示のままですし、自分の作ったfor文が見当違いと予測はつくのですが、どこが違うのか・・・
while文をfor文に作り直す方法を教えてくださると助かります。
どこまで、わからないか・・・ですか、本当に恥ずかしいのですが、
ただ単に教科書のプログラムを打っているという感じで、このように、課題でピラミッドアートを作れと出題されても、先生や友達がヒントを下さらなければ、whileやforも思い浮かびませんでした。最初はループなのでは?と全く見当違いな方向に進んでいました。
いえいえ、本当に余計なお節介なんてとんでもないです。
もし、よろしければ、for文について教えていただけると助かります。友達が教えてくれた(記載しているwhile文は実行するときちんと四角形が表示されるのですが)これを元に自分で考えたfor文がエラーが大量表示されてしまい、全くもって手がつきません。ほかの皆様の回答をもとに作りなおしてみたのですが、エラー表示のままですし、自分の作ったfor文が見当違いと予測はつくのですが、どこが違うのか・・・
while文をfor文に作り直す方法を教えてくださると助かります。
Re:ピラミッドアートwhile文→for文へ
考え方も悪くないし、イージーミスが非常に惜しいですね。
例えば↓これですが
while(retu<atai)
for文に直すのは簡単です
for(;retu<atai;) //whileとまったく同じ意味です、これで動きます
後は想像された通り、retu(カウンタ変数)をfor文に取り込みます
for(retu=0;retu<atai;)//この形でも動きます
次にretu(カウンタ変数)の更新文を取り込みます
for(retu=0;retu<atai; retu++) //見なれた形になりました
例えば↓これですが
while(retu<atai)
for文に直すのは簡単です
for(;retu<atai;) //whileとまったく同じ意味です、これで動きます
後は想像された通り、retu(カウンタ変数)をfor文に取り込みます
for(retu=0;retu<atai;)//この形でも動きます
次にretu(カウンタ変数)の更新文を取り込みます
for(retu=0;retu<atai; retu++) //見なれた形になりました
Re:ピラミッドアートwhile文→for文へ
ぴよぴよさん>
もう一度、やってみました。
#include<stdio.h>
void main(void)
{
int gyou,retu,atai,;
printf("数字を入力してください");
scanf("%d",&atai);
for(gyou=0;gyou <atai;gyou ++)
{
for(retu=0;retu<atai;retu++)
{
printf(“*”);
}
printf("\n");
}
}
------ すべてのリビルド開始: プロジェクト: pp, 構成: Debug Win32 ------
プロジェクト 'pp'、構成 'Debug|Win32' の中間出力ファイルを削除しています。
コンパイルしています...
po.cpp
c:\users\documents\cl11\pp\pp\po.cpp(7) : error C2146: 構文エラー : ';' が、識別子 'printf' の前に必要です。
c:\users\documents\cl11\pp\pp\po.cpp(8) : error C2065: 'atai' : 定義されていない識別子です。
c:\users\documents\cl11\pp\pp\po.cpp(10) : error C2065: 'gyou' : 定義されていない識別子です。
c:\users\documents\cl11\pp\pp\po.cpp(10) : error C2146: 構文エラー : ';' が、識別子 ';gyou' の前に必要です。
c:\users\documents\cl11\pp\pp\po.cpp(10) : error C2065: ';gyou' : 定義されていない識別子です。
c:\users\documents\cl11\pp\pp\po.cpp(10) : error C2065: 'atai;gyou' : 定義されていない識別子です。
c:\users\documents\cl11\pp\pp\po.cpp(10) : error C2143: 構文エラー : ';' が ')' の前にありません。
c:\users\documents\cl11\pp\pp\po.cpp(12) : error C2065: 'retu' : 定義されていない識別子です。
c:\usersdocuments\cl11\pp\pp\po.cpp(12) : error C2146: 構文エラー : ';' が、識別子 ';retu' の前に必要です。
c:\users\documents\cl11\pp\pp\po.cpp(12) : error C2065: ';retu' : 定義されていない識別子です。
c:\users\documents\cl11\pp\pp\po.cpp(12) : error C2065: 'atai;retu' : 定義されていない識別子です。
c:\users\documents\cl11\pp\pp\po.cpp(12) : error C2143: 構文エラー : ';' が ')' の前にありません。
c:\users\documents\cl11\pp\pp\po.cpp(14) : error C2065: '“*”' : 定義されていない識別子です。
c:\users\documents\cl11\pp\pp\po.cpp(15) : error C2146: 構文エラー : ';' が、識別子 ';' の前に必要です。
c:\users\documents\cl11\pp\pp\po.cpp(15) : error C2065: ';' : 定義されていない識別子です。
c:\users\documents\cl11\pp\pp\po.cpp(15) : error C2143: 構文エラー : ';' が '}' の前にありません。
ビルドログは "file://c:\Users\Documents\CL11\pp\pp\Debug\BuildLog.htm" に保存されました。
pp - エラー 16、警告 0
========== すべてリビルド: 0 正常終了、1 失敗、0 スキップ ==========
作ってみたところ、エラーが17個中、16個になりました。
もう一度、やってみました。
#include<stdio.h>
void main(void)
{
int gyou,retu,atai,;
printf("数字を入力してください");
scanf("%d",&atai);
for(gyou=0;gyou <atai;gyou ++)
{
for(retu=0;retu<atai;retu++)
{
printf(“*”);
}
printf("\n");
}
}
------ すべてのリビルド開始: プロジェクト: pp, 構成: Debug Win32 ------
プロジェクト 'pp'、構成 'Debug|Win32' の中間出力ファイルを削除しています。
コンパイルしています...
po.cpp
c:\users\documents\cl11\pp\pp\po.cpp(7) : error C2146: 構文エラー : ';' が、識別子 'printf' の前に必要です。
c:\users\documents\cl11\pp\pp\po.cpp(8) : error C2065: 'atai' : 定義されていない識別子です。
c:\users\documents\cl11\pp\pp\po.cpp(10) : error C2065: 'gyou' : 定義されていない識別子です。
c:\users\documents\cl11\pp\pp\po.cpp(10) : error C2146: 構文エラー : ';' が、識別子 ';gyou' の前に必要です。
c:\users\documents\cl11\pp\pp\po.cpp(10) : error C2065: ';gyou' : 定義されていない識別子です。
c:\users\documents\cl11\pp\pp\po.cpp(10) : error C2065: 'atai;gyou' : 定義されていない識別子です。
c:\users\documents\cl11\pp\pp\po.cpp(10) : error C2143: 構文エラー : ';' が ')' の前にありません。
c:\users\documents\cl11\pp\pp\po.cpp(12) : error C2065: 'retu' : 定義されていない識別子です。
c:\usersdocuments\cl11\pp\pp\po.cpp(12) : error C2146: 構文エラー : ';' が、識別子 ';retu' の前に必要です。
c:\users\documents\cl11\pp\pp\po.cpp(12) : error C2065: ';retu' : 定義されていない識別子です。
c:\users\documents\cl11\pp\pp\po.cpp(12) : error C2065: 'atai;retu' : 定義されていない識別子です。
c:\users\documents\cl11\pp\pp\po.cpp(12) : error C2143: 構文エラー : ';' が ')' の前にありません。
c:\users\documents\cl11\pp\pp\po.cpp(14) : error C2065: '“*”' : 定義されていない識別子です。
c:\users\documents\cl11\pp\pp\po.cpp(15) : error C2146: 構文エラー : ';' が、識別子 ';' の前に必要です。
c:\users\documents\cl11\pp\pp\po.cpp(15) : error C2065: ';' : 定義されていない識別子です。
c:\users\documents\cl11\pp\pp\po.cpp(15) : error C2143: 構文エラー : ';' が '}' の前にありません。
ビルドログは "file://c:\Users\Documents\CL11\pp\pp\Debug\BuildLog.htm" に保存されました。
pp - エラー 16、警告 0
========== すべてリビルド: 0 正常終了、1 失敗、0 スキップ ==========
作ってみたところ、エラーが17個中、16個になりました。
Re:ピラミッドアートwhile文→for文へ
>>リクさん
全角のセミコロン(;)や、ダブルクォーテーション(””)が使われてる見たいですので
半角に直してみましょう。
[color=gray>> int gyou,retu,atai,; [/color]
atai の後の , も要らないので消してみて下さい。
全角のセミコロン(;)や、ダブルクォーテーション(””)が使われてる見たいですので
半角に直してみましょう。
[color=gray>> int gyou,retu,atai,; [/color]
atai の後の , も要らないので消してみて下さい。
Re:ピラミッドアートwhile文→for文へ
テスト用変数
int lcnt = 0; //ループ用のカウンター
int max = 10; //ループする回数の上限
whileとforの違い
whileの場合
while( lcnt < max ){ //(lcntがmax以上になるまでループ)
lcnt = lcnt + 1; //カウンターを1増やします(lcnt++と同じ)
}
forの場合
for(lcnt = 0; lcnt < max; lcnt++){
}
簡単に書くと
forの場合はループ用のカウンターをループ内に書かなくてOKだし
ループ用の変数の初期値を決められる(lcnt = 0でも1でもok;)
別に入れなくておkならそこは省いて ; でOK
だからwhile→forにするのであれば、while内で回しているカウンターを消して
for文の中に入れてしまえばいい
int lcnt = 0; //ループ用のカウンター
int max = 10; //ループする回数の上限
whileとforの違い
whileの場合
while( lcnt < max ){ //(lcntがmax以上になるまでループ)
lcnt = lcnt + 1; //カウンターを1増やします(lcnt++と同じ)
}
forの場合
for(lcnt = 0; lcnt < max; lcnt++){
}
簡単に書くと
forの場合はループ用のカウンターをループ内に書かなくてOKだし
ループ用の変数の初期値を決められる(lcnt = 0でも1でもok;)
別に入れなくておkならそこは省いて ; でOK
だからwhile→forにするのであれば、while内で回しているカウンターを消して
for文の中に入れてしまえばいい
Re:ピラミッドアートwhile文→for文へ
シエルさん>教えてくださりありがとうございます。確かにありました。助かりました!
DVDMさん>本当にありがとうございます。朝からずっとやっているせいなのか、
全角など全く考えもしませんでした。
DVDMさんのおかげで、エラーがなくなりました。
シエルさんや、DVDMさんに教えていただきやった結果。
#include<stdio.h>
void main(void)
{
int gyou,retu,atai;
for(gyou=0;gyou <atai;gyou ++)
{
for(retu=0;retu<atai; retu++) {
printf("*");
}
printf("\n");
}
}
------ すべてのリビルド開始: プロジェクト: nnn, 構成: Debug Win32 ------
プロジェクト 'nnn'、構成 'Debug|Win32' の中間出力ファイルを削除しています。
コンパイルしています...
ppp.cpp
c:\users\documents\nnn\nnn\ppp.cpp(6) : warning C4700: 初期化されていないローカル変数 'atai' が使用されます
マニフェストをリソースにコンパイルしています...
Microsoft (R) Windows (R) Resource Compiler Version 6.0.5724.0
Copyright (C) Microsoft Corporation. All rights reserved.
リンクしています...
LINK : 前回のインクリメンタル リンクで C:\Users\Documents\\nnn\Debug\nnn.exe が見つからなかったか、ビルドされませんでした。フル リンクを行います。
マニフェストを埋め込んでいます...
Microsoft (R) Windows (R) Resource Compiler Version 6.0.5724.0
Copyright (C) Microsoft Corporation. All rights reserved.
ビルドログは "file://c:\Users\Documents\\nnn\nnn\Debug\BuildLog.htm" に保存されました。
nnn - エラー 0、警告 1
========== すべてリビルド: 1 正常終了、0 失敗、0 スキップ ==========
と表示され、エラーはなくなったのですが、デバックエラーが発生してしまいます。
DVDMさん>本当にありがとうございます。朝からずっとやっているせいなのか、
全角など全く考えもしませんでした。
DVDMさんのおかげで、エラーがなくなりました。
シエルさんや、DVDMさんに教えていただきやった結果。
#include<stdio.h>
void main(void)
{
int gyou,retu,atai;
for(gyou=0;gyou <atai;gyou ++)
{
for(retu=0;retu<atai; retu++) {
printf("*");
}
printf("\n");
}
}
------ すべてのリビルド開始: プロジェクト: nnn, 構成: Debug Win32 ------
プロジェクト 'nnn'、構成 'Debug|Win32' の中間出力ファイルを削除しています。
コンパイルしています...
ppp.cpp
c:\users\documents\nnn\nnn\ppp.cpp(6) : warning C4700: 初期化されていないローカル変数 'atai' が使用されます
マニフェストをリソースにコンパイルしています...
Microsoft (R) Windows (R) Resource Compiler Version 6.0.5724.0
Copyright (C) Microsoft Corporation. All rights reserved.
リンクしています...
LINK : 前回のインクリメンタル リンクで C:\Users\Documents\\nnn\Debug\nnn.exe が見つからなかったか、ビルドされませんでした。フル リンクを行います。
マニフェストを埋め込んでいます...
Microsoft (R) Windows (R) Resource Compiler Version 6.0.5724.0
Copyright (C) Microsoft Corporation. All rights reserved.
ビルドログは "file://c:\Users\Documents\\nnn\nnn\Debug\BuildLog.htm" に保存されました。
nnn - エラー 0、警告 1
========== すべてリビルド: 1 正常終了、0 失敗、0 スキップ ==========
と表示され、エラーはなくなったのですが、デバックエラーが発生してしまいます。
Re:ピラミッドアートwhile文→for文へ
ででで・・・できました!!シエルさん指摘ありがとうございました!
今日、ずっとプログラムを作り続けて、9時間・・・
皆様のおかげでなんとか報われました。
本当に、ありがとうございます。
私は、本当にC言語が苦手で、他の質問サイト様にも質問などさせていただいていたのですが、
馬鹿じゃないの?そんなこともできないなんて、学校辞めたほうがいいんじゃない?など、
言われ、かなり凹んでいました。
けれど、皆様はこんな私のために、最後までアドバイスしてくださいました。
本当にありがとうございます。全くC言語を理解していない私に付き合ってくださり、
言葉で言い尽くせないほど、感謝の気持ちでいっぱいです。
また、質問に来た時には、教えていただけると嬉しいです。
今日、ずっとプログラムを作り続けて、9時間・・・
皆様のおかげでなんとか報われました。
本当に、ありがとうございます。
私は、本当にC言語が苦手で、他の質問サイト様にも質問などさせていただいていたのですが、
馬鹿じゃないの?そんなこともできないなんて、学校辞めたほうがいいんじゃない?など、
言われ、かなり凹んでいました。
けれど、皆様はこんな私のために、最後までアドバイスしてくださいました。
本当にありがとうございます。全くC言語を理解していない私に付き合ってくださり、
言葉で言い尽くせないほど、感謝の気持ちでいっぱいです。
また、質問に来た時には、教えていただけると嬉しいです。