Войти

Показать полную графическую версию : [решено] Мин и макс числа.


Hardcore
19-09-2010, 12:37
Given three real numbers x, y, z. Output the minimum and the maximum values of them. First output the minimum, then the maximum value
Example:
Input:
3.1 4.1 5.1

Output
3.1 5.1

Example:
Input:
5.2 4.1 1.0

Output
1.0 5.2

я решил эту задачу но мне контестор выдоет ошибку.
и обязательное условие этой задачи использовать оператор If и else.

посоветуйте где у меня ошибка?
#include <iostream>
using namespace std;
int main () {
double x,y,z;
cin>> x>>y>>z;
if (x>y && x>z) {
cout<<x<<endl;
}
else if (x<y && x<z) {
cout <<x<<endl;
}
if (y>x && y>z) {
cout<<y<<endl;
}
else if (y<x && y<z) {
cout <<y<<endl;
}
if (z>x && z>y) {
cout <<z<<endl;
}
else if (z<x && z<y) {
cout <<z<<endl;
}
return 0;
}

AlexTNT
19-09-2010, 13:57
Не endl, а end1
В коде есть ошибка - при віполнении компилятор ничего не скажет. Но вместо єтого примера

Example:
Input:
5.2 4.1 1.0

Output
1.0 5.2

Выйдет этот

Example:
Input:
5.2 4.1 1.0

Output
5.2 1.0
Исправленный код: #include <iostream>
using namespace std;
int main () {
double x,y,z;
cin>> x>>y>>z;

//Какое число меньше
if (x<y && x<z)
{
cout <<x;
}
else if (y<x && y<z)
{
cout <<y;
}
else if (z<x && z<y)
{
cout <<z;
}


//Какое число больше
if (x>y && x>z)
{
cout<<x;
}

else if (y>x && y>z)
{
cout<<y;
}

else if (z>x && z>y)
{
cout <<z<<end1;
}


return 0;
}

Hardcore
19-09-2010, 14:07
дело не в этом. с++ решает нормально. а вот када на контесторе проверяю говорит wrong answer.
может я где то что то не так сделал.

lxa85
19-09-2010, 14:10
cout <<z<<endl; »
зачем каждый раз выводить endl ? Не проще ли это сделать один раз в конце программы?
И вообще, что за символ endl ? endline ? Конец строки и перевод каретки?
BTW if (x>y && x>z) {
cout<<x<<endl;
}
else if (x<y && x<z) {
cout <<x<<endl;
} »
Конструкция не верна. Читаем задание, думаем.
Это я кстати чуть позже понял. Но одного взгляда на сложный и длинный код достаточно чтобы сказать, что он ошибочен. Потом уже присмотрелся и нашел ошибку :)

Hardcore
19-09-2010, 14:15
аха. просто если после каждый писать эндлайн ответ выводит удобней.
чтоб не путаться.

lxa 85
"Это я кстати чуть позже понял. Но одного взгляда на сложный и длинный код достаточно чтобы сказать, что он ошибочен. Потом уже присмотрелся и нашел ошибку"
можешь указать мне на ошибку?

lxa85
19-09-2010, 14:22
AlexTNT, не надо писать исправленный код Hardcore проходит некое on-line тестирование. Пусть думает сам, наше дело указать место ошибки, не ее саму, не тем более исправленную версию исходника писать не следует. Это медвежья будет услуга.
Это же индивидуальное, а не коллективное решение.
Не в обиду :)

можешь указать мне на ошибку? »
Неа! :)
Читай внимательно задание и смотри что пишет твоя программа.
Ошибочную конструкцию я тебе привел.

Hardcore
19-09-2010, 14:45
я не прошу написать мне ответ.
просто я уже голову сломал. на с++ компилирвую и всё правильно.
када же на контесторе проверяю ошибка.

можно хотяб намек каконй нить.

lxa85
19-09-2010, 14:55
Hardcore, хочешь дельный совет? Отдохни чуток! :)
Твоя программа компилируется и работает. Только выдает не правильный ответ. :)
1. Читай задание по словам и не торопясь.
2. Сравни выводы.
3. Проверь, а все ли ты учел. (Я те голову на отсечение даю, что ты этого не делал, а зря)
Наводящий вопрос. Сколько может быть комбинаций чисел и их неравенств? Какие вообще бывают числа на числовой прямой?

Смотри краевые и граничные условия.
и не забывай публиковать код, под тегом "[ code ]" - #

Hardcore
19-09-2010, 15:04
я ещё more не проходил. так что я его использовать не могу.
а комбинаций могут быть 6 или 12.

lxa85
19-09-2010, 16:25
а комбинаций могут быть 6 или 12. »
а все таки 6 или 12? А если проверю?
Hardcore, твоя проблема, присуща всем новичкам. Ты пытаешься писать код, не понимая сути.
Сядь спокойно, распиши математику этой задачи. Т.е. чтобы ты в любой момент мог показать и назвать максимальное число, минимальное число, их сумму, разницу и т.д. Сначала вычисли числовой пример, затем перейди к буквам. Напиши диапазоны изменения значения для каждой величины.
Проанализируй задачу! Только после этого ты сможешь написать правильное решение.
Ты пишешь математику через призму программирования, а надо наоборот писать программу через призму математики.

Drongo
19-09-2010, 20:16
я ещё more не проходил. так что я его использовать не могу »Имелось ввиду оформление вашего тега командами

Ваш код

Hardcore
20-09-2010, 17:37
решил задачу. Больше спасибо Lxa 85.
Вот мой код
#include <iostream>
#include <math.h>

using namespace std;

int main() {
double x, y, z;
cin >> x >> y >> z;

double min = x;
if (y < min)
min = y;

if (z < min)
min = z;

cout << min << endl;
double max = x;
if (y > max)
max = y;

if (z > max)
max = z;

cout << max << endl;

return 0;

}

Drongo
20-09-2010, 19:59
Если нужна вариантивность ответа или придётся усложнить проверку максимального и минимального чисел, при произвольном количестве введённых, то можно использовать массив, размер меняется в контстнте size. Если заранее не известно количество проверяемых чисел, можно создавать динамические массивы.

#include <iostream>
using namespace std;

int main() {
const int size = 3; // Наш размер массива. Можно изменить произвольно размер
double z, min, max, array[size] = {0};

// Ввод значений в массив
for(int i = 0; i < size; i++){
cout << "Array[" << i << "] = ";
cin >> array[i];
}

max = min = array[0]; // Присваиваем первый элемент

// Поиск максимального и минимального значений
for(int i = 1; i < size; i++){ // Начинаем с 1-го элемента, т.к. array[0] мы уже присвоили
if(array[i] < min)
min = array[i];
if(array[i] > max)
max = array[i];
}

cout << "\nMinimal = " << min << endl;
cout << "Maximal = " << max << endl;

cin >> z;
return 0;
}




© OSzone.net 2001-2012