Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Используя оператор switch вывести по возрастанию 3 числа / 14 сообщений из 14, страница 1 из 1
01.03.2017, 14:39
    #39412457
nightofpromises
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Используя оператор switch вывести по возрастанию 3 числа
В три переменные a, b и с записаны три целых попарно неравных между собой числа. Написать программу, которая переставит числа в переменных таким образом, чтобы при выводе на экран последовательность a, b и с оказалась строго возрастающей. Помогите мне
Код: plaintext
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.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
#include <iostream>
 
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
 
{
 
setlocale (LC_CTYPE, "rus"); // русификация
 
int a, b, c; // объявление переменных
 
cout << "Введите три числа: \n";
 
cout << "a = ";
 
cin >> a;
 
cout << "b = ";
 
cin >> b;
 
cout << "c = ";
 
cin >> c;
 
bool f = (a > b && b > c);
 
switch(f)
 
{
 
case 1:
 
cout << c << b << a;
 
case 0:
 
bool f1 = (b < a && a < c);
 
}
 
if(b>a)
 
{
 
cout << "Возрастающая последовательность" << b << a << c;
 
}
 
else
 
{
 
bool f2 = (c < a && a < b);
 
}
 
if(c>b)
 
{
 
cout << "Возрастающая последовательность" << c << a << b;
 
}
 
else
 
{
 
bool f3 = (a < b && b < c);
 
}
 
system("pause");
 
return 0;
 
}
...
Рейтинг: 0 / 0
01.03.2017, 20:06
    #39412799
inse
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Используя оператор switch вывести по возрастанию 3 числа
nightofpromises,

switch для этой задачи не лучший вариант, конечно возможно, но к чему такие извращения. Более практичным будет использование контейнера std::list (список). Алгоритм действий таков:
добавьте переменные в список;

отсортируйте список стандартным алгоритмом сортировки;

переопределите переменные по порядку списка;

выведите результат.
...
Рейтинг: 0 / 0
01.03.2017, 21:09
    #39412829
SashaMercury
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Используя оператор switch вывести по возрастанию 3 числа
nightofpromises,
только такое решение :D

Код: plaintext
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.
#include <cstdio>
#include <cstdlib>
#define SIZE_ARRAY (3)

int main()
{
	int a[SIZE_ARRAY] = { 5,2,-10 };
	while (1) {
		int isSorted = a[2] > a[1] && a[1] > a[0];
		switch (isSorted)
		{
		case 0:
		{
			int standBackIndex = rand() % SIZE_ARRAY;
			int* p[SIZE_ARRAY - 1];
			int** pp = p;
			for (int j = 0;j < SIZE_ARRAY;++j) {
				j != standBackIndex ? *pp++ = a + j : 0;
			}
			*p[0] ^= *p[1] ^= *p[0] ^= *p[1];
			break;
		}	
		case 1:
			goto doyoulikegotoandcanineverbethereQ;
		}
	}
doyoulikegotoandcanineverbethereQ:
	for (int i = 0;i < SIZE_ARRAY;++i) {
		printf("%i ", a[i]);
	}
    return 0;
}



Самостоятельно потестируйте)
...
Рейтинг: 0 / 0
02.03.2017, 00:23
    #39412887
booby
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Используя оператор switch вывести по возрастанию 3 числа
nightofpromisesВ три переменные a, b и с записаны три целых попарно неравных между собой числа. Написать программу, которая переставит числа в переменных таким образом, чтобы при выводе на экран последовательность a, b и с оказалась строго возрастающей. Помогите мне

помогаю:
nightofpromisesВ три переменные a, b и с записаны три целых попарно неравных между собой числа.

Попарно неравных , это значит, что никакая из разностей (a-b), (a-c), (b-c)
не окажется раной нулю. Ее знак всегда будет 1 или -1, без третьего значения.
Раз "настоящий" sign с возможным равенством не ожидается, то для представления знака разности будем использовать два числа: 1 для положительных значений, 0 для отрицательных.
То есть такой "редуцированный" знак может определяться чем-то вроде
#define sgnr(a) (((a>0) ? (1) : (0)))

Каждую из разностей, оцененную таким образом, можно разместить в собственный бит
что-нибудь вроде
unsigned char f = (sgnr((b-c))<<3)|(sgnr((a-c))<<2)|(sgnr((a-b)))

Т.к. в f заняты 3 бита, то набор значений для проверки в switch - от 0 до 7 включительно.

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

Осталось внимательно посмотреть - какие значения f интерпретируются разумным образом в
выходную последовательность, а какие означают логически невозможную комбинацию.

Например, 0, означает, что (c>b), (c>a), (b>a) - это допустимая комбинация, вывод: a<b<c
1 означает, что (c>b), (c>a), (a>b) - тоже допустимая комбинация, вывод: b<a<c
2 - (c>b), (a>c),(b>a) - (единственная) недопустимая комбинация, ее можно вообще не выписывать...
3 - (c>b), (a>c),(a>b) - вывод: b<c<a
...
и так далее до 7.
...
Рейтинг: 0 / 0
02.03.2017, 00:29
    #39412889
booby
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Используя оператор switch вывести по возрастанию 3 числа
booby,

из восьми комбинаций две должны оказаться лишними, так что кроме двойки еще кто-то окажется выброшенным.
...
Рейтинг: 0 / 0
02.03.2017, 01:06
    #39412895
booby
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Используя оператор switch вывести по возрастанию 3 числа
booby,

2 и 3 - это 1 и 2
...
Рейтинг: 0 / 0
02.03.2017, 19:37
    #39413344
д0kХ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Используя оператор switch вывести по возрастанию 3 числа
nightofpromisesВ три переменные a, b и с записаны три целых попарно неравных между собой числа. Написать программу, которая переставит числа в переменных таким образом, чтобы при выводе на экран последовательность a, b и с оказалась строго возрастающей. Помогите мне
Код: plaintext
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.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
#include <iostream>
 
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
 
{
 
setlocale (LC_CTYPE, "rus"); // русификация
 
int a, b, c; // объявление переменных
 
cout << "Введите три числа: \n";
 
cout << "a = ";
 
cin >> a;
 
cout << "b = ";
 
cin >> b;
 
cout << "c = ";
 
cin >> c;
 
bool f = (a > b && b > c);
 
switch(f)
 
{
 
case 1:
 
cout << c << b << a;
 
case 0:
 
bool f1 = (b < a && a < c);
 
}
 
if(b>a)
 
{
 
cout << "Возрастающая последовательность" << b << a << c;
 
}
 
else
 
{
 
bool f2 = (c < a && a < b);
 
}
 
if(c>b)
 
{
 
cout << "Возрастающая последовательность" << c << a << b;
 
}
 
else
 
{
 
bool f3 = (a < b && b < c);
 
}
 
system("pause");
 
return 0;
 
}




Переподу не показывайте,
он подумает, что вы над ним издеваетесь

Код: plaintext
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.
49.
50.
51.
52.
53.
#include <iostream>
#include <stdio.h>

using namespace std;

#define ARRAY_SZ (3)

int main() {

	int  abc[ARRAY_SZ];
	int &a=abc[0];
	int &b=abc[1];
	int &c=abc[2];

	cout << "a = ";
	cin >> a;
	cout << "b = ";
	cin >> b;
	cout << "c = ";
	cin >> c;

	for (int i=0; i<ARRAY_SZ-1; i++)
	{
		if(abc[i]==abc[i+1])
		{
			cout<<"Нарушено условие парности" <<endl;
          return 255;
		};
		// bool lt=abc[i]>abc[i+1];
		int j=i+1;
		while (j <= ARRAY_SZ-1 )
		{
			switch  ( abc[i]>abc[j] ) {
        		case true: {
        			int z=abc[i];
        			abc[i]=abc[j];
        			abc[j]=z;
        			printf ( "%d <-> %d\n" ,  abc[j], abc[i] );
        		} break;
		  };
			j+=1;
        };
	};

	for (int i=0; i<ARRAY_SZ; i++)
	{
		cout<< abc[i] <<" ";
	};

	cout<<endl;


	return 0;
...
Рейтинг: 0 / 0
02.03.2017, 19:54
    #39413349
д0kХ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Используя оператор switch вывести по возрастанию 3 числа
Если вы хотите потролить препода
и чему то научиться то в цикле

Код: plaintext
1.
2.
3.
4.
for (int i=0; i<ARRAY_SZ; i++)
	{
		cout<< abc[i] <<" ";
	};



добавьте в строчку cout<< вывод имени переменной.
...
Рейтинг: 0 / 0
02.03.2017, 20:53
    #39413362
д0kХ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Используя оператор switch вывести по возрастанию 3 числа
А перед строчкой

напишите коментарий

Код: plaintext
1.
2.
3.
// Играем в наперстки :) 
//  кручу верчу запутать Вас хочу
for (int i=0; i<ARRAY_SZ-1; i++)
...
Рейтинг: 0 / 0
12.03.2017, 21:45
    #39417735
Пётр Седов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Используя оператор switch вывести по возрастанию 3 числа
inseБолее практичным будет использование контейнера std::list (список). Алгоритм действий таков:
добавьте переменные в список;

отсортируйте список стандартным алгоритмом сортировки;
Стандартные функции сортировки std::sort / std::stable_sort требуют random-access-итераторы, а у std::list всего лишь bidirectional-итераторы. У std::list есть свой собственный метод сортировки, std::list::sort .
...
Рейтинг: 0 / 0
13.03.2017, 20:19
    #39418422
Falun
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Используя оператор switch вывести по возрастанию 3 числа
Сколько вообще времени нужно учится, чтобы свободно работать в этой программе?
...
Рейтинг: 0 / 0
13.03.2017, 23:35
    #39418516
Пётр Седов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Используя оператор switch вывести по возрастанию 3 числа
FalunСколько вообще времени нужно учится, чтобы свободно работать в этой программе?В какой программе?
...
Рейтинг: 0 / 0
14.03.2017, 05:29
    #39418557
CEMb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Используя оператор switch вывести по возрастанию 3 числа
FalunСколько вообще времени нужно учится, чтобы свободно работать в этой программе?с++ подобен живописи: можно взять в первый день в руки кисть и краски и даже что-то хорошее суметь нарисовать за полчаса. Но при этом можно учиться всю жизнь, чтобы рисовать более сложные вещи.
...
Рейтинг: 0 / 0
14.03.2017, 11:27
    #39418689
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Используя оператор switch вывести по возрастанию 3 числа
Используя булеву алгебру мы можем оператор switch сделать if-ом и таким образом
решить задачу сортировки.

Автор такое решение хотел получить?
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Используя оператор switch вывести по возрастанию 3 числа / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]