• 締切済み

Pascalで二次元配列、手続きを使ったプログラム

Pascalで画面に円を描くプログラムを作成しています。 作成する上でいろいろ指定があって、 1.描画領域の確保 char型の二次元配列canvasを準備する  const M=20;  N=20;  var array[1..M,1..N]of char; 2.描画領域のクリア  canvasのすべてにピリオドをいれる手続きclearの作成 3.描画領域の表示  canvasの表示をする手続きdisplayを作成 4.四角を描く  canvasに*で四角を描く手続きsquareの作成  四角の一辺の長さは引数で指定する  ex) square(5); square(9);  (四角は縁を*で表示、他はピリオド なるべくcanvasの中心に) 1,2,3は出来たのですが、4がどうしてもわかりません。 教えて頂けないでしょうか。はっきりわからなければ手がかりでも構いません。

みんなの回答

  • 0x131cc6e
  • ベストアンサー率36% (42/115)
回答No.1

この場合、「四角形を描く」というのを別の言葉でいえば「*を並べて四角形に見えるようにする」ということです。 つまり*をどこに置くかをロジックで書けばよいわけです。 四角に並べるのが難しいなら、まずは引数のサイズの横線を描いてみては? それが出来たらそれを発展させて四角になるように変更する。 それが出来たら今度はセンタリング処理を加える。 少しずつ理解できる単位で潰していくといいですよ。 ※これって宿題ですか?  この問題の肝は4のロジックを考えることなので、がんばって頭を捻ってみてください。

murasakizu
質問者

お礼

解答ありがとうございます。 中心に描くっていうのがわかりにくくて。。 もうちょっと考えてみます(> <)/^^

関連するQ&A

  • Word 2003, 描画キャンバスの両側にテキストを周り込ませるには?

    Word 2003 を使っています。描画キャンパス上にオートシェイプを2,3作成しました。さて、その描画キャンバスをトリミングして一番小さいキャンバスにし、テキストの折り返しを「四角」にし、様子をみてみると、テキストが(1)左にのみ周り込むか、(2)右にのみ周り込む、のいずれかになってしまいます。つまり、キャンバスの両側に周り込むようには、どうしてもできませんでした。 方法があれば是非教えてください。

  • Photoshop: 実寸(mm)で描画するには?

    Photoshop Elementsを使っています。 カンバス(描画領域)サイズをmm単位で指定しました。このカンバスの内側3mmの所に長方形の枠線を引きたいのですが、3mmというような実寸を指定して線を引くことは可能でしょうか? 可能だとしたら、具体的には、どのようにしたら良いのでしょうか? よろしくお願いいたします。

  • 多数の図形の一括選択と描画キャンバスの左端位置変更

    Word 2010です。 (1) 多数の図形全部を一括して(つまり、1度のクリックで)選択するには、次の(a)のようにするとできます。 (a)描画キャンバス内にその多数の図形を入れて、「オブジェクトの選択」の矢印で、その多数の図形全部を含むように四角を描く(つまり、範囲指定する)。 多数の図形全部を一括して(つまり、1度のクリックで)選択する方法は、(a)以外にありますか。 (2) 文字入力領域の左端から描画キャンバスの左端を引き離すにはどうしたらいいでしょうか。つまり、文字入力領域の左端と描画キャンバスの左端との間に文字を入力するにはどうしたらいいでしょうか。 ※つまり、次の(a)と(b)の両方をしたいんです。   (a)多数の図形全部を一括して(つまり、1度のクリックで)選択する。   (b)その多数の図形の左側に文章を入れる。 Word 2003では簡単にできていたのですが.....。

  • CScrollViewの使用方法について

    VC++でCStatic型のピクチャーコントロール(例:m_StaticFlame)に線画の描画を行っています。(描画領域=表示領域) ピクチャーコントロールの表示領域には限度があるため、ワープロやCADと同じように描画領域を大きく取って一部分だけを表示し、スクロールバーで表示領域を移動させたいと考えております。 良い方法をご存じの方いらっしゃいましたら教えて頂けないでしょうか。 今の所、Class WizardでCScrollViewのクラス(CScrollViewTest)を作成し、m_StaticFlameに関連づけてスクロールバー付きの表示にしようと考えていますが、描画領域の定義からCScrollViewTestやm_StaticFlameとの関連付け、表示方法、さらにこの方法が正しいかどうかも分かりません。

  • ポインタの配列でエラーが出てしまいます。

    ポインタの配列でエラーが出てしまいます。 私は今PICというマイコン(ロボットコンテストなどで用いられるロボットの頭脳となるもの)のプログラミングをしています。ポインタの配列を使って液晶表示器に文字列を表示させるプログラムを作っているのですが、エラーが出てしまいます。 このようなプログラムです。 ・・・・ static const char *r_max[7] ={"err","750","7500","75k","750k","9.2M","20M"}; ・・・・・ Lcd_Custom_Out(1,1,err_ms[1]); ・・・・ ただし、Lcd_Custom_outはあらかじめ用意されている関数で、定義は次のようになっています。 void Lcd_Custom_Out(char row, char col, char *text); LCDとは2行16文字からなる液晶表示器で、rowで表示する行、colで左から何番目に表示するかを指定します。 そして、これが含まれたソースコードをコンパイルすると、Lcd_Custom_Outの行で、 illegal pointer conversion [?T53] to [text] というエラーが返されてしまいます。 [?T53]という部分が理解できないのですが・・・ 私はC言語はそこまで得意ではないので、何がいけないのか非常に困っています。 使用したコンパイラ「mikroC 8.2」で、ANSIに準拠しております。 大変困っております。どなたかご教授お願いいたします。

  • 描画位置について

    描画を透明化する質問をしたものですが、もう1つ教えていただきたいことがあります。 void Draw(ID3DXSprite* g_pSprite,DDXTEX* g_pTexture) { // クリア g_pd3dDevice->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, g_clrBackgroundColor, 1.0f, 0); // 描画開始 if (FAILED(g_pd3dDevice->BeginScene())) { g_pd3dDevice->Present(NULL, NULL, NULL, NULL); return; } // スプライトを描画 g_pSprite->Begin(D3DXSPRITE_ALPHABLEND); g_pSprite->Draw( g_pTexture->m_pTexture, // LPDIRECT3DTEXTURE9 pTexture NULL, // CONST RECT *pSrcRect &g_vCenter, // CONST D3DXVECTOR3 *pCenter NULL, // CONST D3DXVECTOR3 *pPosition g_pTexture->m_clrAlpha // D3DCOLOR Color ); g_pSprite->SetTransform(&g_mat); g_pSprite->End(); で描画範囲がCONST RECT *pSrcRectで、描画中心がCONST D3DXVECTOR3 *pPosition、描画位置がCONST D3DXVECTOR3 *pPositionのはずなのですが描画範囲も描画中心、描画位置も思い通りいきません。 描画範囲、中心、位置を指定するにはどうすればいいのでしょうか?

  • Photoshopで指定したサイズで四角などを作る方法

    Photoshopで指定したサイズで四角などを作る方法 現在Photoshop CS2で画像を作成しているのですが決まったサイズで四角や丸などを作る方法がわかりません。色々と調べてみたのですが、カンバスサイズの変更などはあるのですが、その中に存在するパーツ?のサイズ指定方法がわかりません。 たとえばカンバスサイズは800×800pxだとします。 その中に、200×200pxの四角を作るにはどこでサイズなどを定義すればよいのでしょうか。 指定方法をご存知の方いらっしゃいましたらアドバイス頂けると助かります。 宜しくお願いします。

  • iアプリ作成 画像を描画できない

    最初に4つのメニューを表示し、メニュー1を選ぶとある画像を表示し、メニュー2を選ぶとまた別の画像を表示する様なiアプリを作成しています。 その作り方が、メニュー1を選ぶと Manu1Canvas c = new Menu1Canvas(); Display.setCurrent(c); c.exe(); という感じでMenu1Canvasクラスのexe()の内容を実行し画像を描画しています。この時Menu1CanvasはCanvasを継承しておりpaint()メソッドを使い描画をしています。 メニュー2を選んだ場合も同じように、Canvasを継承したクラスで画像を描画しています。 このようにそれぞれのメニュー4つにクラスを作り、その4つのクラスにCanvasを継承させpaint()メソッドを使い画像を描画するという処理内容はおかしいのでしょうか?このようにやるとなぜか画面を切り替える時にDojaエミュレータが終了してしまいます。

    • ベストアンサー
    • Java
  • WORDで「描画をここに作成します」を表示しないようにするには

    Microsoft Office Word 2003を使用しています。 図形(直線、矢印、四角、楕円 など)を描こうとすると、「描画をここに作成します」というのが表示されます。この「描画をここに作成します」を表示させない様にするには、どう設定すればよろしいですか?

  • 何故か拡大表示されます

    最新版のDirectX SDKでゲームを作っています。 プログラムの勉強もつい先日始めたばかりで何もわかりませんが、よろしくお願いします。 さてお尋ねしたいのですが。 スプライトを描画したとき、何故か元のサイズより拡大されて表示されてしまうのですが、どうしてでしょうか。 48x48のddsファイルなのですが、64x64の大きさに認識されているようです。 RECTで表示領域を48x48と指定しているのですが、少し切れてしまっています。 描画するにあたっては、ごく単純なコードしか書いていません。 CTextureでファイルを読み込み、D3DXVECTOR2で位置を、、RECTで表示領域を指定。 D3DXMATRIXでマトリックスを作成し、ID3DXSpriteで描画しているだけです。 拡大して表示させるような変なコードは書いていないはずですが…