• 締切済み

次のプログラムを作りたいのですが…

入力した1点と原点(0,0)で囲まれる長方形の面積を求めるプログラムです。 ただし、点を表す構造体を使用すること。 【結果】 ./pa-j-1.c point (x, y)? -> 10.5 21.3 area = 223.65 10.5 21.3の部分は自分で好きな数値を入力します。 よろしくお願いします。 struct point{を使うことはわかるのですが…

みんなの回答

  • php504
  • ベストアンサー率42% (926/2160)
回答No.3

プログラムの質問をする場合には環境を必ず書きましょう OS、言語、コンパイラーは必須です。 また課題であれば質問の全文を修正なく書かれたほうがいいです。 それと丸投げ質問は許可されていますが回答者からは嫌われるため回答される可能性はかなり低くなります。(過去丸投げでちゃんと回答された質問は見たことがありません。) ある程度自分が努力したあとが見られると回答率も格段にアップしますのでとりあえず自分の書ける範囲のソースを書いて提示するのが良いでしょう。

全文を見る
すると、全ての回答が全文表示されます。
  • jacta
  • ベストアンサー率26% (845/3158)
回答No.2

作ってみました。 例によってコメントはないので自分で解析してください。 #include <iostream> #include <cmath> #include <cstdlib> #include <limits> #include <stdexcept> template <class T> struct point {  point(T x0 = T(), T y0 = T()) : x(x0), y(y0) {}  T x, y; }; template <class charT, class traits, class T> std::basic_istream<charT, traits>&  operator>>(std::basic_istream<charT, traits>& istr, point<T>& var) {  istr >> var.x >> var.y; } template <class T> T area_of_rectangle(T base, T altitude) {  base = std::abs(base);  altitude = std::abs(altitude);  if (std::numeric_limits<T>::max() / base < altitude)   throw std::overflow_error("overflow");   return base * altitude; } int main() {  std::cout.exceptions(std::ios::badbit | std::ios::failbit);  try  {   std::cout << "./pa-j-1.c\n\npoint(x, y)\? -> ";   std::cout.flush();   point<long double> pt;   std::cin >> pt;   if (std::cin.fail())    throw std::ios::failure("error");   std::cout << "\narea = " << area_of_rectangle(pt.x, pt.y) << std::endl;  }  catch (std::exception& e)  {   std::cerr << e.what() << std::endl;   return EXIT_FAILURE;  } } わざとボケてみた箇所もあるので、必要に応じて直してください。

全文を見る
すると、全ての回答が全文表示されます。
回答No.1

なにを"よろしくお願い"しているのでしょうか?

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • fortranのプログラムについて

    fortranでプログラムを作成する課題が出たのですが、やり方が全くわかりません。 何を使ってどういう順番で組めばよいか教えてください。 課題は以下のとおりです。 x^2+y^2<1を満たす領域の面積を、以下の方法で近似計算するプログラムを作成せよ。 はじめは、領域を0<x<1、0<y<1と設定し、x、y方向にそれぞれn等分に分割し、多数の正方形を用意する。 分割されたそれぞれの正方形の面積は、みな等しく1/n^2である。 各正方形の重心位置(xi,yj)は、 xi=1/2n+i/n i=0~n-1 yj=1/2n+j/n j=0~n-1 であらわされる。 個々の正方形について、その重心位置(xi,yj)が求めたい領域に含まれるかどうかを判断し、この総数から近似面積を求める。最後に、この値を4倍したもの(つまりx^2+y^2<1の近似面積)を出力することとする。 なお、i,j,nはinteger(8)で、x,y,求めたい面積等はreal(8)を用い、n=100000(nはread文で入力する形でよい)で計算することとする。 よろしくお願いします。

  • 一番近い点を見つけたい。

    今  struct POINT{ double x;//x座標 double y;//y座標 } struct Model{ POINT point[18000]; } というふうな 構造体を宣言し、 Model upper; Model lower; を 宣言します。 upper.point[0] から 一番近い点 を lowerから みつけたいのですが、lower.point[0]からlower.point[17999]まで 順番に探して より小さいものがみつかれば それを (例えば)m に 代入すると いった風にしています。しかし それをupperの点すべてにそれぞれ 一番近いてんをlowerから 探そうと すると プログラムが 固まってしまって うまく うごきません。 なにか いいアイデアは ありませんでしょうか?アルゴリズム など なにか 知っている方が いれば 教えて下さい。

  • ヘッダファイルと構造体

    typedef struct{ float x; float y; float z; }Point; typedef struct { struct Point p1; struct Point p2; }Rect; とヘッダファイルに入力しコンパイルしてみると struct Point p1; struct Point p2; のPointが未定義の構造体とエラーが出ます。 どのように書けばいいのでしょう??

  • 乱数

    乱数x、y(0〈x〈1)、(0〈y〈1)をn回発生させて、これらを座標とする点をx‐y座標平面上にプロットしてこの点と原点との距離が1以下となるときの回数をカウントしm回としてn:m=(長さ1の正方形の面積):(円の4分の1の面積)となる。これを利用して円周率を求めるプログラムなんてどう作るんですか?

  • ドロネー三角形のプログラム

    二次元上にある点群を読み込み、ドロネー三角形を作成したいのですが、紙の上で絵を描いて考えるのと、プログラム上で考えるのとではまったく違うことに気づき、初っ端から手が止まっています。 点群を入れる大きな三角形は作成しました。 struct coo // 座標の構造体 { float x; float y; } struct tri     // 頂点を入れる構造体 { struct coo top[3]; } main (){ float **prj; // ここに点群がある float M_prj[3][2];  // 点群を入れる大きな三角形の3つの頂点 int Q;        // 読み込んだ頂点が他の三角形の外接円の中に含まれているか判断する struct tri triangle[100];     // 三角形をを入れる構造体 // まず、大きな三角形を三角形の配列(triangle)に入れる for(i=0; i<3; i++){ triangle[0].top[i].x = M_prj[i][0]; triangle[0].top[i].y = M_prj[i][1]; } // 外接円の中に点Pを含むものを探す Q = hantei; // 含むなら分割する if(Q > 0){ } } というように続いていくと思うのですが。。。 ドロネー三角形については理解しているつもりですが、プログラムになると全くです。そして、プログラミングは初心者です。 ここから先、どのように考えていけばよいでしょうか。

  • 構造体の要素すべてに対する四則演算の方法を教えてください.

    構造体の要素すべてに対する四則演算の方法を教えてください. たとえば、 2点a,bの座標成分x,y,zをそれぞれの座標ごとに足す方法を教えてください. 下のようにx,y,z成分を持ったa,bがあります。 struct point{ int x; int y; int z; }; struct point a; struct point b; struct point c; この場合, c=a+b; と書くことができず, それぞれの成分ごとに以下のように足さなくてはなりません. c.x=a.x+b.x; c.y=a.y+b.y; c.z=a.z+b.z; この方法でできるのですが, 非常に効率的でないのでなにかもっと簡単に記述する方法を教えてください. お願いいたします.

  • 適切な変換関数が存在しない???

    C++の構造体で困っています 印刷領域のカレントポジションを原点に戻すとともに、それ以前のカレントポジションを知ろうと思い以下のようなプログラムを書きました typedef struct {       int x;       int y; }POINT ; POINT MyPoint; MyPoint.x = 9999; MyPoint.y = 9999; bool rtn = MoveToEx(hdc, 0, 0, MyPoint);  ・・・・・(1) MyPoint.xとMyPoint.y には9999ではなく、現在のカレントポジションが入るという単純なものです ところが(1)のMyPointで以下のような文法エラーが発生します ERROR "POINT"から"LPPOINT"への適切な変換関数が存在しません 色々調べましたらC++のコンパイラの設定に関連するエラーらしいです この辺りのことは不勉強で困っております どのように対処すれば良いかご指導願います

  • 次のようなプログラムを作りたいんですが、作る難しさなどを教えてください

    まず、表があります。 複数のメンバーをもつオブジェクトがいくつかあります。そしてそのオブジェクトは何セットかあります。 表の中にオブジェクトを入れるのですが、表を横に見てなるべくメンバーのかぶりが少なくなるように入れたいのです。 具体的には ・a×bのマスの表 ・次のようなオブジェクト郡 オブジェクト (メンバー) A (a b c d) B (e f b g h i) C (a b c j i) ・ ・ ・ このオブジェクトが全部でx個あり、それがyセットあります。 つまり、 a×b >= x×y (xとyの間は算術記号の「かける」、です。分かりにくくてすいません) となり、表のすべてのマスが必ずしもうまるとは限りません。 a=18 b=18 x=70 y=4 前後を想定しています。 この説明で分かりますでしょうか?? このようなことを行うプログラムを作ろうと思うのですが、なかなかいい方法が思いつきません。今考えているやり方ではすごく時間がかかる、というか終わりません。 私は趣味でプログラムをしているので、これがどのくらいのレベル(難しさ)のプログラムなのかよく分かりません。 ちなみに私はプログラムを覚え始めて1年くらいです。 質問は以下の3点です。 ・このプログラムの難しさを教えてください ・このプログラムを仕事でやるとしたら、どの程度の仕事なのでしょうか(どのくらいの期間で作ったらいくらくらいの仕事なのかということです。こんなの簡単すぎて報酬払う人いない、といった回答でも結構です) ・このプログラムの要求を満たす、いいアルゴリズムがあったら教えてください 最初の2点は完全に個人的な興味です。 すごく分かりにくい文章になってしまいすいません。 よろしくお願いします。

  • このプログラムの修正箇所を教えていただけないでしょうか?

    xとyをそれぞれ0から10まで1きざみで変え、そのすべてを組み合わせた平面上の11x11個の点(x,y)を考え、これらの点のうちで、原点が(6,6)、半径5の円の内側(円周上は除く)に含まれる点の数を出力するプログラム。 とりあえず、原点が(6,6),半径5の円の内側なので,原点(6,6)と点(x,y)との距離の2乗が5*5より小さいと考えました。 そこで私が考えたプログムなんですが、結果と照らし合わせたところ上手く計算が合いませんでした…。 #include <stdio.h> int main(void) { int x,y,h1=0,i1=0,j1=0,k1=0,l1=0,m1=0,n1=0,o1=0,p1=0,q1=0,r1=0,t=0; /*y=0の行について考える*/ for(x=0,y=0;x<=10;x++){ if((6-x)*(6-x) + (6-y)*(6-y)<=5*5) h1+=1; } /*y=1の行について考える*/ for(x=0,y=1;x<=10;x++){ if((6-x)*(6-x) + (6-y)*(6-y)<=5*5) i1+=1; } :(中略yを1ずつ増やして同じことの繰り返し) : : /*y=10の行について考える*/ for(x=0,y=10;x<=10;x++){ if((6-x)*(6-x) + (6-y)*(6-y)<=5*5) r1+=1; } t=h1+i1+j1+k1+l1+m1+n1+o1+p1+q1+r1; printf("%d",t); return(0); } 自分自身、初心者でかなりまどろっこしい書き方をしていると思います; ここで完全に自分では詰まってしまったので、計算が合うような修正箇所、簡潔な書き方、ヒント等をどなたかご教授いただけると幸いです。 よろしくお願いします。

  • 関数から構造体を返す一般的な手法は

    たとえば下のような平面上の点を表す構造体があって、 typedef struct { const int x; const int y; } Point; 2点間の中心を計算する関数を書くとします。 この場合、計算結果をどのように返せばよいでしょうか。 「ただ動けばよい」コードを書くことはできるのですが、 私が知りたいのは、どのような書き方が一般的かということです。 構造体の要素が const なので、 下のコードはコンパイルできません。 void center(Point* result, Point* p1, Point* p2) {  result->x = (p1->x + p2->x) / 2;  result->y = (p1->y + p2->y) / 2; } 新しいオブジェクトを作ってコピーする? void center(Point* result, Point* p1, Point* p2) {  Point p = { (p1->x + p2->x) / 2, (p1->y + p2->y) / 2 };  memcpy(result, &p, sizeof(Point)); } この例のような小さい構造体であれば、 オブジェクトをまるごとリターンしてもよい? Point center(Point* p1, Point* p2) {  Point p = { (p1->x + p2->x) / 2, (p1->y + p2->y) / 2 };  return p; } あるいは、そもそも構造体の要素を const にする手法は C言語では一般的でないのでしょうか? どうかご教授願います。