Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 5.00/26: Рейтинг темы: голосов - 26, средняя оценка - 5.00
Venom33
22 / 22 / 0
Регистрация: 26.01.2013
Сообщений: 300
1

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

13.02.2013, 22:46. Просмотров 4891. Ответов 20
Метки нет (Все метки)

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

Значения переменных а, Ь и с поменять местами так, чтобы оказалось а >= Ь >= с.
Значения переменных а, Ь и с поменять местами так, чтобы оказалось а >= Ь >= с. помогите...

Значения переменных поменять местами так, чтобы они оказались упорядоченными по возрастанию
1) Найти длину окружности и площадь круга заданного радиуса R. Для значения пи использовать 3.14....

Перераспределить значения данных переменных так, чтобы в A оказалось меньшее из значений, а в B-большее
Даны две переменные вещественного типа: A, B. Перераспределить значения данных переменных так,...

Значения переменных X, Y, Z поменять местами так
Значения переменных X, Y, Z поменять местами так, чтобы они оказались упорядоченными по убыванию....

Поменять значения переменных так, чтобы x1 < x2 > x3 < x4
Выполнить с использованием оператора if и ?: Даны вещественные x1, x2, x3, x4 . Поменять значения...

20
Kins
59 / 58 / 7
Регистрация: 03.02.2013
Сообщений: 167
13.02.2013, 23:15 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");
1
Ev[G]eN
iOS/Android Developer
Эксперт С++
5126 / 1563 / 952
Регистрация: 23.01.2011
Сообщений: 3,192
Завершенные тесты: 1
13.02.2013, 23:22 3
Kins, тут нужно менять не переменные местами, а их значения. скорее всего
1
Kins
59 / 58 / 7
Регистрация: 03.02.2013
Сообщений: 167
13.02.2013, 23:31 4
Цитата Сообщение от Ev[G]eN Посмотреть сообщение
Kins, тут нужно менять не переменные местами, а их значения. скорее всего
вроде все правильно сделал, хотя может и запарил чутка, но, сомневаюсь конечно -просто голова уже не варит))
1
13.02.2013, 23:31
veverix
39 / 39 / 5
Регистрация: 14.09.2012
Сообщений: 85
13.02.2013, 23:31 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");
}
- а вот это способ с алгоритмом
1
Kins
59 / 58 / 7
Регистрация: 03.02.2013
Сообщений: 167
13.02.2013, 23:35 6
я помоему самый элементарный способ выложил)

з.ы. Вы еще алгоритм нахождения базы нацистов на темной стороне луны тут опубликуйте)
1
Venom33
22 / 22 / 0
Регистрация: 26.01.2013
Сообщений: 300
13.02.2013, 23:49  [ТС] 7
Спасибо, ребята!
А есть что-то попроще? на уровне stdio.h, math.h и conio.h? Боюсь, не пойдёт.
Если не сложно, с небольшими комментариями (например, не знаю, что делают tempb, tempc, cout<<a<<' '<<b<<' '<<c<<endl;
0
anoise
2 / 2 / 1
Регистрация: 11.02.2013
Сообщений: 8
14.02.2013, 00:29 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;
}
Рекомендуется к прочтению прикрепленная тема Алгоритмы сортировки
1
Kins
59 / 58 / 7
Регистрация: 03.02.2013
Сообщений: 167
14.02.2013, 00:29 9
cout<<a<<' '<<b<<' '<<c<<endl; - производит вывод переменной а, затем следует пробел (' '), потом переменная b, опять пробел, перменная с и все- конец строки
int tempa = a, tempb = b, tempc = c; - присвоение переменным tempа, tempb, tempс, значений а, b, с
1
Venom33
22 / 22 / 0
Регистрация: 26.01.2013
Сообщений: 300
14.02.2013, 00:57  [ТС] 10
а что такое "ARR" и как мне доступным языком объяснить, что она там делает? и "temp" непонятно для чего в разных случаях.
знаю,что не силён в С++, но для вас это лёгкий уровень же
0
veverix
39 / 39 / 5
Регистрация: 14.09.2012
Сообщений: 85
14.02.2013, 05:14 11
cout - вывод через поток, аналог с stdio -

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

temp-ы ввел, потому что если просто менять значения, в итоге они перезапишутся и останется одно число
1
MrGrig
177 / 160 / 38
Регистрация: 08.10.2012
Сообщений: 423
14.02.2013, 06:54 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");
}
только совет переписать код в ручную а не копипастить, ибо у меня почемуто вылезло туева хуча ошибок и компилятор жаловался на пробелы и переход на новую строку, пытаясь мне предложить поставаить точку с запятой перед сканфом оО + советаю выводить пояснения что когда вводишь.
2
Venom33
22 / 22 / 0
Регистрация: 26.01.2013
Сообщений: 300
14.02.2013, 09:17  [ТС] 13
Благодарю,ребята! Сколько смог вам, столько и проставил "спасибо" дальше выключилась эта кнопка
0
veverix
39 / 39 / 5
Регистрация: 14.09.2012
Сообщений: 85
14.02.2013, 19:48 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");
}
}
1
Venom33
22 / 22 / 0
Регистрация: 26.01.2013
Сообщений: 300
14.02.2013, 20:20  [ТС] 15
а почему "void func(int &a, int &b)" написан в отдельном цикле от массивов? объясните, пожалуйста. &a,&b- это типа ввод адреса для переменных a и b?
0
anoise
2 / 2 / 1
Регистрация: 11.02.2013
Сообщений: 8
14.02.2013, 23:11 16
Venom33, int &a, int &b - это ссылки. Почитайте какую нибудь книжку чтоли по с++... Вопросов много сразу отпадет
1
Venom33
22 / 22 / 0
Регистрация: 26.01.2013
Сообщений: 300
14.02.2013, 23:50  [ТС] 17
Цитата Сообщение от anoise Посмотреть сообщение
Вопросов много сразу отпадет
меня только этот вопрос интересует так поему же в разных циклах написано? почему не в одном?
0
MrGrig
177 / 160 / 38
Регистрация: 08.10.2012
Сообщений: 423
15.02.2013, 07:06 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% и нужен он нам лишь для того чтобы разбить строку на подстроки. В итоге после действия программы мы получим массив который будет мало "весить". А та здоровая дура самоаннигилируется после выполнения функции. Причем время выполнения её будет пару сотен миллисекунд. Вот в общем то зачем пишутся функции. Про рекурсию смысла нет особого рассказывать, т.к. чувствую ваш уровень не достаточен чтобы с моих слов её понять =)
1
Venom33
22 / 22 / 0
Регистрация: 26.01.2013
Сообщений: 300
15.02.2013, 07:27  [ТС] 19
вот ээто замечательно,благодарю. приду- спасибыы везде нажму
0
Toshkarik
1168 / 881 / 94
Регистрация: 03.08.2011
Сообщений: 2,450
Завершенные тесты: 1
15.02.2013, 07:28 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;
}
1
15.02.2013, 07:28
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.02.2013, 07:28

Значение переменных поменять местами так, чтобы они оказались упорядоченными по возрастанию
Здравствуйте дорогие форумчане! помогите пожалуйта с решением задачки на С++ . Значение переменных...

Значение переменных поменять местами так, чтобы они оказались упорядоченными по возрастанию
Спасибо огромное Инфинити!!! за прошлый ответ . Робот может перемещаться в четырех...

Условный оператор: поменять значения переменных так, чтобы выполнилось условие
Даны вещественные x1, x2, x3, x4 . Поменять значения переменных так, чтобы \chi 1 \geq \chi 2;...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

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