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

Введенные значения переменных a, b, c поменять местами так, чтобы оказалось a>=b>=c - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.75
Venom33
 Аватар для Venom33
19 / 19 / 0
Регистрация: 26.01.2013
Сообщений: 287
13.02.2013, 22:46     Введенные значения переменных a, b, c поменять местами так, чтобы оказалось a>=b>=c #1
Здравствуйте.
Помогите, пожалуйста, в написании алгоритма на C++.
>> Введенные значения переменных a, b, c поменять местами так,
чтобы оказалось a>=b>=c.
Спасибо заранее добрым людям! +(с меня плюсики к вашей репутации)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.02.2013, 22:46     Введенные значения переменных a, b, c поменять местами так, чтобы оказалось a>=b>=c
Посмотрите здесь:

Значения переменных а, Ь и с поменять местами так, чтобы оказалось а >= Ь >= с. C++
C++ Значения переменных поменять местами так, чтобы они оказались упорядоченными по возрастанию
Значение переменных поменять местами так, чтобы они оказались упорядоченными по возрастанию C++
Значение переменных поменять местами так, чтобы они оказались упорядоченными по возрастанию C++
Значения переменных X, Y, Z поменять местами так C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kins
 Аватар для Kins
59 / 58 / 6
Регистрация: 03.02.2013
Сообщений: 167
13.02.2013, 23:15     Введенные значения переменных a, b, c поменять местами так, чтобы оказалось a>=b>=c #2
примитивно, пока как умею)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    int a, b, c;
    cin >>a >>b >>c;
    if ((a>=b)&&(b>=c))
        cout <<a <<b <<c;
    else if ((b>=a)&&(a>=c))
        cout <<b <<a <<c;
    else if ((a>=c)&&(c>=b))
        cout <<a <<c <<b;
    else if ((b>c)&&(c>a))
        cout <<b <<c <<a;
    else if ((c>=a)&&(a>=b))
        cout <<c <<a <<b;
    else cout <<c <<b <<a;
    system ("pause >>void");
Ev[G]eN
Эксперт С++
 Аватар для Ev[G]eN
5093 / 1531 / 381
Регистрация: 23.01.2011
Сообщений: 3,148
13.02.2013, 23:22     Введенные значения переменных a, b, c поменять местами так, чтобы оказалось a>=b>=c #3
Kins, тут нужно менять не переменные местами, а их значения. скорее всего
Kins
 Аватар для Kins
59 / 58 / 6
Регистрация: 03.02.2013
Сообщений: 167
13.02.2013, 23:31     Введенные значения переменных a, b, c поменять местами так, чтобы оказалось a>=b>=c #4
Цитата Сообщение от Ev[G]eN Посмотреть сообщение
Kins, тут нужно менять не переменные местами, а их значения. скорее всего
вроде все правильно сделал, хотя может и запарил чутка, но, сомневаюсь конечно -просто голова уже не варит))
veverix
39 / 39 / 2
Регистрация: 14.09.2012
Сообщений: 85
13.02.2013, 23:31     Введенные значения переменных a, b, c поменять местами так, чтобы оказалось a>=b>=c #5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <cmath>
#include <iostream>
using namespace std;
 
void main()
{
    int a = 3, b = 3, c = 5;
           int tempa = a, tempb = b, tempc = c;
           a = max(max(tempa, tempb), tempc);
    b = max(tempb, tempc);
    c = min(tempb, tempc);
    cout<<a<<' '<<b<<' '<<c<<endl;
    system("pause");
}
- способ не очень, но если не знаешь алгоритмов - самое то

C++
1
2
3
4
5
6
7
8
9
#include <alghoritm>
void main()
{
    int a = 3, b = 3, c = 5;
    int* n[3] = {&a, &b, &c};
    sort(n, n+2);
    cout<<a<<' '<<b<<' '<<c<<endl;
    system("pause");
}
- а вот это способ с алгоритмом
Kins
 Аватар для Kins
59 / 58 / 6
Регистрация: 03.02.2013
Сообщений: 167
13.02.2013, 23:35     Введенные значения переменных a, b, c поменять местами так, чтобы оказалось a>=b>=c #6
я помоему самый элементарный способ выложил)

з.ы. Вы еще алгоритм нахождения базы нацистов на темной стороне луны тут опубликуйте)
Venom33
 Аватар для Venom33
19 / 19 / 0
Регистрация: 26.01.2013
Сообщений: 287
13.02.2013, 23:49  [ТС]     Введенные значения переменных a, b, c поменять местами так, чтобы оказалось a>=b>=c #7
Спасибо, ребята!
А есть что-то попроще? на уровне stdio.h, math.h и conio.h? Боюсь, не пойдёт.
Если не сложно, с небольшими комментариями (например, не знаю, что делают tempb, tempc, cout<<a<<' '<<b<<' '<<c<<endl;
anoise
2 / 2 / 0
Регистрация: 11.02.2013
Сообщений: 8
14.02.2013, 00:29     Введенные значения переменных a, b, c поменять местами так, чтобы оказалось a>=b>=c #8
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>
 
using namespace std;
 
void quickSortR(int* a, long N) //сортирует массив состоящий из a b c
 
{
 
 
  long i = 0, j = N;  
  int temp, p;
 
  p = a[ N>>1 ];       
 
  
  do {
    while ( a[i] < p ) i++;
    while ( a[j] > p ) j--;
 
    if (i <= j) {
      temp = a[i]; a[i] = a[j]; a[j] = temp;
      i++; j--;
    }
  } while ( i<=j );
  
  if ( j > 0 ) quickSortR(a, j);
  if ( N > i ) quickSortR(a+i, N-i);
}
 
int main()
{   
 
int a,b,c,arr[3] = {0,0,0};
 
    cout<<"Введите через пробел a b c и нажмите Enter";
 
    cin>>arr[0]>>arr[1]>>arr[2];//Получаем введенные значения
 
    quickSortR(arr,2);//Сортируем по убыванию
    
    a=arr[2];
    b=arr[1];
    c=arr[0];
    
    cout<<"a="<<a<<"b="<<b<<"c="<<c;//Выводим результат
 
    return 0;
}
Рекомендуется к прочтению прикрепленная тема Алгоритмы сортировки
Kins
 Аватар для Kins
59 / 58 / 6
Регистрация: 03.02.2013
Сообщений: 167
14.02.2013, 00:29     Введенные значения переменных a, b, c поменять местами так, чтобы оказалось a>=b>=c #9
cout<<a<<' '<<b<<' '<<c<<endl; - производит вывод переменной а, затем следует пробел (' '), потом переменная b, опять пробел, перменная с и все- конец строки
int tempa = a, tempb = b, tempc = c; - присвоение переменным tempа, tempb, tempс, значений а, b, с
Venom33
 Аватар для Venom33
19 / 19 / 0
Регистрация: 26.01.2013
Сообщений: 287
14.02.2013, 00:57  [ТС]     Введенные значения переменных a, b, c поменять местами так, чтобы оказалось a>=b>=c #10
а что такое "ARR" и как мне доступным языком объяснить, что она там делает? и "temp" непонятно для чего в разных случаях.
знаю,что не силён в С++, но для вас это лёгкий уровень же
veverix
39 / 39 / 2
Регистрация: 14.09.2012
Сообщений: 85
14.02.2013, 05:14     Введенные значения переменных a, b, c поменять местами так, чтобы оказалось a>=b>=c #11
cout - вывод через поток, аналог с stdio -

printf("%i %i %i", a, b, c);

temp-ы ввел, потому что если просто менять значения, в итоге они перезапишутся и останется одно число
MrGrig
176 / 159 / 2
Регистрация: 08.10.2012
Сообщений: 422
14.02.2013, 06:54     Введенные значения переменных a, b, c поменять местами так, чтобы оказалось a>=b>=c #12
Цитата Сообщение от veverix Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <cmath>
#include <iostream>
using namespace std;
void main()
{
    int a = 3, b = 3, c = 5;
    int tempa = a, tempb = b, tempc = c;
    a = max(max(tempa, tempb), tempc);
    b = max(tempb, tempc);
    c = min(tempb, tempc);
    cout<<a<<' '<<b<<' '<<c<<endl;
    system("pause");
}
считать не будет правильно, если с будет максимальным.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void func(int &a, int &b){//Пользовательскя функция, делает перестановку 2х элементов, с помощью "3х стаканов"
    int c=b;
    b=a;
    a=c;
}
 
void main(){
    int mas[3];
    scanf("%d",&mas[0]);//Вводим а б и ц
    scanf("%d",&mas[1]);
    scanf("%d",&mas[2]);
    if(mas[2]>=mas[1])//сравниваем последний и предпоследний если нада меняем
        func(mas[2],mas[1]);
    if(mas[1]>mas[0]){//сравниваем первый и второй если нада меняем
        func(mas[1],mas[0]);
        if(mas[2]>=mas[1])//если условие выполнилось, необходимо еще раз проверить 2й и 3й элементы
            func(mas[2],mas[1]);
    }
    printf("%d %d %d",mas[0],mas[1],mas[2]);
    system("pause");
}
только совет переписать код в ручную а не копипастить, ибо у меня почемуто вылезло туева хуча ошибок и компилятор жаловался на пробелы и переход на новую строку, пытаясь мне предложить поставаить точку с запятой перед сканфом оО + советаю выводить пояснения что когда вводишь.
Venom33
 Аватар для Venom33
19 / 19 / 0
Регистрация: 26.01.2013
Сообщений: 287
14.02.2013, 09:17  [ТС]     Введенные значения переменных a, b, c поменять местами так, чтобы оказалось a>=b>=c #13
Благодарю,ребята! Сколько смог вам, столько и проставил "спасибо" дальше выключилась эта кнопка
veverix
39 / 39 / 2
Регистрация: 14.09.2012
Сообщений: 85
14.02.2013, 19:48     Введенные значения переменных a, b, c поменять местами так, чтобы оказалось a>=b>=c #14
Цитата Сообщение от MrGrig Посмотреть сообщение
считать не будет правильно, если с будет максимальным.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void func(int &a, int &b){//Пользовательскя функция, делает перестановку 2х элементов, с помощью "3х стаканов"
    int c=b;
    b=a;
    a=c;
}
 
void main(){
    int mas[3];
    scanf("%d",&mas[0]);//Вводим а б и ц
    scanf("%d",&mas[1]);
    scanf("%d",&mas[2]);
    if(mas[2]>=mas[1])//сравниваем последний и предпоследний если нада меняем
        func(mas[2],mas[1]);
    if(mas[1]>mas[0]){//сравниваем первый и второй если нада меняем
        func(mas[1],mas[0]);
        if(mas[2]>=mas[1])//если условие выполнилось, необходимо еще раз проверить 2й и 3й элементы
            func(mas[2],mas[1]);
    }
    printf("%d %d %d",mas[0],mas[1],mas[2]);
    system("pause");
}
только совет переписать код в ручную а не копипастить, ибо у меня почемуто вылезло туева хуча ошибок и компилятор жаловался на пробелы и переход на новую строку, пытаясь мне предложить поставаить точку с запятой перед сканфом оО + советаю выводить пояснения что когда вводишь.
Действительно, вот правильный способ:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <cmath>
#include <iostream>
using namespace std;
 
void main()
{
    int a = 2, b = 5, c = 3;
           int tempa = a, tempb = b, tempc = c;
           a = max(max(tempa, tempb), tempc);
    b = min(max(max(tempa, tempb), max(tempb, tempc)), max(tempa, tempc));
    c = min(tempa, min(tempb, tempc));
    cout<<a<<' '<<b<<' '<<c<<endl;
    system("pause");
}
}
Venom33
 Аватар для Venom33
19 / 19 / 0
Регистрация: 26.01.2013
Сообщений: 287
14.02.2013, 20:20  [ТС]     Введенные значения переменных a, b, c поменять местами так, чтобы оказалось a>=b>=c #15
а почему "void func(int &a, int &b)" написан в отдельном цикле от массивов? объясните, пожалуйста. &a,&b- это типа ввод адреса для переменных a и b?
anoise
2 / 2 / 0
Регистрация: 11.02.2013
Сообщений: 8
14.02.2013, 23:11     Введенные значения переменных a, b, c поменять местами так, чтобы оказалось a>=b>=c #16
Venom33, int &a, int &b - это ссылки. Почитайте какую нибудь книжку чтоли по с++... Вопросов много сразу отпадет
Venom33
 Аватар для Venom33
19 / 19 / 0
Регистрация: 26.01.2013
Сообщений: 287
14.02.2013, 23:50  [ТС]     Введенные значения переменных a, b, c поменять местами так, чтобы оказалось a>=b>=c #17
Цитата Сообщение от anoise Посмотреть сообщение
Вопросов много сразу отпадет
меня только этот вопрос интересует так поему же в разных циклах написано? почему не в одном?
MrGrig
176 / 159 / 2
Регистрация: 08.10.2012
Сообщений: 422
15.02.2013, 07:06     Введенные значения переменных a, b, c поменять местами так, чтобы оказалось a>=b>=c #18
Цитата Сообщение от Venom33 Посмотреть сообщение
меня только этот вопрос интересует так поему же в разных циклах написано? почему не в одном?
Не коректный вопрос. func это это внешняя функция. Внешние функции используют для:
1. Уменьшение количества кода
2. Уменьшение расхода динамической памяти
3. Улучшение читабельности кода
4. Особый случай когда функция рекурсивна и должна вызывать саму себя

в данном случае функция выполняет 1 и 3 момент.
т.е. смысл мне 3 раза менять местами переменные, если я могу 1 раз написать функцию и во входные данные кидать нужные мне значения.
2. случай тут не особо виден. Когда из мэйна идет переход в другую функцию, все элементы которые там создаются и никаким явным или неявным способом не передаются из неё удаляются после завершения.
Для примера функция, на вход подается строка или указатель/ссылка на строку, не особо важно. строку нужно разбить на слова и вернуть обратно список слов. Мы заранее не знаем, сколько у нас слов строке, какого размера строка и т.д. Мы можем лишь предполагать. В функции мы можем создать чаровский двумерный массив (пусть будет buf) 1000 на 1000 элементов (это значит в него можно поместить 1000 отдельных подстрок длиною в 999 символов + нольбайт). Далее разбиваем слова вставляем каждое слово в отдельную ячейку массива buf. После проделанной операции мы уже точно знаем сколько слов у нас хранится во временном массиве. создаем динамический 2мерный массив размерностью m - количество строк в buf. И далее в цикле выделяем памяти ромно столько , какая длина слова в подстроке buf[i]. В итоге у нас получается на масив 1000х1000, на например 324хN где N - длина подстроки в каждом из подстрок. Чтобы было понятней вот так покажу.
C++
1
2
3
4
5
6
7
8
9
//вот так будет выглядеть статический массив
1 1 1 1 1 0 0 0
1 1 1 0 0 0 0 0
1 1 1 1 1 1 1 0
1 1 1 1 1 1 1 0
1 1 0 0 0 0 0 0
1 1 1 1 0 0 0 0
1 0 0 0 0 0 0 0
1 1 1 1 1 0 0 0
C++
1
2
3
4
5
6
7
8
9
//А так динамический
1 1 1 1 1
1 1 1
1 1 1 1 1 1 1
1 1 1 1 1 1 1
1 1
1 1 1 1
1
1 1 1 1 1
для чего это?
а для того. тип char "весит" 1 байт => массив 1000х1000 будет весить 1000000 байт = 976 килобайт. А если быть точно уверенным что текст у нас будет максимально большой то сделать массив 10000х1000 такой уже будет весить 9.5 мегобайт. Только вот смысл ворочать им в теле программы если он нужно от него от силы 20-30% и нужен он нам лишь для того чтобы разбить строку на подстроки. В итоге после действия программы мы получим массив который будет мало "весить". А та здоровая дура самоаннигилируется после выполнения функции. Причем время выполнения её будет пару сотен миллисекунд. Вот в общем то зачем пишутся функции. Про рекурсию смысла нет особого рассказывать, т.к. чувствую ваш уровень не достаточен чтобы с моих слов её понять =)
Venom33
 Аватар для Venom33
19 / 19 / 0
Регистрация: 26.01.2013
Сообщений: 287
15.02.2013, 07:27  [ТС]     Введенные значения переменных a, b, c поменять местами так, чтобы оказалось a>=b>=c #19
вот ээто замечательно,благодарю. приду- спасибыы везде нажму
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.02.2013, 07:28     Введенные значения переменных a, b, c поменять местами так, чтобы оказалось a>=b>=c
Еще ссылки по теме:

условный оператор (Поменять значения переменных так, чтобы...) C++
C++ Поменять местами введенные значения
C++ Перераспределить значения данных переменных так, чтобы в A оказалось меньшее из значений, а в B-большее

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
15.02.2013, 07:28     Введенные значения переменных a, b, c поменять местами так, чтобы оказалось a>=b>=c #20
От ТС, как я понял, хотели получить что то вроде такого:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <algorithm>
#include <iostream>
 
 
int main() {
   int a, b, c;
   
   std::cin >> a >> b >> c;
   
   if ( b > a )
      std::swap( a, b );
   
   if ( c > a )
      std::swap( a, c );
   
   if ( c > b )
      std::swap( b, c );
   
   std::cout << a << ' ' << b << ' ' << c << std::endl;
   
   return 0;
}
Yandex
Объявления
15.02.2013, 07:28     Введенные значения переменных a, b, c поменять местами так, чтобы оказалось a>=b>=c
Ответ Создать тему
Опции темы

Текущее время: 04:07. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru