Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.02.2012, 14:51   #1
fbsd
 
Регистрация: 14.12.2009
Сообщений: 9
По умолчанию второй по величине элемент вектора

Приветствую, пожалуйста помогите доработать программу:

В целочисленном векторе найти его вторые по значению минимальный и максимальный элементы. Предусмотреть случай, когда таких элементов нет. Элементы вектора, расположенные между ними, отсортировать по возрастанию.
Например:
Входные данные:
n=10
v_min=-5
v_max=10
Исходный вектор:
7 3 1 -5 -2 5 2 0 10 1

Выходные данные:
min_2=-2 n_min_2=5
max_2=7 n_max_2=1
Выходной вектор:
7 -5 1 3 -2 5 2 0 10 1

нахождение максимального и минимального описал, а дальше сообразить не выходит

Код:

int main()
{
	int i, n, m, vector_min, vector_max, min, max, i_min, i_max, max2;
	time_t t;		
		
	srand((unsigned) time(&t));	
	
	printf("\nVvedite nizhnuu granicu diapazona:");
	scanf("%d", &vector_min);
	printf("\nVvedite verhnuu granicu diapazona:");
	scanf("%d", &vector_max);
	printf("\nVvedite razmer vektora:");
	scanf("%d", &n);
	
	int vector[n];
	
	printf("\nIshodnui vektor:\n");
	m = vector_max-vector_min + 1;
	for (i=0; i<n; i++)
	{
	         vector[i]=rand()% m + vector_min;
		 printf(" %5d", vector[i]);
	}
	printf("\n");
	
	max = vector[0];
	i_max = 0;
	min = vector[0];
	i_min = 0;
	
	for (i=0; i<n ; i++)
	{
		if (vector[i] > max)
		{
			max = vector[i];
			i_max = i;
		}
		if (vector[i] < min)
		{
			min = vector[i];
			i_min = i;
		}
	}

	i_max++;
	i_min++;
	printf("\nmax=%d  i_max=%d", max, i_max);
	printf("\nmin=%d  i_min=%d\n", min, i_min);

Последний раз редактировалось Stilet; 12.02.2012 в 16:12.
fbsd вне форума Ответить с цитированием
Старый 16.02.2012, 16:35   #2
fbsd
 
Регистрация: 14.12.2009
Сообщений: 9
По умолчанию

написал, если кому потребуется:
Код:
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <time.h>

int main()
{
	int i, j, k, n, m, k1,d, vector_min, vector_max, min, max, i_min, i_max, i_min2, i_max2, max2, min2;

	time_t t;		// òåêóùåå âðåìÿ äëÿ èíèöèàëèçàöèè 
		 		// ãåíåðàòîðà ñëó÷àéíûõ ÷èñåë
					
	srand((unsigned) time(&t));	// èíèöèàëèçàöèÿ ãåíåðàòîðà
							// ñëó÷àéíûõ ÷èñåë

	printf("\nVvedite nizhnuu granicu diapazona:");
	scanf("%d", &vector_min);
	printf("\nVvedite verhnuu granicu diapazona:");
	scanf("%d", &vector_max);
	printf("\nVvedite razmer vektora:");
	scanf("%d", &n);
	
	int vector[n];
	
	printf("\nIshodnui vektor:\n");

	m = vector_max-vector_min + 1;
	
	for (i=0; i<n; i++)
	{
		// ïîëó÷åíèå ñëó÷àéíîãî ÷èñëà â äèàïàçîíå
		// îò vector_min  äî  vector_max
		
		vector[i]=rand()% m + vector_min;
		
	    printf(" %5d", vector[i]);
	}

	printf("\n");
	
    max = vector[0];
	min = vector[0];
//ishem max i min elementi
	for (i=1; i<n-1 ; i++)
	{
		if (vector[i] > max)
		  max = vector[i];
		if (vector[i] < min)
		  min = vector[i];
	}
//ishem vtorue max i min elementi cherez sravnenie s pervumi
    min2 = max;
    max2 = min;
    for (i=0; i<n-1; i++)
	{
		if (min2>vector[i] && vector[i]!=min)	
		{
			min2 = vector[i];
			i_min2 = i;
		} 	
		if (max2<vector[i] && vector[i]!=max)
		{
			max2 = vector[i];
			i_max2 = i;
		}
	}
//esli takih elementov net	
	if (max2 == min2)
	 printf("\nMAX i MIN odno i to zhe chislo");
	 
	printf("\nmax2=%d  i_max=%d", max2, i_max2);
	printf("\nmin2=%d  i_min=%d\n", min2, i_min2);
//organizaciya znachenii dlya cikla sortirovki		
	if (i_max2>i_min2)
	{
		i_min = i_min2;
		i_max = i_max2;
	} 
	else
	{
		i_min = i_max2;
		i_max = i_min2;
	}

	if ((i_max-i_min) >= 1)
	{
		for (i=i_min+1; i<i_max-1; i++)
		{
			for (j=i; j<i_max-1; j++)
			{
				if (vector[i]>vector[i+1])	
		 		{
 		 			 k = vector[i];
 					 vector[i] = vector[i+1];
					 vector[i+1] = k; 
 				}
 			}
		}
		 
	}
	printf("\nVuhodnoi:\n");

	for (i=0; i<n; i++)
	    printf(" %5d", vector[i]);

	printf("\n");

	return 0;
}
.
fbsd вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Второй по величине элемент в массиве.Prologue. Nicko_mt Помощь студентам 0 07.10.2011 23:35
Найти второй по величине элемент массива (за два прохода; за один проход) (на Паскале) Мaрина Помощь студентам 2 26.09.2011 13:49
Найти второй по величине элемент (assembler) Rom@shka Помощь студентам 3 22.06.2009 20:07
[C++] Поменять местами наименьший и второй по величине элементы StudeHt Помощь студентам 2 10.06.2009 23:33
Динамика. Поменять местами наименьший и второй по величине элементы StudeHt Паскаль, Turbo Pascal, PascalABC.NET 3 27.05.2009 02:20