Формирование Массива по элементам другого Массива

Тема в разделе "Delphi - FAQ", создана пользователем KreN.del, 1 дек 2006.

Статус темы:
Закрыта.
  1. KreN.del

    KreN.del Гость

    Дан одномерный целочисленный массив А, состоящий из N элементов.
    -Сформировать новый массив B,i-тый элемент которого равен сумме цифр i-того элемента массива A.
    -Упорядочить массив A методом прямого обмена.(Вот здесь вобще не пойму, что делать(
    -Удалить из массива B элементы, стоящие на четных местах(с четными индексами).
    Насчет выполнение работы.
    Работа выполняется в Delphi 7-8 версии, на языке Pascal, как Console Aplication..
    Используя стандартные методы... Тоесь никакие доп. компеляторы и т.п.. Так как это мы еще не проходили..
     
  2. Pepper-X

    Pepper-X Гость

    Насчёт пункта 1:
    в цикле формирования масива B:
    1) фиксируем элемент массива (A) для обработки
    -> element:=A;
    2) обнуляем сумму (в которой будет считаться сумма цифр элемента A, то есть тоже что и element)
    -> Sum:=0;
    во вложеном цикле делаешь (считаем сумму элемента A):
    3) находишь остаток от деления element на 10 - это даст тебе самую правую цифру числа
    -> ost:=element mod 10;
    4) увеличиваем сумму на остаток
    -> Sum:=Sum+ost;
    5) делишь element на 10, дабы при следующем шаге вложенного цикла, при нахождении остатка от деления на 10, получалась уже 2, 3 и т.д. цифра числа element, которое в свою очередь не что иное как текущее A, которое мы "запомнили", чтобы немножко над ним поглумиться :)
    -> element:=element div 10;
    здесь вложеный цикл заканчиваеться
    6) присваеваем B, то что необходимо, а именно сумму Sum
    -> B:=Sum;

    насчёт 2 пункта.. не помню точно что из себя представляет метод прямого обмена, просто я их по названию не различаю :) но он как и все не сложный.

    а вот 3..
    тут вопрос, удалить элементы, то есть занулить.. хотя наверное тута имееться ввиду полностью кильнуть. О, есть идея.

    Вообщем коротко так. Элементы которые стоят на нечётных местах начиная с 3, мы ставим на номер num, который начинаеться с "1" и перед каждом таким смещзении элемента увеличиваеться на 1. А после всего num будет содержать новое количество элементов массива B.
    !!Конечно нужно будет удостовериться что элементов в масиве <=3 иначе мы просто будем считатьь что элементов в массиве B всего "1".

    вообщем напишу на паскале сразу
    num:=1;
    for i:=3 to n do
    if i mod 2<>0 {нечётный элемент}
    then begin
    num:=num+1;
    B[num]:=B;
    end;
    Вывод полученого массива
    for i:=1 to num do
    writeln(B);
     
  3. DIR3ct0r

    DIR3ct0r Гость

    Код (Text):
    const n = 10;
    var
    A, B: array[0..n - 1] of integer;
    i, j, el: integer;
    begin
    // иниц-я массива A
    ...
    1. Формированием массива B суммой цифр массива A:
    Код (Text):
     
    for i:= 0 to High(A) do
    begin
    el:= A[i];
    B[i]:= 0;
    while el <> 0 do
    begin
    B[i]:= B[i] + el mod 10;
    el:= el div 10;
    end;
    end;
    2. Сортировка методом прямого перебора (пузырьковая сортировка):
    Код (Text):
     for i:= 0 to High(A) - 1 do
    for j:= i + 1 do High(A) do
    if A[j] < A[i] then
    begin
    el:= A[i];
    A[i]:= A[j];
    A[j]:= el;
    end;
    end;
     
  4. KreN.del

    KreN.del Гость

    Ребят уже все вохдные сижу не могу найти баг, где надо элементы на четных местах удалить.
    Я принял, что i=1(А по нашему, если просто взглянуть на массив будет индекс 2)..
    Кидаю весь код.. Чтоб удобней тестить было...
    Проблема в последнем элементе, или прога его зануляет, или не переставляет перебором..
    Помогите.. Завтра уже сдавать надо...
    Код (Text):
    begin
    writeln('vvedite chislo testov');
    readln(d);
    for c:=1 to d do
    begin
    flag:=true;
    writeln('test nomer ',c);
    writeln('vvedite chislo elementov massiva');
    readln(n);
    setlength(a,n);
    writeln('vvedite sposob zapolnenia 1:generatorom cluch chisel 2:s
    klaviatury');
    readln(d);
    case d of
    1:
    begin
    randomize;
    for i:=0 to n-1 do
    begin
    d:=round(random(2));
    if(d=0)then a[i]:=round(random(100))+1
    else a[i]:=-1*round(random(100))-1;
    end;
    end;
    2:
    begin
    writeln('vvodite massiv');
    read(a[0]);
    for i:=1 to n-1 do
    read(a[i]);
    readln;
    end
    else
    begin
    writeln('vvedena nedopustimaia komanda');
    flag:=false;
    end;
    end;
    if(flag)then
    begin
    writeln('vvedennyi massiv');
    for i:=0 to n-1 do
    write(a[i]:4);
    writeln;
    if(n>4)then
    begin
    i:=1;
    repeat
    a[i]:=0;
    i:=i+2;
    until(i>n-1);
    if(n mod 2=0 )then n:=n-1;
    i:=1;
    repeat
    if(a[i]=0)then
    begin
    for d:=i to n-2 do
    a[d]:=a[d+1];
    n:=n-1;
    end;
    i:=i+1;
    until(i>=n-2);
    n:=n-1;
    end;
    writeln('izmenennyi vtoroi massiv');
    for i:=0 to n-1 do
    write(a[i]:4);
    writeln;
    end;
    writeln;
    end;
    readln;
    end.
     
  5. DIR3ct0r

    DIR3ct0r Гость

    Удаление из динамического массива элементов с четными индексами:
    Код (Text):
    var
    a: array of Integer;
    i, l: integer;
    begin
    Randomize;
    SetLength(a, 10);
    for i:= 0 to High(a) do
    a[i]:= Random(100);

    i:= 1;
    while i <= High(a) do
    begin
    l:= Length(a);
    Move(a[i + 1], a[i], (l - i) * SizeOf(Integer));
    SetLength(a, l - 1);
    Inc(i);
    end;
    end;
    Если Move не подходит, то двигай элементы массива с a[i + 1] до High(a) на место a
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей