Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
VovaMazur
-12 / 33 / 8
Регистрация: 10.03.2011
Сообщений: 133
#1

X, Y, Z - C++

14.03.2011, 22:20. Просмотров 1166. Ответов 9
Метки нет (Все метки)

) Дано три действительных числа X, Y, Z. Перераспределить значения так, чтобы в X оказалось меньшее из этих значений, а в Z - большее.
С++
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
silent_1991
Эксперт С++
4984 / 3041 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
14.03.2011, 22:40 #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <iostream>
 
void swap(double &, double &);
 
int main()
{
    setlocale(LC_ALL, "Rus");
 
    double x, y, z;
 
    std::cout << "Введите x: ";
    std::cin >> x;
    std::cout << "Введите y: ";
    std::cin >> y;
    std::cout << "Введите z: ";
    std::cin >> z;
 
    std::cout << "До сортировки:    " << x << "  " << y << "  " << z << std::endl;
 
    if (x > y)
        swap(x, y);
 
    if (x > z)
        swap(x, z);
 
    if (y > z)
        swap(y, z);
 
    std::cout << "После сортировки: " << x << "  " << y << "  " << z << std::endl;
 
    return 0;
}
 
void swap(double &left, double &right)
{
    double temp = left;
    left = right;
    right = temp;
}
1
LaГushan
124 / 124 / 14
Регистрация: 12.03.2011
Сообщений: 227
15.03.2011, 00:37 #3
Для любителей пожёстче, можно и такой вариант попробовать
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <iostream>
 
int main()
{
    setlocale(LC_ALL, "Rus");
 
    double x, y, z;
    int mid,min,max;
 
    std::cout << "Введите x: ";
    std::cin >> x;
    std::cout << "Введите y: ";
    std::cin >> y;
    std::cout << "Введите z: ";
    std::cin >> z;
 
    std::cout << "До сортировки:    " << x << "  " << y << "  " << z << std::endl;
 
    mid = (((x<y&&x>z)||(x>y&&x<z))?x:((y<z&&y>x)||(y>z&&y<x))?y:z);
    min = ((x < y && x < z) ? x : (y < z) ? y:z);
    max=((x > y && x > z )? x:( y > z )? y : z);
    y = mid;x = min;z = max;
 
    std::cout << "После сортировки: " << x << "  " << y << "  " << z << std::endl;
 
    return 0;
}
0
silent_1991
Эксперт С++
4984 / 3041 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
15.03.2011, 01:21 #4
Тогда уж вот так, чтобы совсем запутать)))
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <iostream>
 
int min(int, int, int);
int max(int, int, int);
int mid(int, int, int);
 
int main()
{
    setlocale(LC_ALL, "Rus");
 
    double x, y, z;
 
    std::cout << "Введите x: ";
    std::cin >> x;
    std::cout << "Введите y: ";
    std::cin >> y;
    std::cout << "Введите z: ";
    std::cin >> z;
 
    std::cout << "До сортировки:    " << x << "  " << y << "  " << z << std::endl;
 
    int new_x = min(x, y, z);
    int new_y = mid(x, y, z);
    int new_z = max(x, y, z);
 
    x = new_x;
    y = new_y;
    z = new_z;
 
    std::cout << "После сортировки: " << x << "  " << y << "  " << z << std::endl;
 
    return 0;
}
 
int max(int x, int y, int z)
{
    return x > y ? x > z ? x : z : y > z ? y : z;
}
 
int min(int x, int y, int z)
{
    return x < y ? x < z ? x : z : y < z ? y : z;
}
 
int mid(int x, int y, int z)
{
    return x < y ? x > z ? x : y > z ? z : y : x < z ? x : y > z ? y : z;
}
Добавлено через 1 минуту
Только что-то с mid перемудрил, по-моему, можно проще, чтобы по длине не превышало min и max, но лень пересматривать)))
0
VovaMazur
-12 / 33 / 8
Регистрация: 10.03.2011
Сообщений: 133
23.03.2011, 20:29  [ТС] #5
а можна через printf и scanf?
0
easybudda
Модератор
Эксперт CЭксперт С++
9681 / 5631 / 954
Регистрация: 25.07.2009
Сообщений: 10,808
23.03.2011, 20:37 #6
Цитата Сообщение от LaГushan Посмотреть сообщение
double x, y, z;
Просто из любопытства: а зачем Вы их, как double объявили?
0
silent_1991
Эксперт С++
4984 / 3041 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
23.03.2011, 20:56 #7
Цитата Сообщение от easybudda Посмотреть сообщение
а зачем Вы их, как double объявили?
Хм...
Цитата Сообщение от VovaMazur Посмотреть сообщение
Дано три действительных числа X, Y, Z
0
easybudda
Модератор
Эксперт CЭксперт С++
9681 / 5631 / 954
Регистрация: 25.07.2009
Сообщений: 10,808
23.03.2011, 22:57 #8
silent_1991, ну это-то понятно, но дальше они всё равно к int приводятся, при чём просто отбрасыванием дробной части, а не округлением хотябы...
0
silent_1991
Эксперт С++
4984 / 3041 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
23.03.2011, 23:03 #9
easybudda, а, ну да))) Видимо причиной всему то, что LaГushan взял за основу мой код с правильными double, и дописал туда свои неправильные int)))
0
VovaMazur
-12 / 33 / 8
Регистрация: 10.03.2011
Сообщений: 133
08.05.2011, 22:20  [ТС] #10
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include"stdafx.h"
 
void swap(double &, double &);
 
int main()
{
    setlocale(LC_ALL, "Rus");
 
    double x, y, z;
 
    printf("Введіть x: ");
    scanf("%lf",&x);
    printf("Введіть y: ");
    scanf("%lf",&y);
    printf("Введіть z: ");
    scanf("%lf",&z);
 
    printf("До сортування:  x=%lf y=%lf z=%lf\n",x,y,z);
 
    if (x > y)
        swap(x, y);
 
    if (x > z)
        swap(x, z);
 
    if (y > z)
        swap(y, z);
 
    printf("Після сортування: x=%lf y=%lf z=%lf\n",x,y,z);
 
    return 0;
}
 
void swap(double &left, double &right)
{
    double temp = left;
    left = right;
    right = temp;
}
0
08.05.2011, 22:20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru