powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Используя оператор switch вывести по возрастанию 3 числа
14 сообщений из 14, страница 1 из 1
Используя оператор switch вывести по возрастанию 3 числа
    #39412457
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;
 
}
...
Рейтинг: 0 / 0
Используя оператор switch вывести по возрастанию 3 числа
    #39412799
inse
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
nightofpromises,

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

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

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

выведите результат.
...
Рейтинг: 0 / 0
Используя оператор switch вывести по возрастанию 3 числа
    #39412829
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Используя оператор switch вывести по возрастанию 3 числа
    #39412887
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Используя оператор switch вывести по возрастанию 3 числа
    #39412889
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby,

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

2 и 3 - это 1 и 2
...
Рейтинг: 0 / 0
Используя оператор switch вывести по возрастанию 3 числа
    #39413344
д0kХ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Используя оператор switch вывести по возрастанию 3 числа
    #39413349
д0kХ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если вы хотите потролить препода
и чему то научиться то в цикле

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



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

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

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

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

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


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