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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 31.05.2012, 01:23   #1
xEk
Пользователь
 
Регистрация: 23.11.2011
Сообщений: 19
Вопрос Перестановка элементов.

Подскажите как реализовать перестановку элементов массива в заданом промежутке? Вот примерно написал
Код:
#include <stdio.h>
#include <stdlib.h>
int main (void)
{
int n=20,i,max,maxind,min,minind,j;
int a[n];
srand(11);
for(i=0;i<n;i++)
a[i]=rand()%101-50;
printf("\n\nARRAY A\n\n");
for(i=0;i<n;i++)
printf("%5i",a[i]);

max=a[0];
for(i=1;i<n;i++)
{
if(max<a[i])
{
max=a[i];
maxind=i;
}
}
printf("\nMax = %i",max); printf("\nMaxind = %i",maxind);

min=a[0];
for (i=1;i<n;i++)
{
if(min>a[i])
{
min=a[i];
minind=i;
}
}
printf("\nMin = %i",min); printf("\nMinind = %i",minind);

int b[n];
b[n]=a[n];

for(i=0;i<minind;i++)
{
b[i]=a[i];
}
for(i=maxind;i<n;i++)
{
b[i]=a[i];
}

for(i=maxind,j=minind;i>minind-1;i--,j++)
{
b[j]=a[i];
}
printf("\n\nNew massive\n\n");
for(i=0;i<n;i++)
printf("%5i",b[i]);


return 0;
}
но она не правильно работает если минимальный индекс больше максимального... попробовал исправить, но ничего не получается
Код:
if(minind<maxind)
{for(i=0;i<minind;i++)
{
b[i]=a[i];
}
for(i=maxind;i<n;i++)
{
b[i]=a[i];
}for(i=maxind,j=minind;i>minind-1;i--,j++)
{
b[j]=a[i];
}}

else
{for(i=0;i<maxind;i++)
{
b[i]=a[i];
}
for(i=minind;i<n;i++)
{
b[i]=a[i];
}
for(i=minind,j=maxind;j>maxind-1;j--,i++)
{
b[j]=a[i];
}}
xEk вне форума Ответить с цитированием
Старый 31.05.2012, 19:43   #2
<- DelpHIFanat ->
Пользователь
 
Аватар для <- DelpHIFanat ->
 
Регистрация: 07.11.2011
Сообщений: 58
По умолчанию

Насколько я понял задачу, требуется переставить задом наперёд элементы, расположенные между минимальным и максимальным, включая сами эти элементы (в следующий раз пишите условие задачи - намного проще будет понять, что Вы хотели сделать, и что из этого не получилось). Если Ваш код работает при условии, что индекс максимального элемента больше индекса минимального, то проще всего поменять их значениями:

Код:
int tmp;
...
if (maxind<minind)
{
    tmp = maxind;
    maxind = minind;
    minind = tmp;
}
А вместо этих циклов:
Код:
for(i=0;i<minind;i++)
{
b[i]=a[i];
}
for(i=maxind;i<n;i++)
{
b[i]=a[i];
}
Я бы скопировал все элементы одного массива в другой (в Паскале можно просто присвоить один массив другом (разумеется, если они одного типа), а, вот, в Си не знаю как сделать это по-человечески (всегда можно циклом)). Можно даже вообще не задавать второй массив (этот вариант предпочтительней, если исходный массив больше не нужен) , а просто менять значения элементов в цикле.

Код:
tmp = a[i];
a[i] = a[j];
a[j] = tmp;
Где, например, i - увеличивается (от minind до maxind), а j изначально равна maxind и с каждым шагом цикла уменьшается (или наоборот).

При поиске этих элементов вполне можно обойтись одним циклом вместо двух:
Код:
max=a[0];
min=a[0];
for(i=1;i<n;i++)
{               
if(max<a[i])
{
max=a[i];
maxind=i;
}
if(min>a[i])
{
min=a[i];
minind=i;
}
}
printf("\nMax = %i",max); printf("\nMaxind = %i",maxind);
printf("\nMin = %i",min); printf("\nMinind = %i",minind);
И ещё, форматируйте код - так и самому намного проще разобраться будет!
Лучше вообще не иметь знаний о чём-то, чем иметь неправильные знания об этом!..
<- DelpHIFanat -> вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
перестановка элементов массива eduard93 Помощь студентам 3 15.12.2011 18:52
Перестановка элементов матрицы andreysss Помощь студентам 1 13.12.2010 20:51
перестановка элементов массива Darknes Общие вопросы C/C++ 1 03.10.2010 19:21
перестановка элементов массива. DiLemma Помощь студентам 2 29.04.2010 23:08
Перестановка элементов в списке Adya Помощь студентам 0 26.08.2009 15:11