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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.08.2013, 14:18   #1
rexar89
 
Регистрация: 21.08.2012
Сообщений: 5
По умолчанию Массивы на Си

Здравствуйте помогите пожалуйста сделать задания по программированию.
Задание
В целочисленном векторе vectorn найти минимальный и максимальный элементы. Предусмотреть случай, когда таких элементов нет (все элементы вектора равны между собой). Перевернуть элементы вектора, расположенные между ними (выполнить “поплавок”).

Пример
Входные данные:
n=10
v_min=-5
v_max=10
Исходный вектор:
7 -5 1 3 -2 5 2 0 10 1

Выходные данные:
min=-5 n_min=2
max=10 n_max=9
Выходной вектор:
7 -5 0 2 5 -2 3 1 10 1

Код Си где нужно вставить свои значения
Код:
#include <stdio.h> 
#include <conio.h> 
#include <math.h> 
#include <time.h> 

int main() 
{ 
int i, n, m, vector_min, vector_max, min, max, i_min, i_max; 

time_t t; // текущее время для инициализации 
// генератора случайных чисел 

srand((unsigned) time(&t)); // инициализация генератора 
// случайных чисел 

printf("\nЛабораторная работа №6_1"); 
printf("\nВариант №0"); 
printf("\nПО-11-1"); 
printf("\nПупкин Василий\n"); 

printf("\nВведите нижнюю границу диапазона:"); 
scanf("%d", &vector_min); 
printf("\nВведите верхнюю границу диапазона:"); 
scanf("%d", &vector_max); 
printf("\nВведите размер вектора:"); 
scanf("%d", &n); 

int vector[n]; 

printf("\nИсходный вектор:\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]; 
i_max = 0; 
min = vector[0]; 
i_min = 0; 

for (i=1; i<n ; i++) 
{ 
if (vector[i] > max) 
{ 
max = vector[i]; 
i_max = i; 
} 

if (vector[i] < min) 
{ 
min = vector[i]; 
i_min = i; 
} 
} 

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

vector[i_max] = min; //меняем местами max и min 
vector[i_min] = max; //элементы вектора 

printf("\nВыходной вектор:\n"); 

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

printf("\n"); 

return 0; 
}

Последний раз редактировалось Stilet; 04.08.2013 в 14:21.
rexar89 вне форума Ответить с цитированием
Старый 04.08.2013, 14:22   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
В целочисленном векторе
На классическом Си? Не на С++?
Цитата:
Код Си где нужно вставить свои значения
Так а что не получается?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 04.08.2013, 14:55   #3
rexar89
 
Регистрация: 21.08.2012
Сообщений: 5
По умолчанию

Классический Си.
Необходимо выполнить условия задачи, которая описана выше, и в данный пример нужно написать код чтоб выполнялись условия задачи
rexar89 вне форума Ответить с цитированием
Старый 04.08.2013, 16:32   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Перевернуть элементы вектора, расположенные между ними
Код:
printf("\nВыходной вектор:\n"); 
if(i_max<i_min){int k=i_max;i_max=i_min;i_min=k;}
for (i=0; i<i_min; i++) printf(" %5d", vector[i]); 
for (i=i_max; i>i_min; i--) printf(" %5d", vector[i]); 
for (i=i_max; i<n; i++) printf(" %5d", vector[i]);
Не проверял, но попробуй.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 05.08.2013, 15:19   #5
Nuklon
Форумчанин
 
Аватар для Nuklon
 
Регистрация: 05.04.2012
Сообщений: 134
По умолчанию

Код:
#include <stdio.h>




int _between(int* fe, int* le) {
     int* p, *ta, *tb, tmp;

     p = ta = tb = fe;
     while(p != le) {
         if(*p < *ta)
             ta = p;
         else if(*p > *tb)
             tb = p;
         ++p;
     }

     if(*ta == *tb)
         return 0;

     p  = (ta < tb) ? ta : tb;
     tb = (ta > tb) ? ta : tb;
     ta = p;

     for(++ta, --tb; ta < tb; ++ta, --tb) {
         tmp = *ta;
        *ta  = *tb;
        *tb  = tmp;
     }
     return 1;
}



int main(void)
{
     int arr[] = { 7, -5, 1, 3, -2, 5, 2, 0, 10, 1 };
     int i, size  = sizeof(arr)/sizeof(arr[0]);

     // исходный массив
     for(i = 0; i < size; i++)
         printf("%d ", arr[i]);
     putchar('\n');


     if(! _between(arr, arr + size))
          puts("bad cmp !");
     else {
          // обработанный массив
          for(i = 0; i < size; i++)
               printf("%d ", arr[i]);
          putchar('\n');

     }
     return 0;
}
Тест: http://codepad.org/8x3GzvMn
Nuklon вне форума Ответить с цитированием
Старый 05.08.2013, 15:28   #6
rexar89
 
Регистрация: 21.08.2012
Сообщений: 5
По умолчанию

Спасибо большое всем попробую все ваши варианты)
rexar89 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Одномерные массивы, двумерные массивы, строки Sand093 C++ Builder 11 20.05.2012 21:48
Двумерные массивы(матрица) 2)Строковые массивы(строки): 3)Структуры nuriyat Помощь студентам 1 21.01.2012 16:16
Двумерные массивы(массивы указателей на массивы) krytishka99 Помощь студентам 1 29.12.2011 19:51
указатели на массивы и массивы указателей blacktener Общие вопросы C/C++ 16 13.06.2011 20:45
Даны одномерные массивы А и В. Сформировать массивы, состоящие из элемент LyaLya Помощь студентам 15 20.12.2009 14:12