Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Delphi: Задача с массивом (необычная)


Автор: Solominka 19.1.2010, 23:23
Нужно решить задачу на Delphi с формой... Точнее, я не могу уловить даже саму суть...

Даны действительные числа a1, a2, ...,a2n. Получить a1, an+1, a2, an+2, ..., an, a2n. Вычислить отдельно, сумму отрицательных и положительных чисел.

Подскажите пожалуйста, как это реализовать...?

Автор: Демо 20.1.2010, 01:39
Solominka, 

Где знаки умножения должны быть в записи, а где нет?

Автор: CodeMonkey 20.1.2010, 11:59
Ну, для начала эти числа надо получить.

Варианты: 
- вбить константой (const A[0..2*N] of Extended = (1, 2, 3, ...)).
- читать из файла (в текстовом файле по числу на строке).
- вводить на форме (TMemo или TStringGrid или ещё как).

Потом - создать новый массив. Вписать в него А-шки по указанному правилу. Показать (показать можно в TMemo или в TStringGrid).

Автор: Solominka 20.1.2010, 13:54
Демо, нижние индексы заключаю в скобки и расставляю знаки умножения:

Даны действительные числа a(1), a(2), ...,a(2*n). Получить a(1), a(n+1), a(2), a(n+2), ..., a(n), a(2*n). Вычислить отдельно, сумму отрицательных и положительных чисел.


CodeMonkey, не совсем понимаю, о чём речь... Но обойтись надо без текстовых файлов однозначно...

Автор: ~FoX~ 20.1.2010, 14:09
Solominka, Что то совсем не понятно....

Цитата(Solominka @  20.1.2010,  14:54 Найти цитируемый пост)
Даны действительные числа a(1), a(2), ...,a(2*n)

Ну с этим ясно..


Цитата(Solominka @  20.1.2010,  14:54 Найти цитируемый пост)
Получить a(1), a(n+1), a(2), a(n+2), ..., a(n), a(2*n).

Куда получить? и собственно почему именно в таком порядке?

Цитата(Solominka @  20.1.2010,  14:54 Найти цитируемый пост)
Вычислить отдельно, сумму отрицательных и положительных чисел.

Ну с этим тоже понятно... Вот код
Код

procedure TForm1.Button1Click(Sender: TObject);
var
  n, i: integer;
  Arr: array of real;
  Summ, MSumm: real;
begin
  n := 10;
  SetLength(Arr, n*2);
  //Заполняем массив
    randomize;
    for i := 0 to n*2 do begin
      Arr[i] := Random(10)-5; //случайно от -5 до 5
    end;
  //Кончили заполнять массив

  Summ := 0; //Сумма положительных
  Msumm := 0; //Сумма отрицательных
  for i := 0 to n*2 do begin
    if Arr[i]>0 then Summ := Summ + Arr[i]
    else Msumm := Msumm + Arr[i];
  end;
  ShowMessage('Сумма положительных чисел=' + FloatToStr(Summ) + ' Сумма отрицательных чисел=' + FloatToStr(MSumm));
end;



Или числа каким тохитрым способом записаны, например a(1)-a(n) положительные, a(n+1)-a(2n) отрицательные?

Автор: Solominka 20.1.2010, 14:20
~FoX~, благодарю.
Получить, это значит скорее всего следующее: например дан исходный массив (его желательно вводить вручную, но это можно через StringGrid реализовать, я думаю) и путём каких то операций получить новый массив, удовлетворяющий данному условию: a(1), a(n+1), a(2), a(n+2), ..., a(n), a(2*n). Вывести рядом второй массив. 
Почему именно такое условие и именно в таком порядке - это к моему преподавателю, который составил эту гениальную задачу... =__=

Автор: ~FoX~ 20.1.2010, 14:43
Solominka, Ну тогда так:
Код

procedure TForm1.Button1Click(Sender: TObject);
var
  n, i: integer;
  Arr, Arr2: array of real;
  Summ, MSumm: real;
begin
  n := 10;
  SetLength(Arr, n*2);
  SetLength(Arr2, n*2);
  //Заполняем массив
    randomize;
    for i := 0 to (n*2)-1 do begin
      Arr[i] := Random(10)-5; //случайно от -5 до 5
    end;
  //Кончили заполнять массив
  Summ := 0; //Сумма положительных
  Msumm := 0; //Сумма отрицательных
  for i := 0 to (n*2)-1 do begin

    if (i mod 2 = 0) then Arr2[i] := Arr[n+i] // Если индекс четный то получаем число с индексом n+i
    else Arr2[i] := Arr[i]; //иначе получаем число с индексом i

    if Arr[i]>0 then Summ := Summ + Arr[i]
    else Msumm := Msumm + Arr[i];
  end;
  ShowMessage('Сумма положительных чисел=' + FloatToStr(Summ) + ' Сумма отрицательных чисел=' + FloatToStr(MSumm));
end;

Автор: Solominka 20.1.2010, 14:48
~FoX~, благодарю)
Ввод и вывод массива я сама сделаю)
Но не могли бы вы пояснить, что означает и делает функция SetLength ?

Автор: ~FoX~ 20.1.2010, 14:52
Solominka, Установить длину массива от 0 до н*2
Ой, я там с порядком накосячил немного, счаз правильно сделаю...

Автор: Solominka 20.1.2010, 15:08
~FoX~, спасибо, я жду)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)