アドレスとポインタについての質問

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
しょしょしょしんしゃ

アドレスとポインタについての質問

#1

投稿記事 by しょしょしょしんしゃ » 16年前

2つの実数を外部から入力して
それらを相加平均と相乗平均を計算する関数void souka_soujou()を作成し、引数は各自で考え
負の数が入力される場合は正の数が入力されるまで入力を要求するプログラムがどうしても
できません。
相加平均=a+b/2
相乗平均=√ab であらわせますが どのようにポインタをつかえばいいのでしょうか?

box

Re:アドレスとポインタについての質問

#2

投稿記事 by box » 16年前

「どうしてもできない」というのは、

1)途中まで考えてみたが、あるところから先へ進めない。
2)自分では全く考える気がなく、とにかく答えがほしい。
3)その他

のうち、どれでしょうか。

たかぎ

Re:アドレスとポインタについての質問

#3

投稿記事 by たかぎ » 16年前

> どのようにポインタをつかえばいいのでしょうか?

確実にポインタが必要なのは、関数呼出し演算子のオペランドだけです。
あとは、入出力にも何らかのポインタが必要になる可能性は高いでしょう。

しょしょしょしんしゃ

Re:アドレスとポインタについての質問

#4

投稿記事 by しょしょしょしんしゃ » 16年前

<2>ですね。
全く分かりません。
答えだけでは、勉強になりませんね
すみません

たかぎ

Re:アドレスとポインタについての質問

#5

投稿記事 by たかぎ » 16年前

> <2>ですね。
> 全く分かりません。

メールアドレスを公開して素性を明らかにする姿勢は評価しますが、それでは大学の恥をさらすようなものです。

しょしょしょしんしゃ

Re:アドレスとポインタについての質問

#6

投稿記事 by しょしょしょしんしゃ » 16年前

えっ
何処にメールアドレスが
かいてありますか?

box

Re:アドレスとポインタについての質問

#7

投稿記事 by box » 16年前

22:35の投稿では、「MAIL」欄に何も入力せずに投稿したので、
お名前のところにメールアドレスへのリンクがありません。

しかし、それ以外のこれまでの投稿では同欄にメールアドレスが
入っていました。
よって、お名前「しょしょしょしんしゃ」のところへ
マウスカーソルを持っていくと、ブラウザーの左下にメールアドレスを
表示します。
また、お名前のところをダブルクリックすると、
mailto: プロトコルに関連付いているメーラーが起動して、
あなたあてのメールを作成できる状態になります。

しょしょしょしんしゃ

Re:アドレスとポインタについての質問

#8

投稿記事 by しょしょしょしんしゃ » 16年前

そうなんですか。
はじめて知りました。
ところで話は変わりますが、このプログラムで最大値と最小値の差を
ポインタの要領で void mmd を使い 1つの関数として独立させることができるのでしょうか?
たかぎさんの注意を受け、一応 考えてみましたが、何か違いがありますでしょうか。

#include <stdio.h>

float saidai (float data[/url],float no);
float saishou (float data[/url],float no);

int main(void){

float a,b,c,d;
printf("4つの実数を入力せよ\n");
scanf("%f %f %f %f",&a,&b,&c,&d);
float x[4] ={ a, b, c, d };
float max ;
float min ;
float sa ;
printf("4つの実数を%f,%f,%f,%fとしました。\n",a,b,c,d);

max = saidai( x ,4 );
min = saishou( x,4 );
sa=max-min;
printf("このうち最大値は%fで,最小値は%fであり,その差は%fとなる。",max,min,sa);

return 0;
}
float saidai(float data[/url],float no)
{
float max;
int i;

max=data[0];
for(i=1;i<no;i++){
if( data>max){
max = data;
}
}
return max;
}
float saishou(float data[/url],float no )
{
float min;
int i ;

min=data[0];
for(i=1;i<no;i++){
if(data<min){
min = data;
}
}
return min;
}
}

たかぎ

Re:アドレスとポインタについての質問

#9

投稿記事 by たかぎ » 16年前

> 何か違いがありますでしょうか。

とにかくhttp://l.huu.cc/board/board.htmlを熟読してください。

つぎに、void mmdとは何でしょう?
初出だと思うのですが...

> 何か違いがありますでしょうか。

souka_soujouを作る課題だったのでは?

しょしょしょしんしゃ

Re:アドレスとポインタについての質問

#10

投稿記事 by しょしょしょしんしゃ » 16年前

ハイ
すみません souka_soujouはおかげで完成しました。

以下の問題に迷っているのです。
4つの実数a,b,c,dを外部から入力できるようにして
そららのうちの最大値、最小値および最大値と最小値の差を計算する部分を
1つの関数 void mmd() として独立させるプログラムを作成するという内容です。

分かり難くて、申し訳ありませんでした。
「最大値、最小値および最大値と最小値の差を計算する部分を1つの関数 void mmd() として独立させる」
という部分が 特に上手くできないのです。

lbfuvab

Re:アドレスとポインタについての質問

#11

投稿記事 by lbfuvab » 16年前

取り敢えず処理の方向としては

①double型で実数を二つ入力させる(scanf)
②正の数かを判別し、正でないなら①に戻る
③相加相乗を計算するvoid souka_soujou(double a,double b,double *souka,double *soujou)を呼び出す。
④表示する。(printf)

ですかね?

#平方根はmath.hのsqrtで計算できます。

たかぎ

Re:アドレスとポインタについての質問

#12

投稿記事 by たかぎ » 16年前

なるほど。

一点確認したいのですが、今回使用するのはC++ですか? それともC99ですか?
それと、規約は読みましたか?

しょしょしょしんしゃ

Re:アドレスとポインタについての質問

#13

投稿記事 by しょしょしょしんしゃ » 16年前

C++です。

規約は読みました
熟読はしていませんが、私の質問に不備があるのでしょうか?
すみませんでした。欠点があるなら、言ってください。

lbfuvabさん、ありがとうございました。
関数void souka_soujou()は、完成していましたが、
手直しの必要があったので、助かりました。

今の問題の処理の方向を教えていただけると、もっと助かります。

box

Re:アドレスとポインタについての質問

#14

投稿記事 by box » 16年前

規約の、ソースコードの貼り付け方に関する記述を今一度ご確認ください。

Mist

Re:アドレスとポインタについての質問

#15

投稿記事 by Mist » 16年前

後はこの辺ですかね。

・自分は何を使ってコンパイルしているのか、OSは何かを必要に応じて書きましょう。

しょしょしょしんしゃ

Re:アドレスとポインタについての質問

#16

投稿記事 by しょしょしょしんしゃ » 16年前

#include <stdio.h>
	
float saidai (float data[/url],float no);
float saishou (float data[/url],float no);

int main(void){


	float  a,b,c,d;
	printf("4つの実数を入力せよ\n");
	scanf("%f %f %f %f",&a,&b,&c,&d);
	float x[4] ={ a, b, c, d };
    float max ;
	float min ;
	float sa ;
	printf("4つの実数を%f,%f,%f,%fとしました。\n",a,b,c,d);

    max = saidai( x ,4 );
    min = saishou( x,4 );
       printf("この部分を1つの関数として独立させるのでしょうか?")
	sa=max-min;
	printf("このうち最大値は%fで,最小値は%fであり,その差は%fとなる。",max,min,sa);

	return 0;
}
float saidai(float data[/url],float no)
{
	float max;
	int i;

	max=data[0];
	for(i=1;i<no;i++){
		if( data>max){
			max = data;
		}
	}
	return max;
}
float saishou(float data[/url],float no )
{
	float  min;
	int i ;

	min=data[0];
	for(i=1;i<no;i++){
		if(data<min){
			min = data;
		}
	}
	return min;
}
}

ソースコードの貼り付けはこれでいいのでしょうか?
 
 あと 私の本来の質問にもヒントがあれば、お願いします。
 このソースコードをみて、何か気づいた人がいればお願いします。
 質問の内容は No:22286  に記載してあります。
 

たかぎ

Re:アドレスとポインタについての質問

#17

投稿記事 by たかぎ » 16年前

C++であれば、
template <class Iterator, typename T>
void mmd(Iterator first, Iterator last, T* 最大値, T* 最小値, T* 差)
{
  *最大値 = *std::max_element(first, last);
  *最小値 = *std::min_element(first, last);
  *差 = *最大値 - *最小値;
}
でよいのでは?

しょしょしょしんしゃ

Re:アドレスとポインタについての質問

#18

投稿記事 by しょしょしょしんしゃ » 16年前

何度もすみません
void mmd(Iterator first, Iterator last, T* 最大値, T* 最小値, T* 差)
{
  *最大値 = *std::max_element(first, last);
  *最小値 = *std::min_element(first, last);
  *差 = *最大値 - *最小値;
}
は何処にいれるのでしょうか?
1番下ですか?

template <class Iterator, typename T>

とはなんですか 必要あるのですか?

Mist

Re:アドレスとポインタについての質問

#19

投稿記事 by Mist » 16年前

本当にC++ですか?
ソース見る限りCだけどなぁ。

わからないことがあればまずググりましょう。
大抵のことはここで質問するより早く解決しますし、あなたにとっても勉強になります。

しょしょしょしんしゃ

Re:アドレスとポインタについての質問

#20

投稿記事 by しょしょしょしんしゃ » 16年前

そうですね

閉鎖

“C言語何でも質問掲示板” へ戻る