Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Решение. Сначала надо определить, сколько места в памяти надо выделить для массива В



Сначала надо определить, сколько места в памяти надо выделить для массива В. В «худшем» случае все элементы в массиве А будут положительными и войдут в массив В, поэтому массив В должен иметь такой же размер, что и массив А.

Можно предположить такой способ: просматривать весь массив А, и если А[i]>0, переписать его значение в B[i].

А   -1   -2   –––––––® В   ?   ?  

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

Более красивый способ состоит в следующем. Объявляем временную переменную-счетчик k, в которой будем хранить количество найденных положительных элементов. Сначала она равна нулю. Если нашли очередной положительный элемент, то ставим его в ячейку В[k] и увеличиваем счетчик. Таким образом, все нужные элементы стоят в начале массива B.

А   -1   -2   –––––––® В       ? ?

#include <stdio.h>

void main()

{

const int n=10;

int i, A[n], B[n], k=0;

// ввод массива А

for(i=0; i<n; i++)

if (A[i]>0) // можно сделать и так:

{ B[k]=A[i]; k++; } // if (A[i]>0) B[k++]=A[i];

printf("Результат:\n");

for(i=0; i<k; i++)

printf("%d ", B[i]);

}

Обратите внимание, что переменная в последнем цикле изменяется от 1 до k, так что на экран выводятся только реально используемые элементы массива В.

6. Перестановка элементов массива в обратном порядке

Пример. Не используя других массивов, переставить элементы целочисленного массива в обратном порядке.

Решение. Для всех индексов необходимо каждый i -й элемент поменять местами с -м элементом. Обратите внимание, что для обмена местами левой и правой половин массива цикл должен отработать только раз при любом n (как четном, так и нечетном).

#include <stdio.h>

void main()

{

const int n=10;

int A[n], i, t;

// ввод массива А

for(i=0; i<n/2; i++)

{ t=A[i]; A[i]=A[n-i-1]; A[n-i-1]=t; }

printf("Элементы массива после перестановки: \n");

for(i=0; i<n; i++)

printf(" %d", A[i]);

}

7. Циклический сдвиг элементов массива

При циклическом сдвиге вправо первый элемент переходит на место второго, второй – на место третьего и т.д., а последний элемент – на место первого.

          –––––––®          

При циклическом сдвиге влево первый элемент переходит на место последнего, второй – на место первого, третий – на место второго и т.д.

          –––––––®          

Пример. Значения массива сдвинуть циклически вправо на одну позицию.

При выполнении циклического сдвига нам будет нужна временная переменная – в ней мы сохраним значение последнего элемента, пока будем переставлять остальные. Обратите внимание, что мы начинаем с конца массива, иначе массив заполнится первым элементом. Первый элемент ставится отдельно – копированием из временной переменной.

#include <stdio.h>

void main()

{

const int n=10;

int A[n], i, t;

// ввод массива А

t=A[n-1];

for(i=n-1; i>0; i--)

A[i]=A[i-1];

A[0]=t;

printf("Элементы массива после циклического сдвига: \n");

for(i=0; i<n; i++)

printf(" %d", A[i]);

}

8. Сортировка элементов массива в порядке возрастания (убывания)

Сортировка это расстановка элементов некоторого списка в заданном порядке.

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

Существует множество методов сортировки массивов. Одни из них являются более эффективными, другие – проще для понимания.

Изучим два понятных, но неэффективных метода, которых хватает для простых задач.





Дата публикования: 2015-01-23; Прочитано: 573 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.007 с)...