Три целых числа

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
ТВиктор
Сообщения: 5
Зарегистрирован: 13 авг 2007, 23:32

Три целых числа

Сообщение ТВиктор » 14 авг 2007, 00:24

Здарова всем !
Помогите решить задачку, сам я второй день изучаю Microsoft Visual Studio.


Напишите программу, которая вводит три целых числа с клавиатуры и печатает сумму, среднее значение, произведение, меньшее и большее из этих чисел. Диалог на экране должен выглядеть следующим образом:

Введите три различных целых числа: 13 27 14
Сумма равна 54
Среднее значение равно 18
Произведение равно 4914
Наименьшее равно 13
Наибольшее равно 27

Код: Выделить всё

#include <iostream>

using std::cout;
using std::cin;
using std::endl;

int main()
{
	int x;
	int y;
	int z;
	int sum;
	int sred;
	int proiz;

	cout << "Введите три различных целых числа: ";
	cin >> x >> y >> z;

	sum = x + y + z;
	cout << "Сумма равна: " << sum << endl;

	sred = (x + y + z)/3;
	cout << "Среднее значение равно: " << sred << endl;

	proiz = x * y * z;
	cout << "Произведение равно: " << proiz << endl;

	return 0;
}

BBB
Сообщения: 1272
Зарегистрирован: 27 дек 2005, 13:37

Re: Три целых числа

Сообщение BBB » 14 авг 2007, 08:36

Код: Выделить всё

cout << "Наименьшее равно: " << ((x < y) ? ((x < z) ? x : z) : ((y < z) ? y : z)) << endl;
cout << "Наибольшее равно: " << ((x > y) ? ((x > z) ? x : z) : ((y > z) ? y : z)) << endl;
Кстати, среднее значение трех целых чисел может быть дробным. Поэтому, кажется более корректным написать эту часть так:

Код: Выделить всё

double sred;
sred = (x + y + z)/3.0;
"Фокус" с заменой в выражении 3 на 3.0 в том, что если делимое и делитель - числа целого типа, то операция будет ЦЕЛОЧИСЛЕННЫМ делением (т.е. то, что в Пасказе записывается как a div b). Если же хотя бы один из операндов - вещественное число, то и деление будет выполнться без округления до целого. Запись "3" представляет константу (число) целого типа, а "3.0" - константу (число) вещественного типа.

Absurd
Сообщения: 1213
Зарегистрирован: 26 фев 2004, 13:24
Откуда: Pietari, Venäjä
Контактная информация:

Re: Три целых числа

Сообщение Absurd » 14 авг 2007, 12:24

Неплохо бы 866 локаль проставить чтобы кракозяблов не было. А также использовать широкие потоки и строки. Переменные тоже неплохо бы объявлять таv где они используются и если нет намерения их изменять делать их const.

Код: Выделить всё

#include <iostream>
#include <clocale>


using std::wcout;
using std::wcin;
using std::setlocale;

int main()
{
	int x;
	int y;
	int z;
	setlocale(LC_ALL, "Russian_Russia.866");
    
	wcout << L"Введите три различных целых числа: ";
	wcin >> x >> y >> z;

	const int sum = x + y + z;
	wcout << L"Сумма равна: " << sum << L'\n';

	const int sred = (x + y + z)/3;
	wcout << L"Среднее значение равно: " << sred << L'\n';

	const int proiz = x * y * z;
	wcout << L"Произведение равно: " << proiz << L'\n';

	return 0;
}
2B OR NOT(2B) = FF

ТВиктор
Сообщения: 5
Зарегистрирован: 13 авг 2007, 23:32

Re: Три целых числа

Сообщение ТВиктор » 14 авг 2007, 18:58

Большое спасибо, работает.

А если программе надо вывести на экран меньшее и большее не из трёх целых чисел, а из пяти или даже двадцати :confused:

Код: Выделить всё

cout << "Наименьшее равно: " << ((x < y) ? ((x < z) ? x : z) : ((y < z) ? y : z)) << endl;
cout << "Наибольшее равно: " << ((x > y) ? ((x > z) ? x : z) : ((y > z) ? y : z)) << endl;

BBB
Сообщения: 1272
Зарегистрирован: 27 дек 2005, 13:37

Re: Три целых числа

Сообщение BBB » 15 авг 2007, 08:11

ТВиктор,
Раздел "Алгоритмы", Нахождение максимума

Absurd
Сообщения: 1213
Зарегистрирован: 26 фев 2004, 13:24
Откуда: Pietari, Venäjä
Контактная информация:

Re: Три целых числа

Сообщение Absurd » 15 авг 2007, 13:20

Бугога. Enjoy C++

Код: Выделить всё

#include <iostream>
#include <sstream>
#include <vector>
#include <algorithm>
#include <numeric>
#include <functional>
#include <string>
#include <clocale>

namespace {
	template<typename IStream, typename ErrStream, typename Iterator>
		void read_ints(IStream& is, ErrStream& err, Iterator iter) {
			bool end_of_loop = false;
			while (!end_of_loop) {
				std::wstring str;
				std::getline(is, str);
				if (str.compare(L".") != 0) {
					std::wistringstream wiss(str, std::ios_base::in);
					int val;
					wiss >> val;
					if (!wiss.fail()) {
						*iter++ = val;
					} else {
						err<<L"Неправильное целочисленное значение: \"" << str << "\"\n";
					}
				} else {
					end_of_loop = true;
				}
			}
		};
};

int main(int argc, char** argv) {
	std::setlocale(LC_ALL, "Rus_Russia.866");
	std::wcout<< L"Введите несколько целых чисел, завершив ввод точкой (.)\n";
	std::vector<int> integers;
	read_ints(std::wcin, std::wcerr, std::back_inserter(integers));
	const int min = *std::min_element(integers.begin(), integers.end());
	const int max = *std::max_element(integers.begin(), integers.end());
	const int sum = std::accumulate(integers.begin(), integers.end(), 0, std: :p lus<int>());
	const int avg = sum / (int)integers.size();
	const int mul = std::accumulate(integers.begin(), integers.end(), 1, std::multiplies<int>());
	std::wcout<< L"Минимальное :" << min << L'\n';
	std::wcout<< L"Максимальное :" << max << L'\n';
	std::wcout<< L"Среднее :" << avg << L'\n';
	std::wcout<< L"Сумма :" << sum << L'\n';
	std::wcout<< L"Произведение :" << mul << L'\n';
	return 0;
}
2B OR NOT(2B) = FF

Ответить