Member 13440566 Ответов: 2

Может ли кто-нибудь помочь с этим?


Описание проблемы
Напишите программу, управляемую меню, которая позволяет пользователю ввести пять чисел, а затем выбрать между поиском
наименьшее, наибольшее, сумма или среднее. Используйте оператор switch, чтобы определить, какое действие предпринять. Дают
сообщение об ошибке при вводе неверных данных. Если введены неверные данные, ваша основная функция должна вернуть целое число
значение 1. В противном случае верните целочисленное значение 0.
Пример взаимодействия
$ ./а.из
Введите пять чисел, разделенных пробелами: 18 21 7 54 Z
Извиняюсь. Вы ввели что-то, чего я не понимаю.
$ echo $?
1
$ ./а.из
Введите пять чисел, разделенных пробелами: 18 21 7 54 9
малое значение
б. наибольшее значение
c. сумма значений
д. Средние значения
Ввести выбор? 1
Извиняюсь. Вы ввели что-то, чего я не понимаю.
$ echo $?
1
$ ./а.из
Введите пять чисел, разделенных пробелами: 18 21 7 54 9
малое значение
б. наибольшее значение
c. сумма значений
д. Средние значения
Введите выбор? а
Наименьшее значение - 7.
$ echo $?
0

Что я уже пробовал:

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

using namespace std;
 
//Function Declarations
int option;
int small(int u, int w, int x, int y, int z);
int large(int u, int w, int x, int y, int z);
int sum(int u, int w, int x, int y, int z);
int avg(int u, int w, int x, int y, int z);
 
int one;
int two;
int three;
int four;
int five;

int main(void)
{
  //Local Declarations
  printf("\n Enter five numbers, separated with spaces:");
  scanf ("%d %d %d %d %d", &one, &two, &three, &four, &five);
 
  //Statements
  printf("\n\t   a. Smallest value       ");
  printf("\n\t   b. Largest value        ");
  printf("\n\t   c. Sum of values        ");
  printf("\n\t   d. Average of values    ");

  printf("\n Enter choice? ");
  scanf ("%d", &option);

  // return option;
  switch(option)
  {
    case 'A': cout<<"The smallest value is " <<small(one, two, three, four, five);
            break;
    case 'B': cout<<"The largest value is " <<large(one, two, three, four, five);
            break;
    case 'C': cout<<"The sum value is " <<sum(one, two, three, four, five);
            break;
    case 'D': cout<<"The avergae value is " <<avg(one, two, three, four, five);
            break;
    default : cout<<"\n Sorry. You entered something I don’t understand.";
  }
  
  return 0;
} 
 
int small(int u, int w, int x, int y, int z)
{
  if (one<two && one<three && one<four && one<five)
    printf("%d", one);
  else if (two<one && two<three && two<four && two<five)
    printf("%d", two);
  else if (three<one && three<two && three<four && three<five)
    printf("%d", three);
  else if (four<one && four<two && four<three && four<five)
    printf("%d", four);
  else
    printf("%d", five);

  return 0;
}
 
int large(int u, int w, int x, int y, int z)
{
  if (one>two && one>three && one>four && one>five)
    printf("%d", one);
  else if (two>one && two>three && two>four && two>five)
    printf("%d", two);
  else if (three>one && three>two && three>four && three>five)
    printf("%d", three);
  else if (four>one && four>two && four>three && four>five)
    printf("%d", four);
  else
    printf("%d", five);

  return 0;
}
 
int sum(int u, int w, int x, int y, int z)
{
  return(u+w+x+y+z);
}
 
int avg(int u, int w, int x, int y, int z)
{
  return((u+w+x+y+z)/5);
}

OriginalGriff

И что же?
Что он делает такого, чего вы не ожидали, или не делает того, что вы сделали?
Какая помощь вам нужна?

Patrice T

В чем проблема?
У вас есть вопрос?

2 Ответов

Рейтинг:
2

CPallini

Почему вы не используете массивы и итерации?
Почему ты не пользуешься C++ особенности? Например, вы можете написать:

#include <iostream>
#include <array>
using namespace std;

constexpr size_t NUMBERS = 5;

int main()
{
  array <int, NUMBERS> a;
  cout << "enter five numbers" << endl;

  for (size_t n=0; n<NUMBERS; ++n)
  {
    cin >> a[n];
    if (cin.fail())
    {
      cout << "invalid input" << endl;
      return 1;
    }
  }
  // ...
}

Аналогичный подход может быть использован в вычислительных функциях, таких как average
double average( const array <int , NUMBERS> & a)
{
  double sum = 0;
  for (auto i : a)
    sum += i;

  return (sum / NUMBERS);
}



[обновление]
Это версия вашего кода без ошибок компилятора. Вы должны заполнить TODO: места подобающие.

#include <iostream>
#include <array>
#include <algorithm>

using namespace std;
constexpr size_t NUMBERS = 5;
typedef array<int, NUMBERS> Array5;

//Function Declarations
char option;
int small(const Array5 & a);
int large(const Array5 & a );
int sum(const Array5 & a);
double avg(const Array5 & a);


int main()
{
  array <int, NUMBERS> a;
  cout << "enter five numbers" << endl;

for (size_t n=0; n<NUMBERS; ++n)
{
  cin >> a[n];
  if (cin.fail())
  {
    cout << "invalid input" << endl;
    return 1;
  }
}

  //Statements
  cout <<"\n\t a. Smallest value ";
  cout <<"\n\t b. Largest value ";
  cout <<"\n\t c. Sum of values ";
  cout <<"\n\t d. Average of values ";

  cout <<"\n Enter choice? ";
  cin >> option;

  // return option;
  switch(option)
  {
  case 'a': cout<<"The smallest value is " <<small(a);
    break;
  case 'b': cout<<"The largest value is " <<large(a);
    break;
  case 'c': cout<<"The sum value is " <<sum(a);
    break;
  case 'd': cout<<"The avergae value is " <<avg(a);
    break;
  default : cout<<"\n Sorry. You entered something I don’t understand.";
  }

  return 0;
}

int small(const Array5 & a)
{
  int result = a[0];
  for (size_t n=1; n<a.size(); ++n)
    if (result > a[n] )
        result = a[n];
  return result;
}

// Bonus: an alterantive implementation of 'small', using the sort method of algorithm
int small_alternative( Array5  a)
{
  sort(a.begin(), a.end());
  return a[0];
}

int large(const Array5 & a)
{
  int result = a[0];
  // TODO: find the largest item
  return result;
}


int sum(const Array5 & a)
{
  int result = 0;
  //TODO: compute the sum of the items  
  return result;
}

double avg( const Array5  & a)
{
  double s = sum (a);

  return (s / NUMBERS);
}

[/обновление]


Member 13442137

#include <iostream>
#include & lt;array>

использование пространства имен std;

//объявление функции
параметр инт ;
инт малый(тип int у, int и Вт, тип int х, int и М, инт з);
большой инт(инт у, инт Вт, тип int х, int и М, инт з);
инт сумма(тип int у, int и Вт, тип int х, int и М, инт з);
инт СР(у инт, инт б, внутр х, внутр у, инт з);

реализация таких чисел = 5;

тап_п()
{
массив < int, NUMBERS> a;
cout << "введите пять чисел" < & lt; endl;

for (size_t n=0; n< NUMBERS; ++n)
{
cin >> a[n];
если (cin. fail())
{
cout << "недопустимый ввод" < & lt; endl;
возврат 1;
}
}

//Заявления
cout << " \n\t a. наименьшее значение ";
cout << " \n\t b. наибольшее значение ";
cout << " \n\t c. сумма значений ";
cout << " \n\t d. среднее значение значений ";

cout << " \N введите выбор? ";
cin >> "%d", & amp; опция;

// опция возврата;
переключатель (опция)
{
случай 'A': cout< & lt; "наименьшее значение равно" < & lt;small;
перерыв;
случай 'B': cout< & lt; "самое большое значение" < & lt;большое;
перерыв;
случай 'C': cout< & lt; "значение суммы равно" < & lt;sum;
перерыв;
случай 'D': cout<< "среднее значение равно" < & lt;avg;
перерыв;
по умолчанию: cout<<"\N извините. Вы ввели что-то, чего я не понимаю.";
}

возвращает 0;
}

инт малый(тип int у, int и Вт, тип int х, int и М, инт з)
{
если (один< два & & amp; один & lt;три & & amp; один & lt;четыре & & amp; один & lt;пять)
cout << "%d", один;
остальное, если (двух&ЛТ;один &&усилителя; два&ЛТ;три &амп;&амп; два&ЛТ;четыре &амп;&амп; два&ЛТ;пять)
cout << "%d", два;
остальное, если (три&ЛТ;один &&усилителя; три&ЛТ;два &&усилителя; три&ЛТ;четыре &&усилителя; три&ЛТ;пять)
cout << "%d", три;
остальное, Если (четырех&ЛТ;один &&усилителя; четыре&ЛТ;два &&усилителя; четыре&ЛТ;три &&усилителя; четыре&ЛТ;пять)
cout << "%d", четыре;
еще
cout << "%d", пять;

}

большой инт(инт у, инт Вт, тип int х, int и М, инт з)
{
если (один> Два & & amp; один & gt;три & & amp; один & gt;четыре & & amp; один & gt;пять)
cout << "%d", один;
еще если (два и GT;один &&усилителя; два&ГТ;три &амп;&амп; два&ГТ;четыре &амп;&амп; два&ГТ;пять)
cout << "%d", два;
остальное, если (три&ГТ;один &&усилителя; три&ГТ;два &&усилителя; три&ГТ;четыре &&усилителя; три&ГТ;пять)
cout << "%d", три;
остальное, Если (четырех&ГТ;один &&усилителя; четыре&ГТ;два &&усилителя; четыре&ГТ;три &&усилителя; четыре&ГТ;пять)
cout << "%d", четыре;
еще
cout << "%d", пять;

}

инт сумма(тип int у, int и Вт, тип int х, int и М, инт з)
{
возврат (u+w+x+y+z);
}

двойной средние( константный массив и Л;int , числа&ГТ; &амп; с)
{
двойная сумма = 0;
для (auto i: a)
сумма += i;

возврат (сумма / числа);
}

Так вот что я пробовал, но это все равно дает мне ошибку. Извините новичка в C++

CPallini

Я обновил свое решение. Взгляните на него.

Patrice T

Может быть, вы должны сказать, какие сообщения об ошибках и положение ошибки.
Воспользуйся Улучшить вопрос чтобы обновить ваш вопрос.
Чтобы каждый мог обратить внимание на эту информацию.

Рейтинг:
1

Pete O'Hanlon

У вас есть несколько структурных проблем с вашим кодом. Первая проблема, с которой вы столкнулись, заключается в том, что вы пытаетесь использовать C++ так, как если бы это был C. Не используйте printf, используйте cout. Не используйте scanf, используйте cin. Использование глобальных переменных (один, два и т. д. бита) не имеет смысла, когда вы передаете эти значения в методы, а затем игнорируете параметры метода для использования глобальных переменных. Как вы думаете, что произойдет, если я поставлю а в качестве опции, думая, что получу наименьшее значение?


Member 13442137

Я знаю, что в коде есть проблема, вопрос в том, Можете ли вы помочь мне ее исправить? Я новичок в C++.

Pete O'Hanlon

Я бы посоветовал вам сделать шаг назад и начать изучать основы C++. Мы не собираемся решать за вас домашнее задание; оно задано так, чтобы вы могли показать, что вы знаете, и выявить любые пробелы в ваших знаниях, чтобы вы и ваш учитель знали, на чем вам нужно сосредоточиться. Поскольку вы делаете C++, вы должны искать здесь классы; если бы я делал это, я бы разбил свой код на минимум меню и класс математики, причем каждая часть отвечала бы за всю функциональность для этой области.