Помощь - Поиск - Пользователи - Календарь
Полная версия: Обратный порядок
Форум «Всё о Паскале» > Delphi, Assembler и другие языки. > Другие языки
18192123
Дан массив из 10 элементов.
Переставить в обратном порядке элементы массива, расположенные между его минимальным и максимальным элементами.

Вот что получилось, но выдаёт совершенно другие элементы, чем я ввожу....

#include <STDIO.H>
#define NUM 10
void main()
{
  int a[NUM],i;
  printf ("Vvedite 10 chelih 4isel :\n" );
  for (i = 0; i < NUM; i++)
 {
   printf ("%d element massiva --> ", i);
   scanf ("%d", &a[i]);
 }
 int min = a[0], max = a[0], i_min = 0, i_max = 0;
 for (i=0; i<NUM; i++)
 {
  if (a[i] < min)
  {
   min = a[i];
   i_min = i;
  }
 }
  for (i=0; i<NUM; i++)
 {
  if (a[i] > max)
  {
   max = a[i];
   i_max = i;
  }
 }
 int b;
 if (i_min < i_max)
 {

  for ( i = i_min; i <= i_max; i++)
  {
  b = a[i];
  a[i] = a[i_max+1-i];
  a[i_max+1-i] = b;
  }
  }
  else {
   
   b = a[i_min];
   a[i_min] = a[i_max];
   a[i_max] = b;
   for ( i = i_min; i <= i_max; i++)
  {
  b=a[i];
  a[i]=a[i_max+1-i];
  a[i_max+1-i] = b;
  }
  }
  for (i=0; i<NUM; i++)
  printf (" %d",  a[i]);
  
  }



????
Алена
  printf (" %d",  & a[i]); // Здесь ошибка ...


Ты получается выводишь не сами элементы, а их адреса? Вот так будет лучше:
  printf (" %d",  a[i]);
18192123
Цитата(Алена @ 22.03.2007 14:11) *

  printf (" %d",  & a[i]); // Здесь ошибка ...


Ты получается выводишь не сами элементы, а их адреса? Вот так будет лучше:
  printf (" %d",  a[i]);


ой, точно! спасибо!

но теперь выяснилось, что переставляется совсем не то, что нужно....
сново не пойму в чём дело...
Алена
...
// находим индексы мин/макс элементов
 int i_min = 0, i_max = 0;
 for(i = 0; i < NUM; ++i) {
   i_min = (a[i] < a[i_min]) ? i : i_min;
   i_max = (a[i] > a[i_max]) ? i : i_max;
 }

// и меняем порядок следования элементов между ними
 int b;

 if(i_min > i_max) {
   b = i_min;
   i_min = i_max;
   i_max = b;
 }
 int k = 1;
 for(i = i_min + 1; i < i_max - k; ++i) {
   b = a[i];
   a[i] = a[i_max - k];
   a[i_max - k++] = b;
 }
...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.