私は、ある大学に通う二年生です。実は、授業でC言語のプログラミングの授業があるのですが、includeとか、for文とか、とにかくそこに出てくる用語も全然と言っても良いぐらい分からないし、それにその科目を教えている先生から課題が出されました。
 その課題というのは、以下の問題です。誰か僕に力をください。
 お願いします。 
 問
   正の整数1から10までの範囲でパスカルの三角形を画面上に出力するプログラムを作り、さらにその三角形をもう一つ組み合わせてひし形を作り、ひし形が出力できるように補修せよ。
 (注)「使用できる配列は、1次元に限る」という条件を守って作ること。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

> includeとか、for文とか、とにかくそこに出てくる用語も全然と言っても良いぐらい


> 分からない

というところへ、ソースを提示して理解が深まるのかどうか、あやしいですが、
ちょっと書いてみましたので、読んでみます?

#include <iostream.h>
#include <iomanip.h>

#define KETA  3

void get_pascal_triangle_line(int n, int x[])
{
  int i;
  if (n == 1) {
    x[0] = 1;
    return;
  }
  int* xx;
  xx = new int [n - 1];
  get_pascal_triangle_line(n - 1, xx);
  x[0] = xx[0];
  for (i = 1 ; i < n - 1 ; ++i)
  {
    x[i] = xx[i - 1] + xx[i];
  }
  x[n-1] = xx[n-2];
  delete [] xx;
}

void print_pascal_triangle_line(int n, int x[])
{
  int i;
  for (i = 0 ; i < n ; ++i)
  {
    cout << setw(KETA) << x[i];
  }
  cout << endl;
}

int get_max_value(int n, int x[])
{
  int i;
  int mx = x[0];
  for (i = 1; i < n ; ++i)
  {
    if (mx < x[i])
      mx = x[i];
  }
  return mx;
}

int main()
{
  int a[100];
  int n, i;
  n = 1;

  /* 10 が出てくるまでパスカルの三角形を書く */
  do
  {
    get_pascal_triangle_line(n, a);
    print_pascal_triangle_line(n, a);
  } while (get_max_value(n++, a) < 10);

  /* 下半分の三角形を書いてひし形に見せる */
  for (i = n - 2 ; i > 0 ; --i)
  {
    get_pascal_triangle_line(i, a);
    int j;
    for (j = 1 ; j < n - i ; ++j)
      cout << setw(KETA) << " ";
    print_pascal_triangle_line(i, a);
  }

  return 0;
}

ひし形が歪んでいるのと、パスカルの三角形に 10 が出て来るということを
前提に書いちゃってますけど。


私の説明する気を殺がない程度に自分で調べてみてから、分からないところが
あれば、遠慮せずに聞いてください。反応はすぐ返せないかもしれないけど、
それなりに説明をする気はあります。


# 因みに、このソースは C++ で書きましたので、このまま提出しても
# 通るとは思えません
    • good
    • 0

うーん、プログラム組むのは簡単だけど、数式が理解できないや...


と言う事で下記を参考にどうぞ。

あと、もう少しカテゴリを考えて質問しないと、良い答えも返ってこないよ。

参考URL:http://www.geocities.co.jp/SiliconValley-Oakland …
    • good
    • 0

C言語はあるていどできます。


私の頭の悪さから、問いの意味がよくわかりません。
ごめんなさい。
最終的にどう出力されれば良いのですか?
   1
  2 2
 3 3 3
4…
ってことですか?
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qイラストレータで菱形(ひし形)が書きたい

イラストレータでデザインしてるのですが、菱形の作成ツールが見つからなくてどうやって書いたらいいでしょう?
横の線と縦の線を書いて整列してからつないで行こうと思ったのですが、細い線ならそれでいけそうですが線を太く書かないといけないので接点がはみ出てしまいます・・

Aベストアンサー

こんなカンジでどうでしょう

1.長方形ツールで四角をかく
2.回転ツールで45°回転(Shiftキーを押しながら回転する)
3.ダイレクト選択ツールで交点を選択して希望の長さにひっぱるなどして希望の形・サイズに整える。またはオブジェクトを選択して希望の形・サイズに整える。

Qパスカルの三角形逆表示

プログラミングの授業で、課題が出たのですが、どうしてもわかりません。宜しければ、力を貸してください。
課題は、以下のプログラムを書き換えて、10段のパスカルの三角形を上下逆さに表示せよというものです。10段にする方法はわかるのですが、上下逆さにする方法がわかりません。誰か教えてくださいお願いします。
#include <stdio.h>
int main(void)
{
int tri[5][5];
int i, j;
for (i = 0; i < 5; i++) {
tri[i][0] = 1;
for (j = 1; j < 5; j++) {
tri[i][j] = 0;
}
}
for (i = 1; i < 5; i++) {
for (j = 1; j < = i; j++) {
tri[i][j] = tri[i-1][j-1] + tri[i-1][j];
}
}
for (i = 0; i < 5; i++) {
for (j = 0; j <= i; j++){
pritf("%4d", tri[i][j]);
}
printf("\n");
}
return (0);
}

プログラミングの授業で、課題が出たのですが、どうしてもわかりません。宜しければ、力を貸してください。
課題は、以下のプログラムを書き換えて、10段のパスカルの三角形を上下逆さに表示せよというものです。10段にする方法はわかるのですが、上下逆さにする方法がわかりません。誰か教えてくださいお願いします。
#include <stdio.h>
int main(void)
{
int tri[5][5];
int i, j;
for (i = 0; i < 5; i++) {
tri[i][0] = 1;
for (j = 1; j < 5; j++) {
...続きを読む

Aベストアンサー

ヒント:
ここ↓
for (i = 0; i < 5; i++)

Q紐を ひし形の網のように編む方法

こんにちは。

フェンスやカゴのように菱形になっている網の
編み方が図解されているところ、ありませんか??

ワイヤー雑貨、ビーズ、組みひもetcの本を探して
「亀甲編み」という名前だとは分かったのですが、
肝心の編み方が略化されていて…編み方が分かりま
せん。

金網のように、基本となる四角い枠の上辺に縦糸を
数本用意して、それを絡めていく平面的な作り方では
なく、
天然石やビー玉を包みたい(編んだ網に入れる)
ので、下から編み進めていく可変的な編み方が
知りたいです。

アジアンノット、ヘンプetc、紐で石をくるんでる
ストラップは。。。1本でぐるぐる回りながら進んで
いくのではなく、数本の糸を絡めて編んでいるので
しょうか?

宜しくお願いします。

Aベストアンサー

再々登場でnn( _ _)nn
包みたい物体の大きさが???
大きな球体1個?ならと

もしや
スイカネット(スイカを持ち運ぶ時の、目の粗い紐)

ガラスの浮き球の網を 思い出し
で見つけたのが↓

http://blog.goo.ne.jp/whitesnow1913/d/20050729

Q円周上の3点で作られる三角形の面積を計算したい

まず、半径1の円周上にランダムな点を3つ出します。
その3つの点を線で結び、出来た三角形の面積を求めるプログラムを作りたいと思っています。

ですが、今まで数値だけの計算しかやったことがないので、円周上の点の座標をどのように指定し、計算すればいいのかよく分かりません。
アドバイスをよろしくお願いします。

Aベストアンサー

円周上の点の座標(x1,y1)、(x2,y2)、(x3,y3)
は、三つのランダムな数p1、p2、p3(pは0から2πまでの範囲)を使って
x1=cos(p1)、y1=sin(p1)
x2=cos(p2)、y2=sin(p2)・・・・
と設定します
面積はヘロンの公式から求めればよいでしょう
http://www.suriken.com/knowledge/glossary/heron.html
各辺の長さは
a=((x1-x2)^2+(y1-y2)^2)^0.5
b=((x2-x3)^2+(y2-y3)^2)^0.5・・・・
で計算できます。

Qひし形の対角線はどれでも直角に交わりますか?

小学校5年算数で図形面積のまとめをやってますが、ひし形の対角線はどんなひし形でも直角に交わるのですか?
ひし形の特別な形正方形でも対角線は直角に交わりますよね。

Aベストアンサー

>対角線×対角線÷2で面積がでる四角形もひし形といいますか?

これは言わないと思います。
先の回答(#2)でも記しましたとおり、「4つの辺の長さが等しいもの」がひし形と呼ばれることになります。
図形の名称は、長さか角度に関する特徴からつけられるのが通常ですね。

凧型はウィキペディアにも図が載せられていました。
まさに、凧のような形ですね。

Qパスカルの三角形

一次元配列でパスカルの三角形を表示したいのですがうまくいきません。三角形の左上と右上をうまく足すことが出来ません。教えてください。作ってみたプログラムを載せます。
int comb[N+1];
int i,j,a;
int main (){
for(i=0;i<=N;i++){
comb[i]=0;
}
for(i=0;i<=N;i++){
for(j=0;j<=i;j++){

if(j==0||j==i){
comb[j]=1;

}else{

comb[j]=comb[j]+comb[j-1];


}

}
printf("\n");
}

Aベストアンサー

1行の計算を前(0~)から行なうと前回値(comb[j-1])が上書きされている為、結果が可笑しくなります。
1行の計算を後ろ(i~)から行なうと前回値が上書きされない為上手く行きます。
結果表示は後ろからになりますが、1行の計算値は対象なので見た目は同じです。

Qひし形の面積と対角線

専門学校の数学入試問題の質問です。

【問題】
一辺の長さが10のひし形があり、二本の対角線のうち、一方は他方より4長い。以下の問いに答えよ。
(1)二本の対角線の長さを求めよ。
(2)ひし形の面積Sを求めよ。

【考え】
対角線の一方をx、他方を(x+4)とおき
面積に関する連立方程式を解けばよいと思い、
ひし形の面積の公式より
S=1/2・x・(x+4)ですが
もう一つの面積の表し方がわかりません。
ひし形の1/4の三角形にヘロンの公式を使ったり
ひし形の高さをxで表そうとしたりしましたが
途中でつまり、答えが出ません。
もう一つの式の作り方から教えてください。

Aベストアンサー

一辺の長さ10をまだ使っていませんね。
菱形は対角線が直交し、互いに2等分しあいます。
4等分した一個の直角三角形で、直角のはさむ辺の長さの差は4の半分の2ですね。
2辺をa,b=a+2とすると3平方の定理から
10^2=a^2+(a+2)^2
2a^2+4a+4=100
a^2+2a+2=50
(a+1)^2=49
a>0なので
a+1=7
a=6,b=a+2=8
なので、2本の対角線の長さ2a,2bが出てきますね。
面積Sはもちろん
S=(1/2)(2a)*(2b)=2ab
で計算できますね。

Qパスカルのピラミッドを作りたいのですが...

*/
入力した段数のパスカルの三角形をつくる
*/

#include <stdio.h>

/*---nCr値を返す---*/
int comb(int n,int r)
{
if (r == 0 || r == n)
return (1);
else if (r == 1)
return (n);
else
return (comb(n - 1,r-1) + comb(n - 1,r));
}

int main(void)
{
int ln;
int i,j;

do{
printf(" 段数を入力して下さい:");
scanf("%d",&ln);
}while (ln < 1);
if (r == 0 || r == n)
return (1);
else if (r == 1)
return (n);
else
return (comb(n - 1,r-1) + comb(n - 1,r));
}

int main(void)
{
int ln;
int i,j;

do{
printf(" 段数を入力して下さい:");
scanf("%d",&ln);
}while (ln < 1);

for (i = 0; i < ln; i++){
for(j = 0;j < ln - i;j++)
putchar(' ');
for(j = 0; j < i; j++){
printf("%d",comb(i,j));
printf(" ");
}
putchar('\n');
}
return (0);
}

と作ったら、うまく
1
1 1
1 2 1
1 3 3 1
とは表示されず、
1
1 2
1 3 3
1 4 6 4
となってしまいます。
どこを直せばよいのでしょうか。教えて下さるとうれしいです。
よろしくお願い致します。

*/
入力した段数のパスカルの三角形をつくる
*/

#include <stdio.h>

/*---nCr値を返す---*/
int comb(int n,int r)
{
if (r == 0 || r == n)
return (1);
else if (r == 1)
return (n);
else
return (comb(n - 1,r-1) + comb(n - 1,r));
}

int main(void)
{
int ln;
int i,j;

do{
printf(" 段数を入力して下さい:");
scanf("%d",&ln);
}while (ln < 1);
if (r == 0 || r == n)
return (1);
else if (r == 1)
return (n);
el...続きを読む

Aベストアンサー

#1 で正しいはずなので蛇足ですが, こんなふうにすると高速化が期待できるかも:
配列を使って comb の再帰呼出しを減らしたついでに, printf の %*s も使ってみました.

#include <stdio.h>
#include <stdlib.h>

int main()
{
int ln;
int i, j;
int *comb;

do {
printf("段数を入れてください:");
scanf("%d", &ln);
} while (ln < 0);

comb = malloc((ln+1) * sizeof comb[0]);
for (i = 0; i <= ln; i++) {
comb[i] = 0;
}

comb[0] = 1;

for (i = 0; i < ln; i++) {
printf("%*s", ln-i, "");
for (j = 0; j <= i; j++) {
printf("%d ", comb[j]);
}
putchar('\n');

for (j = i; j >= 0; j--) {
comb[j+1] += comb[j];
}
}

free(comb);
return 0;
}

#1 で正しいはずなので蛇足ですが, こんなふうにすると高速化が期待できるかも:
配列を使って comb の再帰呼出しを減らしたついでに, printf の %*s も使ってみました.

#include <stdio.h>
#include <stdlib.h>

int main()
{
int ln;
int i, j;
int *comb;

do {
printf("段数を入れてください:");
scanf("%d", &ln);
} while (ln < 0);

comb = malloc((ln+1) * sizeof comb[0]);
for (i = 0; i <= ln; i++) {
comb[i] = 0;
...続きを読む

Qひし形

ひし形ABCDがあり、AB=AC=2とする
また、線分ACの中点をOとする

としてひし形の図が載っている問題です
Oを中心としてy軸にCA、x軸にDBという感じの図です

これで、OBの長さやその他の角などがなぜわかるんでしょうか
どういう定義なんだろう? と思っています

教えてください

Aベストアンサー

こんにちは

基本的に一番初めに書いていらっしゃる方のであっていますので補足的に
ひし形というのは必ずしも正三角形になるわけではありません
対角線で作られるのは合同な二等辺三角形です

この問題の場合AB=AC=2ということから
AB=BC=CD=DA=2
なぜならば四辺の長さは等しいので

よってAB=AC=BC=2となって三角形ABCは正三角形だと判断します

Q直角三角形

直角三角形の直角をはさむ2辺をa,b(a≦b)とし,斜辺をcとします。a≦100,b≦100で,a,b,cがすべて整数となる組み合わせをすべて出力するプログラムを作りたいんです。

直角三角形ならば1(真),でなければ0(偽)と出るようにすればいいのでしょうか?こうなのかなとかいろいろ考えてると,どんどん頭がこんがらがって(>_<)

Aベストアンサー

こんな感じでいいんじゃないかと思います
----------------------------------------------------------------
#include <stdio.h>
#include <math.h>

void main(void){
int a,b,c;
int a2,wk;

for(a=1;a<=100;a++){
a2=a*a;
for(b=a;b<=100;b++){
c=(int)(sqrt(wk=a2+b*b)+0.5);
if(wk==c*c){
printf("(a,b,c)=(%d,%d,%d)\n",a,b,c);
}
}
}
}


人気Q&Aランキング

おすすめ情報