Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
лизи
0 / 0 / 0
Регистрация: 14.11.2011
Сообщений: 104
#1

сдвиг массива - C++

26.11.2011, 22:38. Просмотров 1185. Ответов 7
Метки нет (Все метки)

сдвинуть все элементы массива влево так что бы на первой позиции оказался минимальный элемент
при этом использовать дополнительные массивы нельзя
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.11.2011, 22:38
Здравствуйте! Я подобрал для вас темы с ответами на вопрос сдвиг массива (C++):

Циклический сдвиг массива без использования вспомогательного массива - C++
Ребят, помогите пожадуйста написать лабу...Времени ктастрофически не хватает, буду очень признателен Написать функцию, которая...

Удаление элемента из массива и сдвиг массива - C++
Нужно удалить максимальный элемент массива и сделать сдвиг массива на одну позицию. Нужно сделать без использования vector и динамических...

Циклический сдвиг массива - C++
Напишите программу, которая вводит с клавиатуры непустой массив целых чисел, циклический сдвигает элементы массива вправо на к позиции, и...

Сдвиг элементов массива - C++
Помогите, срочно пожалуйста, проболел из-за весны много, а на завтра сдать нужно Осуществить сдвиг элементов массива Y (m) в направлении...

Побитовый сдвиг массива - C++
Есть двумерный массив int massiv;Нужно сдвинуть первый элемент массива в конец, а все остальные соответственно вперед. В цикле это...

Циклический сдвиг массива - C++
Задание такое. Нужно циклически сдвинуть массив на К элементов вправо. Я сделал сдвиг, только он выбирает К-ый элемент с конца, а мне нужно...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Dekio
Фрилансер
Эксперт С++
5837 / 1218 / 214
Регистрация: 23.11.2010
Сообщений: 3,378
Записей в блоге: 1
26.11.2011, 22:50 #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <algorithm>
#include <iterator>
#include <vector>
 
int main()
{
    int tmp;
    std::vector <int> vec;
    std::cout<<"Enter vector:"<<std::endl;
    while(std::cin>>tmp)
        vec.push_back(tmp);
    std::cout<<"Input vector:"<<std::endl;
    std::copy(vec.begin(), vec.end(), std::ostream_iterator <int> (std::cout," "));
    std::rotate(vec.begin(), std::min_element(vec.begin(), vec.end()), vec.end());
    std::cout<<std::endl<<"Output vector:"<<std::endl;
    std::copy(vec.begin(), vec.end(), std::ostream_iterator <int> (std::cout," "));
    std::cout<<std::endl;
    system("pause");
    return 0;
}
0
лизи
0 / 0 / 0
Регистрация: 14.11.2011
Сообщений: 104
26.11.2011, 23:08  [ТС] #3
блин забыла уточнить
нужно на чистом си код
и из библиотек можно использовать токо stdio conio и math)
0
easybudda
Модератор
Эксперт CЭксперт С++
9625 / 5573 / 947
Регистрация: 25.07.2009
Сообщений: 10,708
26.11.2011, 23:11 #4
C
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 <stdio.h>
#include <string.h>
 
int * min_element(const int * arr, size_t count){
    return ( count < 2 ) ? (int*)arr : ( *arr > *(arr+count-1) ) ? min_element(arr+1, count-1) : min_element(arr, count-1);
}
 
void dump(const int * arr, size_t count){
    while ( count-- )
        printf("%d%c", *arr++, ( count ) ? ' ' : '\n');
}
 
#define SIZE 5
 
int main(void){
    int arr[SIZE] = { 3, 5, 1, 4, 2 };
    size_t diff;
    
    printf("Before:\n");
    dump(arr, SIZE);
    
    for ( diff = min_element(arr, SIZE) - arr; diff; --diff ){
        int t = *arr;
        memmove(arr, arr+1, sizeof(int)*(SIZE-1));
        *(arr+SIZE-1) = t;
    }
    
    printf("After:\n");
    dump(arr, SIZE);
    
    return 0;
}
0
xAtom
915 / 740 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
27.11.2011, 00:08 #5
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdio.h>
 
int main(void)
{
  int arr[] = { 10, 30, 4, 50, 25, 70 };
  int tmp, i, j, size = sizeof(arr)/sizeof(arr[0]);
 
  for(j = i = 0; i < size; i++) {
      if(arr[i] < arr[j])
           j = i;
  }
 
  if(j > 0) {
       while(j--) {
           tmp = arr[0];
           for(i = 0; i < size - 1; arr[i] = arr[i + 1], i++);
           arr[size - 1] = tmp;
       }
  }
  for(i = 0; i < size; i++)
       printf("%d  ", arr[i]);
  getchar();
  return 0;
}
1
Сыроежка
Заблокирован
27.11.2011, 07:15 #6
Цитата Сообщение от лизи Посмотреть сообщение
сдвинуть все элементы массива влево так что бы на первой позиции оказался минимальный элемент
при этом использовать дополнительные массивы нельзя
Очевидно, что ваша задача решается в два приема. Сначала вы находите минимальный элемент в массиве, а затем копируете все элементы, начиная с минимального элемента в начало массива.
Сразу же скажу, что копирование можно выполнить с помощью стандартной функции memcpy, которая объявлена в заголовочном файле <string.h>. Вопрос только упирается в то: разрешается ли вам использовать эту функцию, или требуется, чтобы вы самостоятельно выполнили копирование.

Давайте решать вашу задачу по порядку. Сначала напишем функцию, которая ищет минимальный элемент в массиве. Это функция будет возвращать индекс первого минимального элемента (в массиве может быть несколько минимальных элементов).

C++
1
2
3
4
5
6
7
8
9
10
11
12
unsigned int min_element( int a[], unsigned int n )
{
   unsigned int min = 0;
   unsigned int i;
 
   for ( i = 1; i < n; i++ )
   {
      if ( a[i] < a[min] ) min = i;
   }
 
   return ( min );
}
Итак, с помощью этой функции вы найдете индекс первого минимального элемента в массиве. Теперь вам надо скопировать элементы массива в его начало, начиная с минимума. Напишем соответствующую функцию

C++
1
2
3
4
5
6
void copy( int *dest, const int *source, unsigned int n )
{
   unsigned int i;
 
   for ( i = 0; i < n; i++ ) dest[i] = source[i];
}
Как пользоваться этими функциями. Допустим у вас есть целочисленный массив размерностью N: int a[N];

Тогда сначала ищем индекс минимального элемента:

C++
1
unsigned int min = min_element( a, N );
Затем осуществляем сдвиг элементов

C++
1
copy( a, &a[min], N - min );
Ву а ля, как говорят французы! Вам лишь осталось все это объединить вместе в одной программе.
0
лизи
0 / 0 / 0
Регистрация: 14.11.2011
Сообщений: 104
27.11.2011, 14:55  [ТС] #7
Сыроежка
немного не поняла что за копирование элементов массива в начало
я собиралась сдвигать массив влево вот так
C
1
2
3
4
 x=[0]
for(i=0;i<n-1; i++);
a[i]=a[i++];
a[n-1]=x
но я незнаю как сделать так что бы было первое значение было именно минимальным
0
лизи
0 / 0 / 0
Регистрация: 14.11.2011
Сообщений: 104
17.12.2011, 15:48  [ТС] #8
больше не нужно
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.12.2011, 15:48
Привет! Вот еще темы с ответами:

Сдвиг массива символов - C++
class G { public: char name; char maker; int num; int price; }; G A,B,C; G D; void third(){ int i;

Битовый сдвиг массива - C++
Помогите разобраться с сдвигом влево (выравниванием до начала байта) данных. Задача заключается в том что есть некий массив, в котором...

Циклический сдвиг массива - C++
задача: Осуществить циклический сдвиг элементов квадратной матрицы размерности MxN вправо на k элементов таким образом: элементы 1-й...

Сдвиг элементов массива в лево. - C++
У меня логическая ошибка в этом алгоритме. Я не могу найти ее. Как работает эта часть программы? t=A; for(i=n;i&gt;0;i--) { A=t; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
17.12.2011, 15:48
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru