[помогите] массивы
1. В заданном массиве а1, а2, ...., аn произвести циклический сдвиг элементов на одну позицию влево, т.е. преобразовать к виду а2, а3, ..., аn, а1.
2. Заданы массив а1, а2, ....., аn и переменная k. Переставить элементы массива А таким образом, чтобы все элементы со значением, больше, чем k, попали в начало массива, а остальные элементы - в конец массива, т.е. в переформированном массиве все элементы аj>k должны иметь малые порядковые номера, а все aj<k - большие номера.
Заранее огромнейшее спасибо!
вот задача №1
#define SIZE 10
int main()
{
int array[SIZE]={1,2,3,4,5,6,7,8,9,10};
int temp = array[0];
for (int i=0; i<SIZE-1; i++)
{
array=array[i+1];
}
array[SIZE-1]=temp;
return 0;
}
Задачи должны решаться в Турбо Паскале.
1. В заданном массиве а1, а2, ...., аn произвести циклический сдвиг элементов на одну позицию влево, т.е. преобразовать к виду а2, а3, ..., аn, а1.
Присваиваешь буферу значение первого элемента, а потом
temp:your_type;
begin
a:=a[1];
for i:=2 to n do a[i-1]:=a;
a[n]:=temp;
Все!!!
2. Заданы массив а1, а2, ....., аn и переменная k. Переставить элементы массива А таким образом, чтобы все элементы со значением, больше, чем k, попали в начало массива, а остальные элементы - в конец массива, т.е. в переформированном массиве все элементы аj>k должны иметь малые порядковые номера, а все aj<k - большие номера.
Я так понял, что размещение элементов в первой половине и во второй хаотично(не упорядочены по возрастанию, убыванию). Решешие не оптимизировано.
Делаешь два массива - а в них и складываешь свои элементы - в один массив большие k элементы, а в другой меньшие k элементы - потом "склеиваешь" массивы. Вот только проблема в том, что не указано, что делать с элементами равными k не сказано - сами придумаете.
MaxArray:array[1..n] of your_type;
GivenArray:array[1..n] of your_type;
k:your_type;
i,j,z:word;
begin
j:=1;k:=1;
for i:=1 to n do
begin
if GivenArray<k then
begin
MinArray[j]:=GivenArray;
inc(j);
end;{if}
if GivenArray>k then
begin
MaxArray[z]:=GivenArray;
inc(z);
end;{if}
{Тут бы следовало сделать проверку элементов равных k, иначе j+z может оказаться не равно n, а это значит, что после "склеивания массивов" MaxArray и MinArray будут заполнены не все элементы}
end;{for}
{Склеивание}
for i:=1 to j do GivenArray:=MaxArray;
for i:=1 to z do GivenArray:=MinArray[i+j];
end.
Не могли бы вы написать решение вышеупомянутых задач, но только в Дельфи? (и не особо сложно, на уровне 1курса)
Извините ещё раз :(
Не могли бы вы написать решение вышеупомянутых задач, но только в Дельфи? (и не особо сложно, на уровне 1курса)
А что вы имеете в виду под понятием Delphi? я вроде бы и написал на Паскале(а Паскаль и Delphi синтаксисом особо не отличаются). А вам только надо было скопировать код в обработчик события.
Так а что не понято? :)
В первой задаче вы берете первый элемент массива и присваиваете его буферу. А потом перемещаете второй элемент массива в первый элемент массива, третий- во второй и т.д.
[a1,a2,a3,a4,...,an]
temp:=a1;
а теперь циклически
1 шаг:[a2,a2,a3,a4,...,an]
2 шаг:[a2,a3,a3,a4,...,an]
3 шаг:[a2,a3,a4,a5,...,an]
и так далее
Я прикрепил файл там - реализация этого на Delphi
Теперь вторая задача:
уточните задачу - непонятно что делать с елементами равными k.
Но опишу, что там происходит.
Есть один исходный массив(GivenArray), есть массив для элементов больших k(MaxArray) и для элементов массива меньших k(MinArray) а так же массив для элементов равных k(EqualedArray). Все эти массивы одинаковой длины, одинакового типа. Теперь вам необходимы некоторые счетчики элементов помещаемых в MinArray MaxArray - в их роли выступают переменные min и max, eq.
Теперь происходит следующее - сравнивается каждый элемент массива GivenArray с k(больше или меньше, а может быть равно) и если элемент больше k, то он помещается в MaxArrray, если меньше в MinArray, а если равен k, то элемент помещается в EqualedArray и счетчик увеличивается на 1 - max если в MaxArray и min если в MinArray и eq если в EqualledArray. Так вроде тут я рассказал, теперь дальше min-1 - это количество элементов в MinArray с остальными счетчиками аналогично. Далее происходит помещение элементов в начале MaxArray - затем EqualledArray - затем MinArray в GivenArray. Все элементы отсортированы по признаку больше или меньше, или равно k и в конце они ставятся назад в GivenArray. ;)