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

  • Автор темы KreN.del
  • Дата начала
Статус
Закрыто для дальнейших ответов.
K

KreN.del

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

Pepper-X

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

DIR3ct0r

#3
Код:
const n = 10;
var
A, B: array[0..n - 1] of integer;
i, j, el: integer;
begin
// иниц-я массива A
...
1. Формированием массива B суммой цифр массива A:
Код:
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. Сортировка методом прямого перебора (пузырьковая сортировка):
Код:
 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;
 
K

KreN.del

#4
Ребят уже все вохдные сижу не могу найти баг, где надо элементы на четных местах удалить.
Я принял, что i=1(А по нашему, если просто взглянуть на массив будет индекс 2)..
Кидаю весь код.. Чтоб удобней тестить было...
Проблема в последнем элементе, или прога его зануляет, или не переставляет перебором..
Помогите.. Завтра уже сдавать надо...
Код:
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.
 
D

DIR3ct0r

#5
Удаление из динамического массива элементов с четными индексами:
Код:
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
 
Статус
Закрыто для дальнейших ответов.