Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

[помогите] массивы

15K
23 декабря 2005 года
Justice
3 / / 23.12.2005
Помогите пожалуйста решить задачи по массивам:(

1. В заданном массиве а1, а2, ...., аn произвести циклический сдвиг элементов на одну позицию влево, т.е. преобразовать к виду а2, а3, ..., аn, а1.

2. Заданы массив а1, а2, ....., аn и переменная k. Переставить элементы массива А таким образом, чтобы все элементы со значением, больше, чем k, попали в начало массива, а остальные элементы - в конец массива, т.е. в переформированном массиве все элементы аj>k должны иметь малые порядковые номера, а все aj<k - большие номера.

Заранее огромнейшее спасибо!
2
23 декабря 2005 года
squirL
5.6K / / 13.08.2003
юноша, пожайлуста, прочитайте правила раздела.я так понимаю, если вы не указали язык, так можно на любом языке?

вот задача №1

Код:
#include <iostream>

#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;
}
15K
23 декабря 2005 года
Justice
3 / / 23.12.2005
Извините мне мою невнимательность.
Задачи должны решаться в Турбо Паскале.
268
23 декабря 2005 года
Михаил
587 / / 25.06.2005
Цитата:
Originally posted by Justice

1. В заданном массиве а1, а2, ...., аn произвести циклический сдвиг элементов на одну позицию влево, т.е. преобразовать к виду а2, а3, ..., аn, а1.


Присваиваешь буферу значение первого элемента, а потом

 
Код:
var a:array[1..n] of your_type;
    temp:your_type;
begin
a:=a[1];
for i:=2 to n do a[i-1]:=a;
a[n]:=temp;

Все!!!

Цитата:
Originally posted by Justice

2. Заданы массив а1, а2, ....., аn и переменная k. Переставить элементы массива А таким образом, чтобы все элементы со значением, больше, чем k, попали в начало массива, а остальные элементы - в конец массива, т.е. в переформированном массиве все элементы аj>k должны иметь малые порядковые номера, а все aj<k - большие номера.



Я так понял, что размещение элементов в первой половине и во второй хаотично(не упорядочены по возрастанию, убыванию). Решешие не оптимизировано.
Делаешь два массива - а в них и складываешь свои элементы - в один массив большие k элементы, а в другой меньшие k элементы - потом "склеиваешь" массивы. Вот только проблема в том, что не указано, что делать с элементами равными k не сказано - сами придумаете.

Код:
var MinArray:array[1..n] of your_type;
    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.
15K
26 декабря 2005 года
Justice
3 / / 23.12.2005
Извините ещё раз :(
Не могли бы вы написать решение вышеупомянутых задач, но только в Дельфи? (и не особо сложно, на уровне 1курса)
268
26 декабря 2005 года
Михаил
587 / / 25.06.2005
Цитата:
Originally posted by Justice
Извините ещё раз :(
Не могли бы вы написать решение вышеупомянутых задач, но только в Дельфи? (и не особо сложно, на уровне 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. ;)

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог