プロが教える店舗&オフィスのセキュリティ対策術

プログラミングで次の問題をどうすればいいのかわかりません。
教えてください

1.配列に次のデータが格納されており、
2,-8,5,-4,6,5,7,-3,-9,-1
奇数、偶数、負の数がそれぞれいくつあるかを数え、表示するプログラムを作成してください。

2.任意の整数Xを入力し、Xの階乗の結果を表示するプログラムを作成しなさい。ただし、Xの階乗の計算は別関数で行い、入力と結果の表示はmain関数で行うようにすること。

A 回答 (7件)

言語は?

    • good
    • 0

えーと、どこがわからないんでしょうか?


まさか全部回答を書けということではないでしょう?

>1.配列に次のデータが格納されており、
>2,-8,5,-4,6,5,7,-3,-9,-1
>奇数、偶数、負の数がそれぞれいくつあるかを数え、表示するプログラムを作成してください。

まず配列を定義して問題文のデータを格納する。
奇数の個数をゼロと定義する
偶数の個数をゼロと定義する
負数の個数をゼロと定義する
データの個数をカウントする
C言語なら for 分とかを使ってデータを一つづつ取り出す
奇数かどうか判定し奇数なら 奇数のカウントを+1する
偶数かどうか判定し偶数なら 偶数のカウントを+1する
負数かどうか判定し負数なら 負数のカウントを+1する
データが終了するまでループする
それぞれのカウント値を表示する

>2.任意の整数Xを入力し、Xの階乗の結果を表示するプログラムを作成しなさい。ただし、Xの階乗の計算は別関数で行い、入力と結果の表示はmain関数で行うようにすること。

メイン関数
整数Xの入力部分作成
関数を呼び出し(パラメータX)結果を取得する
結果を表示する

関数(引数X)

結果を1と定義する
for 文を使いXをループ変数としてループする
結果とループ変数を掛け算して保存する
ループ変数が1になるまで繰り返す
結果を戻り値として返却する
    • good
    • 0

1 の奇数だけ:


#include <iostream>
#include <numeric>

int main()
{
const int a[] = { 2, -8, 5, -4, 6, 5, 7, -3, -9, 1 };
std::cout << std::accumulate(a, a+sizeof a/sizeof a[0], 0, [](int acc, int val) { return acc + (val % 2 ? 1 : 0); }) << std::endl;
}
    • good
    • 0

作ってみました。



1.
----------
-module(count_num).
-export([count_num1/0, count_num2/0]).

%% 偶数・奇数・負値のカウント(listsモジュール使用版)
count_num1() ->
 Number_List = [2,-8,5,-4,6,5,7,-3,-9,-1],
 {Even_List, Odd_List} = lists:partition(fun (X) -> X rem 2 == 0 end, Number_List),
 Negative_List = lists:filter(fun (X) -> X < 0 end, Number_List),
 io:format("# of even : ~b~n", [length(Even_List)]),
 io:format("# of odd : ~b~n", [length(Odd_List)]),
 io:format("# of negative : ~b~n", [length(Negative_List)]).

%% 偶数・奇数・負値のカウント(listsモジュール未使用版)
count_num2() ->
 Number_List = [2,-8,5,-4,6,5,7,-3,-9,-1],
 io:format("# of even : ~b~n", [count(Number_List, fun (X) -> X rem 2 == 0 end)]),
 io:format("# of odd : ~b~n", [count(Number_List, fun (X) -> X rem 2 /= 0 end)]),
 io:format("# of negative : ~b~n", [count(Number_List, fun (X) -> X < 0 end)]).

%% 個数計算
count(L, F) ->
 count(L, F, 0).

%% 個数計算実装
count([], _F, Count) ->
 Count;
count([H | T], F, Count) ->
 case F(H) of
  true ->
   count(T, F, Count + 1);
  false ->
   count(T, F, Count)
 end.
----------

2.
----------
-module(fact).
-export([main/0]).

%% main関数
main() ->
 Value = input_non_negative_integer(),
 io:format("~b! = ~b.~n", [Value, fact(Value)]).

%% 非負整数値入力
input_non_negative_integer() ->
 case io:fread('input non-negative integer>', "~d") of
  {ok, [Value]} when Value > 0 ->
   Value;
  _Others ->
   input_non_negative_integer()
 end.

%% 階乗計算
fact(Value) ->
 fact(Value, 1).

%% 階乗計算実装
%% とりあえずモジュール内で呼ばれるのみなので、負値ガード等は行っていない
fact(0, Result) ->
 Result;
fact(Value, Result) ->
 fact(Value - 1, Result * Value).
----------

インデントは全角スペースで行っているので、コピペ後タブに置換してください。
以下の環境で動作確認済です。

OS : Windows Vista Home Premium SP2
Erlang OTP: R14B01

……言語指定が無かったのですが、その他(プログラミング)カテゴリへの質問ですのでErlang(参考URL参照)だと推察しました。想定の言語と違っていたならお詫びいたします。

参考URL:http://www.erlang.org/
    • good
    • 1

なんでわざわざ accumluate なんて使ったんだろ>#3. 常識的に考えたら


count_if(a, a+sizeof a/sizeof a[0], [](int val) { return val % 2 == 0; })
のように count_if を使う場面じゃないか.
    • good
    • 0

2.だけ


再帰処理のサンプルとして。 # 普通はループ使う。
C++ です。

#include <iostream>

// 自然数 n の階乗を返す。
// n の階乗が INT_MAX を越える場合の動作は未定義。
int factorial(int n)
{
  return (n > 1) ? n * factorial(n - 1) : 1;
}

int main()
{
  int n;
  std::cin >> n;
  std::cout << factorial(n) << std::endl;
}
    • good
    • 1

>どうすればいいのか



プログラムを作ってあげても、本人の解く力、作る能力はあまりつかない。
逆効果になる恐れあり。

奇数偶数の求め方はわかるとして、
アルゴリズムがわからないのか、
変数や配列をどう定義したら処理しやすいのかがわからないのか、
階乗、がわからないのか。

この課題の、1つ前のレベルをクリアできてない?。

この課題はできたとしても、次の課題でまた悩み、質問するのではないだろうか。

悩みは残りそうだし、質問者様はそれを明確にすべきでしょう。
    • good
    • 0

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