ページ 1 / 1
ピラミットアート
Posted: 2010年6月23日(水) 11:11
by ほかる
ピラミットアートの数値を一つ入力し、その個数分の'*'を1辺とする
正方形、三角形、逆三角形、三角旗、ダイヤ型、六角形、星形、などの描画どう作るかわからないので教えてくれませんか。
Re:ピラミットアート
Posted: 2010年6月23日(水) 11:20
by ookami
ピラミットアートとは何ですか?
環境なども回答の参考になりますので書いてください。
あと、投稿に際しては、利用規約も参考にしてください。
http://dixq.net/board/board.html
Re:ピラミットアート
Posted: 2010年6月23日(水) 11:32
by ほかる
C言語で
****
****
****
****
このようになるプログラムを入力したいのでがよくわからないので誰か教えてくれませんか。
Re:ピラミットアート
Posted: 2010年6月23日(水) 11:35
by ookami
その説明ではピラミットアートが何なのか分かりかねます。
上記の例では、「正方形、三角形、逆三角形、三角旗、ダイヤ型、六角形、星形」についても不明確です。
繰り返しますが、環境と利用規約、お願いします。
C言語
Posted: 2010年6月23日(水) 11:56
by ほかる
プログラムで実行画面が
数字(2~9)を入力してください
****
****
****
****
このように正方形に出てくるプログラムをうちたいのですがどのようにうったらいいのが
全くわからないのでこれだげで誰かわかる人いますか。
Re:C言語
Posted: 2010年6月23日(水) 12:14
by ookami
C言語といってもいろいろあります。
OSも示されていません。
ご自分でどこまでやってみたのかも分かりません。
> プログラムで実行画面が
> 数字(2~9)を入力してください
> ****
> ****
> ****
> ****
> このように正方形に出てくるプログラムをうちたい
これだけなら、
printf("数字(2~9)を入力してください \n");
printf("****\n");
printf("****\n");
printf("****\n");
printf("****\n");
でもそのようには出ますが、それでよいのでしょうか?
Re:ピラミットアート
Posted: 2010年6月23日(水) 13:16
by 通りすがり
荒らしているのはスレ主ですか?
Re:ピラミットアート
Posted: 2010年6月23日(水) 16:52
by 白い時空
例えば、辺が4の四角形ならfor文を使って、
int i,j;
for(i=0;i<4;i++){
for(j=0;j<4;j++){
printf("*");
}
printf("\n");
}
このように書けます。
三角形なら、これを応用すればできます。
他の図形はよくわからないです。
ほかるさん、
初歩的な質問なら、特に環境を書く必要はないと思いますが、
自分がどれだけC言語の知識を持っているかは、書いておくべきです。
Re:ピラミットアート
Posted: 2010年6月23日(水) 17:53
by Dixq (管理人)
> ほかるさん
> 教えろ教えろ教え教えろ教えろ教えろ教えろ教えろ教えろ教えろ教えろ教えろ教えろしねしねしねしねしねしねしねしね
このような書き込みは規約違反ですので削除致しました。
この場は答えを得る場ではなく、学び方自体を学び、スキルアップする事を目的とした場ですので、
答えのみを求める質問も厳密にいえば規約違反となってしまいます。
規約を守った利用をお願いします。
回答者の皆様が規約やほかるさんの知識量を問われているのは、質問に正確に答えようとして下さっているからです。
「すぐに答えを教えてくれないのは意地悪だ」と感じられたのかもしれませんが、むしろその逆です。
規約は円滑に情報交換が出来るようにする為に作った物なので、これに沿って頂くのがお互いの為に最善の方法なのです。
ということで・・、
ほかるさんはどの程度C言語を理解されていますか?
例えばfor文で自分の期待する結果を得るための処理を書く事は出来ますか?
> 正方形、三角形、逆三角形、三角旗、ダイヤ型、六角形、星形
これ全部ですか?
星とかは難易度がかなり高いと思いますよ・・。
Re:ピラミットアート
Posted: 2010年6月23日(水) 18:16
by 通りすがり
アンケートのコメントにまで同じ質問がありますね。
Re:ピラミットアート
Posted: 2010年6月23日(水) 19:16
by Dixq (管理人)
う、アンケートの選択肢が酷い事になってますね・・。
使ってるコンパイラyoujo studyとか、来た経路がハイハイとかブランコとか・・。
修正しますm(_ _;)m
Re:ピラミットアート
Posted: 2010年6月23日(水) 19:35
by KEYONN_
スレ主さん、落ち着いてください。
僕も今でこそ、ゲームを作れるように(なったかな?)なりましたが、
C言語のCの字も知らなかった頃、1+1の計算もC言語で出来ませんでした。
高校の頃覚えたてのC言語(YaneuraoGameScript2000)でシューティングゲームらしいゲームを
初めて作って、とても(ゲーム)プログラミングって楽しいなあと思うようになりました。
そのゲームは、スコア計算がおかしくて、ボムを撃つと敵を蹴散らせて
スコアが天文学的に跳ね上がるのですが、
スコアの表示部分にキャラクターが描画されるという面白いバグがありました。
このように、プログラミングって、自分で考えて作っていくから本来面白いと思うんですよ。
しかし、学校のテストや宿題のように、強制された環境で勉強するからいけないと思うんです。
え~っと、何がいいたいのかよく分からなくなってきましたが、
結論として、プログラミングは、本来面白いものです。自分で考えられなかったら、そこまでの
途中までの考えをこのC言語何でも掲示板に書き込んでみたら良いと思います。
あと、とりあえず、ヒントを言います。
全角の空白(□←これじゃないけど、これとする)が先に表示して、その空白は段が下になるほど
小さくなっていきます。下の図だと、3,2,1,0の順です。
□□□■
□□■■■
□■■■■■
■■■■■■■
そして、ピラミッドは1,3,5,7の順で増えていきます。
高校の頃、BASICを教えてもらったアドバイスがあります。
「プログラミング環境がなくてもプログラムを考える事が出来る。
家にパソコンがないから、家で考えてきて、学校のパソコンに打ち込む」
です。つまり、紙に書いてみて、法則を計算で導きだしてください。
電卓も使ってみてください。(関数電卓のほうが便利です)
まあ、恥ずかしながら、僕もこの問題は最近出来るようになったのですが、
参考になりそうなリンクがあります。
http://okwave.jp/qa/q4035902.html
それでは、頑張ってください。
Re:ピラミットアート
Posted: 2010年6月23日(水) 20:08
by パコネコ
>正方形、三角形、逆三角形、三角旗、ダイヤ型、六角形、星形
これって三角形だけなら(逆含む)学校の勉強で作ったことがあるのですが…
具体的にどんな形かわかりますか?
たとえば
■□□
■■□
■■■
とか
>ピラミットアートの数値を一つ入力し、その個数分の'*'を1辺とする
□□■□□
□■■■□
■■■■■
辺は3と3と5なので
条件に合いませんね
でも
■■■■■
□■■■□
□□■□□
これを合わせると
え
□□■□□
□■■■□
■■■■■
□■■■□
□□■□□
1辺が3のダイヤですね
マークを書いてみてもらえませんか?
プログラムを考えるには何を作ろうとしているのか自分でわからなければなりませんから。
Re:ピラミットアート
Posted: 2010年6月23日(水) 20:14
by パコネコ
★星?☆
☆☆☆☆★☆☆☆☆
☆☆★★★★★☆☆
☆☆☆★★★☆☆☆
☆☆★★☆★★☆☆
うまく書けない…
Re:ピラミットアート
Posted: 2010年6月23日(水) 20:38
by バグ
星は…
☆☆☆☆☆★☆☆☆☆☆
☆☆☆☆★★★☆☆☆☆
★★★★★★★★★★★
☆★★★★★★★★★☆
☆★★★★★★★★★☆
★★★★★★★★★★★
☆☆☆☆★★★☆☆☆☆
☆☆☆☆☆★☆☆☆☆☆
こんなんじゃないかな?
この手の課題で出されるのは、いわゆる六芒星が多いですし…。
Re:ピラミットアート
Posted: 2010年6月23日(水) 20:49
by パコネコ
あ~六芒星でしたか…自分からやっといてなんですが☆★で書くと見ずらいですね。
次からは□■にします
これならfor文で作れそうですね
三角形と逆三角形を同時に書くだけですから
if文いるね。
Re:ピラミットアート
Posted: 2010年6月23日(水) 23:03
by Dixq (管理人)
>次からは□■にします
"□"は" "の方が見やすいのでは?
★
★★★
★★★★★★★★★★★
★★★★★★★★★
★★★★★★★★★
★★★★★★★★★★★
★★★
★
Re:ピラミットアート
Posted: 2010年6月24日(木) 00:19
by ムンバ
こんばんはっ!
盛り上がってる?所、この様な事を言うのは大変恐縮なのですが・・・
ピラミット → ピラミッド
の間違いだと思うのですが、今更すみません。^^;
おやすみなさい~♪(∪。∪)。。。zzzZZ
---編集・追記---
↓参照ページ
http://dic.yahoo.co.jp/search?stype=0&e ... 3%E3%83%88
発音の仕方で、意味が違ってくるのかもしれませんし
もしかしたら、ピラミットアートというのが存在するのかもしれません。
勘違いでしたら、ごめんなさい。(謝
---さらに追記<(_ _)>---
ミット → 手袋
と言う意味でした。
「ピラ」を調べてみましたが、該当無しでした。^^

Re:ピラミットアート
Posted: 2010年6月24日(木) 22:29
by パコネコ
管理人さんの☆きれいにかけてますね。
ただ1辺の長さを整えないといけないんですよね。
だれかどういう形になるか書いてみてもらえませんか?
学校でも考えてたけど思いつきませんですた。
明日は検定試験なのに勉強に身が入りませんよ…
Re:ピラミットアート
Posted: 2010年6月25日(金) 00:38
by Dixq (管理人)
円に内接する三角形を60度ずらせば六芒星になると思います。
scanf("%d",&n);
for( y=-n/2; y<=n/2; y++ ){
for( x=-n/2; x<=n/2; x++ ){
if( 領域の内側 ){
printf("★");
} else {
printf(" ");
}
}
}
どれもこんな感じで出来そうですね。
領域判定式を変えてやればいいだけで。
五芒星であれば円の孤上、360/5°ずつ点を打ってやり、各2点を結ぶ直線の上か下かで領域を決めてやればよさそうですが、こちらはちょっとややこしそうですね。
考えれば何か簡単に領域を判定する式が見つかるのかもしれませんが。
Re:ピラミットアート
Posted: 2010年6月25日(金) 01:37
by 組木紙織
Dixqさんの考え方に従ってコード書いてみました。
範囲の計算は回転が扱いやすいので複素数をつかっています。
全然上手にかけていませんが、眠いのでこれくらいで我慢してください。
#C99なら複素数計算も出来たはずですが、私の環境が対応してないのでパスします。
#include <iostream>
#include <complex>
#include <cmath>
const double pai =acos(0.0)*2;
bool check1(int i,int j)
{
std::complex<double> c(i,j);
bool retFlag = true;
if(retFlag)
{
retFlag =real(c)<5*(1.0/2);
}
if(retFlag)
{
std::complex<double> d=std::polar(cos(2*pai/3), sin(2*pai/3))*c;
retFlag =real(d)<5*(1.0/2);
}
if(retFlag)
{
std::complex<double >d=std::polar(cos(-2*pai/3), sin(-2*pai/3))*c;
retFlag =real(d)<5*(1.0/2);
}
return retFlag;
}
bool check2(int i,int j)
{
std::complex<double> c(i,j);
bool retFlag = true;
c =c*std::polar(cos(pai),sin(pai));
if(retFlag)
{
retFlag =real(c)<5*(1.0/2);
}
if(retFlag)
{
std::complex<double> d=std::polar(cos(2*pai/3), sin(2*pai/3))*c;
retFlag =real(d)<5*(1.0/2);
}
if(retFlag)
{
std::complex<double >d=std::polar(cos(-2*pai/3), sin(-2*pai/3))*c;
retFlag =real(d)<5*(1.0/2);
}
return retFlag;
}
int main()
{
for(int i=-10;i<=10;i++)
{
for(int j=-10;j<=10;j++){
char ch = check2(i,j)||check1(i,j)?'*':' _';
std::cout << ch;
}
std::cout << std::endl;
}
}
Re:ピラミットアート
Posted: 2010年6月25日(金) 12:27
by KEV
パコネコさんもおっしゃっているような、
三角形と逆三角形をずらして描画する、というスタンスで書いてみました。
関数 triangle() と triangle_reverse() に
書きたい三角形のサイズと上からの距離を入れてやれば指定部にフラグが立ちます。
後はまとめて出力するといった感じ。
if文の中身がえらいややこしくなってしまった…。
この方法だと「1辺の長さ」の定義によっては正解じゃないかもしれません。
まぁ参考までにってことで。
以下コード
----------------
#include "stdafx.h"
const int CanvasSize = 17;
int setFlag[CanvasSize][CanvasSize] = {0}; // size*sizeがキャンバスの大きさ
void triangle(int size, int height)
{
if(size <= 0){
return;
}
if((size/2)+height > CanvasSize){
return;
}
int top = height;
for(int i = top; i < size; ++i){
for(int j = 0; j < size; ++j){
if(j >= (i-top) && j < (size-i+top)){
setFlag[j] = 1;
}
else{
//setFlag[j] = 0; // 塗りつぶすため0は入れない
}
}
}
return;
}
void triangle_reverse(int size, int height)
{
if(size <= 0){
return;
}
if((size/2)+height > CanvasSize){
return;
}
int bottom = (size/2) - height;
for(int i = (size-1-bottom); i >= 0; --i){
for(int j = 0; j < size; ++j){
if(j >= (size-i-1-bottom) && j <= (i+bottom)){
setFlag[j] = 1;
}
else{
//setFlag[j] = 0; // 塗りつぶすため0は入れない
}
}
}
return;
}
int _tmain(int argc, _TCHAR* argv[/url])
{
const int size = CanvasSize;
// 1辺がsizeの三角形フラグを上から3の位置にセット
triangle(size, 3);
// 1辺がsizeの反転した三角形フラグを上から0の位置にセット
triangle_reverse(size, 0); //
for(int i = 0; i < CanvasSize; ++i){
for(int j = 0; j < CanvasSize; ++j){
if(setFlag[j] == 1){
printf("*");
}
else{
printf("_");
}
}
printf("\n");
}
getchar();
return 0;
}
Re:ピラミットアート
Posted: 2010年6月25日(金) 12:31
by KEV
ちなみに出力結果はこんな感じです。
テキストで見ないと綺麗に見えないかも。
________*________
_______***_______
______*****______
*****************
_***************_
__*************__
__*************__
_***************_
*****************
______*****______
_______***_______
________*________
_________________
_________________
_________________
_________________
_________________
Re:ピラミットアート
Posted: 2010年6月25日(金) 13:08
by ココナ
答えが教えてもらえなかったら死ねとか書き込みするような質問に答え教えてしまうと拍車がかかりませんかね。
Re:ピラミットアート
Posted: 2010年6月25日(金) 15:24
by KEV
最初から答えを教えようという気があったわけではなく、
スレッドの流れを見て気分転換に作ってみたいな、と思ったから書いてみました。
スレ主さんがまだここに来てくれるとはあまり思えないですし。
こういう問題は実装をあれこれ考えている時間が楽しいし有意義かなと思います。
何かの課題なのでしょうが、課題には向いていないんじゃないかなぁ。
Re:ピラミットアート
Posted: 2010年6月25日(金) 16:02
by Dixq (管理人)
おぅKEV!元気でやってますかいの。
等間隔で表示したいときはHTMLのpreタグで囲むと良いよb
Re:ピラミットアート
Posted: 2010年6月29日(火) 01:26
by H L
ねぇ君、どうしてこんなところで学校の課題を質問してるのかな?
(不適切な表現が含まれていたので管理人が一部記事を削除致しました。
規約を守った利用をお願いいたします。)
Re:ピラミットアート
Posted: 2010年6月29日(火) 20:55
by パコネコ
KEVさんきれいにできてますね。
________*________
_______***_______
______*****______
*****************
_***************_
__*************__
__*************__
_***************_
*****************
______*****______
_______***_______
________*________
後はこれの横幅を3にすれば1辺が3の☆になりますね。
…ちょっと無理そうですね。
ここの主さんは宿題できたのでしょうか?
すごく難しいのできっと困っていたでしょうにのぞいているといいんですが…
=============
なんか崩れてる?

Re:ピラミットアート
Posted: 2010年6月29日(火) 21:02
by パコネコ
改良してみました
______*______
_____***_____
____*****____
_***********_
__*********__
___*******___
___*******___
__*********__
_***********_
____*****____
_____***_____
______*______
微妙ですね
横4マスになってるかな?
でもこれ以上は…
===========
こっちもずれちゃう…

Re:ピラミットアート
Posted: 2010年6月30日(水) 00:09
by パコネコ
再チャレンジ
ずれないように今度は自分で書く
■
■■■
■■■■■
■■■■■■■■■■■
■■■■■■■■■
■■■■■■■
■■■■■■■
■■■■■■■■■
■■■■■■■■■■■
■■■■■
■■■
■
完璧!(^_-)-☆
全部3マス!!!!
Re:ピラミットアート
Posted: 2010年6月30日(水) 00:21
by パコネコ
連続すいません
■
■■■
■■■■■
■■■■■■■■■■■
■■■■■■■■■
■■■■■■■
■■■■■■■
■■■■■■■■■
■■■■■■■■■■■
■■■■■
■■■
■
これを見本にするなら
行数 空欄 黒
1行目 5 1
2行目 4 3
3行目 3 5
4行目 0 11
5行目 1 9
6行目 2 7
7行目 2 7
8行目 1 9
9行目 0 11
10行目 3 5
11行目 4 3
12行目 5 1
という感じですね
見ての通り1~6行目までと12~7行目は同じです(さかさまだけど…
というわけでとりあえず1~6行目を作る必要があります
これだけでは規則性を導きズらいので4マスバージョンを書いてみます。
Re:ピラミットアート
Posted: 2010年6月30日(水) 00:49
by パコネコ
■
■■■
■■■■■
■■■■■■■
■■■■■■■■■■■■■■■
■■■■■■■■■■■■■
■■■■■■■■■■■
■■■■■■■■■
■■■■■■■■■■■
■■■■■■■■■■■■■
■■■■■■■■■■■■■■■
■■■■■■■
■■■■■
■■■
■
こんな感じですか?
真中は1つに変更しました
行数 空欄 黒
1 7 1
2 6 3
3 5 5
4 4 7
5 0 15
6 1 13
7 2 11
8 3 9
9 2 11
10 1 13
11 0 15
12 4 7
13 5 5
14 6 3
15 7 1
今回の場合8で反転してますね少し変更もあったので前のものも一緒に書きたいと思います。
行数 空欄 黒 空欄 黒
1 7 1 |5 1
2 6 3 |4 3
3 5 5 |3 5
4 4 7 |
5 0 15|0 11
6 1 13|1 9
7 2 11|
8 3 9 |2 7
9 2 11|
10 1 13|1 9
11 0 15|0 11
12 4 7 |
13 5 5 |3 5
14 6 3 |4 3
15 7 1 |5 1
線の右側は3マスのときです
3マスのときは縦に3行書いた後に空欄が0になりますね
そして4マスのときは4行の後0になります。
少しわかってきましたね。おそらく1行目の空欄の数もマスの2倍ー1だと思われます
これにより1辺の長さがNのとき
for(a=0;a<N;a++){
for(b=0;b<N*2-1;b++)
printf(" ");//空欄の描写
for(c=0;c<a*2+1;c++)
printf("*");//マークの描写
printf("\n");//次の行へ
}
これで1つ目です
書きズらいので一旦区切ります
Re:ピラミットアート
Posted: 2010年6月30日(水) 01:12
by パコネコ
次はさっきの後から真中までです。
5 0 15|0 11
6 1 13|1 9
7 2 11|
8 3 9 |2 7
0から始ってN回繰り返しているのがわかります
つまり空欄の数の式は0~N-1まで行うということになります
黒の数はN*4-1~(-2づつ減って)~N*4-1-2*(N-1)となり最後のを整理すると4N-2N-1+2=2N+1となります。
これで条件がそろいました
書いてみると…
for(a=0;a<N;a++){
for(b=0;b<a;b++)//空欄
printf(" ");
for(c=0;c<N*4-1-2*a;c++)
printf("*");
printf("\n");
}
aを使ったので最後の式は使いませんでした。残念ですがNを使うと値が変わってしまいますしね~
これで折り返しまでは書けるはずです…試してないですが…眠いので今日はこれで
============
間違えたので訂正

Re:ピラミットアート
Posted: 2010年6月30日(水) 12:59
by パコネコ
きのう書いたものをプログラムで書いてみますね
#include<stado.h>
void main(void){
int a,b,c;
int n;
scanf("%d",&n);
//一つ目
for(a=0;a<n;a++){
for(b=0;b<n*2-1;b++)
printf(" ");//空欄の描写
for(c=0;c<a*2+1;c++)
printf("*");//マークの描写
printf("\n");//次の行へ
}
//2つ目
for(a=0;a<n;a++){
for(b=0;b<a;b++)//空欄
printf(" ");
for(c=0;c<n*4-1-2*a;c++)
printf("*");
printf("\n");
}
//ここまでで半分
Re:ピラミットアート
Posted: 2010年6月30日(水) 13:06
by パコネコ
なんかいっぱい書いてますが間違えてたみたいです
後で修復したのを書きます
Re:ピラミットアート
Posted: 2010年6月30日(水) 13:11
by パコネコ
#include<stdio.h>
void main(void){
int a,b,c;
int n;
scanf("%d",&n);
//一つ目
for(a=0;a<n;a++){
for(b=0;b<n*2-1-a;b++)
printf(" ");//空欄の描写
for(c=0;c<a*2+1;c++)
printf("*");//マークの描写
printf("\n");//次の行へ
}
//2つ目
for(a=0;a<n;a++){
for(b=0;b<a;b++)//空欄
printf(" ");
for(c=0;c<n*4-1-2*a;c++)
printf("*");
printf("\n");
}
}
ここで半分できました。
bのループの中に‐aを書き忘れていました。
Re:ピラミットアート
Posted: 2010年6月30日(水) 13:24
by パコネコ
出来上がりです
#include<stdio.h>
void main(void){
int a,b,c;
int n;
scanf("%d",&n);
//一つ目
for(a=0;a<n;a++){
for(b=0;b<n*2-1-a;b++)
printf(" ");//空欄の描写
for(c=0;c<a*2+1;c++)
printf("*");//マークの描写
printf("\n");//次の行へ
}
//2つ目
for(a=0;a<n;a++){
for(b=0;b<a;b++)//空欄
printf(" ");
for(c=0;c<n*4-1-2*a;c++)
printf("*");
printf("\n");
}
//3つ目
for(a=n-2;0<=a;a--){
for(b=a;0<b;b--)
printf(" ");
for(c=n*4-1-2*a;0<c;c--)
printf("*");
printf("\n");
}
//4つ目
for(a=n-1;0<=a;a--){
for(b=n*2-1-a;0<b;b--)
printf(" ");//空欄の描写
for(c=a*2+1;0<c;c--)
printf("*");//マークの描写
printf("\n");//次の行へ
}
}
いくつか試しましたが3や4や5はちゃんと1辺の長さが同じになりました。
1週間もかかってしまいましたがはかるさんできましたよー
Re:ピラミットアート
Posted: 2010年6月30日(水) 13:58
by パコネコ
少し改良です
do{
scanf("%d",&n);
}while(n<2);
初めの入力のときに上の状態にしないと変な形になることがあるので…
たとえば1や0なんて打ち込まれても困ります。1辺が1の☆なんて無理です。
マイナスとかもです。
まあ、1はともかく0以下は描写されないと思いますが…
Re:ピラミットアート
Posted: 2010年6月30日(水) 14:02
by シエル
このスレ立てた主さんは何処へ…
Re:ピラミットアート
Posted: 2010年6月30日(水) 14:09
by パコネコ
1週間ぐらい見かけてないな~
Re:ピラミットアート
Posted: 2010年6月30日(水) 16:56
by dic
この人か
匿名許すとこうなるのよね
Re:ピラミットアート
Posted: 2010年6月30日(水) 19:58
by パコネコ
だれか匿名で書いてましたっけ?
Re:ピラミットアート
Posted: 2010年6月30日(水) 20:47
by ookami
すごい… 完成してる。
スレを見て分かる通り、私がほかるさんをキレさせてしまった張本人です。なんというか、すいませんでした。
それにしても、まさに「リーダー不在の開発」ですねw 私はこういうのをゲーム制作に応用できないかと… まぁ規模も違いますしね。
Re:ピラミットアート
Posted: 2010年6月30日(水) 22:17
by パコネコ
☆一つで大仕事な、きもしますけど…
一番時間かかったのって星の形の把握ですしね。
>こういうのをゲーム制作に応用…
こういうのとはみんなで考えることですか?
それともプログラム自体ですか?
こういうプログラムって楽しいですよね…考えるの
Re:ピラミットアート
Posted: 2010年7月01日(木) 07:41
by ookami
> みんなで考えることですか?それともプログラム自体ですか?
両方ですね。なんというか、言い出しっぺさえ居なくなっているのに、仕様が決まり、実装、コードレビューまで、何の取り決めもなく皆でできちゃうっていう。
そのノリで、不特定多数でゲームを作る…いやいやさすがに規模が違いすぎるから難しいか…など、その辺でモヨモヨしておりまして。
オープンソースでゲーム作れるのかっていう事ですね。
また煮詰まったらスレ立てさせてもらいますので、ご意見いただければと思っています。
Re:ピラミットアート
Posted: 2010年7月01日(木) 12:41
by パコネコ
楽しそうですね
オープンソースってなんだっけ?とか思っちゃうワイですが、
わかるものがあれば書き込みしますね。
Re:ピラミットアート
Posted: 2010年7月01日(木) 22:53
by パコネコ
> 正方形、三角形、逆三角形、三角旗、ダイヤ型、六角形、星形
まだ六角形と三角旗ができてなかったので考えようと思います。・・・実は暇なだけですけど…
まずは六角形から…
■■■
■■■■■
■■■■■■■
■■■■■■■
■■■■■■■
■■■■■
■■■
あれ?八角形?
もう一度
■
■■■
■■■■■
■■■■■
■■■■■
■■■
■
これなら六角形。(^^♪
また表にまとめたいと思います。
行 空 黒
1 2 1
2 1 3
3 0 5
4 0 5
5 0 5
6 1 3
7 2 1
結構簡単そう…
Re:ピラミットアート
Posted: 2010年7月01日(木) 23:15
by パコネコ
念のため4のときも…(さっきのは3のとき)
空 黒
■ 3 1
■■■ 2 3
■■■■■ 1 5
■■■■■■■ 0 7
■■■■■■■ 0 7
■■■■■■■ 0 7
■■■■■■■ 0 7
■■■■■ 1 5
■■■ 2 3
■ 3 1
表を合わせると
行 空 黒
|3 |1
1 2|2 1|3
2 1|1 3|5
3 0|0 5|7
4 0|0 5|7
5 0|0 5|7
|0 |7
6 1|1 3|5
7 2|2 1|3
|3 |1
こんな感じです
空欄の一つ目は「n-1」のようです。
その後「n-1」回のループの後空欄が0になるのが、n回あります。
そして「n-1」回数値が増えていくループが行われて空欄はできます。多分
次に黒ですが最初は「1」で固定でしょう。
改行ごとに2づつ増えてますね。
これを「n-1」回行います。
次に空欄が「0」のとき「n*2-1」でいいと思います。
後は反対の作業なので…次でプログラム書きます
Re:ピラミットアート
Posted: 2010年7月01日(木) 23:34
by パコネコ
なんか怒られそうな気もしてきた…(横の名前のところがパコネコばっかりになってるし)
#include<stdio.h>
void main(void){
int a,b,c,n;
do{
scanf("%d",&n);
}while(n<2);
for(a=0;a<n-1;a++){
for(b=0;b<n-1-a;b++)
printf(" ");
for(c=0;c<1+a*2;c++)
printf("*");
printf("\n");
}
for(a=0;a<n;a++){
for(b=0;b<n*2-1;b++)
printf("*");
printf("\n");
}
for(a=1;a<n;a++){
for(b=0;b<a;b++)
printf(" ");
for(c=0;c<n*2-1-2*a;c++)
printf("*");
printf("\n");
}
}
これで3と4は確認しました。
後は三角旗で終わりですね。
Re:ピラミットアート
Posted: 2010年7月01日(木) 23:39
by パコネコ
ところで三角旗ってなんですか?
■
■■
■■■
■■■■
これですか?
それとも
■
■■
■■■
■■■■
■■■
■■
■
こんなの?
よくわかりませんだれかわかりますか?
Re:ピラミットアート
Posted: 2010年7月01日(木) 23:51
by 組木紙織
下だと思います。
Re:ピラミットアート
Posted: 2010年7月02日(金) 19:49
by パコネコ
考えてみたら、下は1辺の大きさが変わらないの条件から外れてますね…
形状がわからないんじゃ作れない…だれかわかりますか?