0 / 0 / 0
Регистрация: 28.03.2013
Сообщений: 13
1

Сформировать массив B, записав в него элементы массива A с нечётными индексами

28.05.2013, 15:30. Показов 4832. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите пожалуйста!!! Паскаль начали недавно проходить, не могу решить задачу.
Сформировать массив B, записав в него элементы массива A с нечётными индексами. Вычислить среднее арифметическое элементов массива B и удалить из него максимальный, минимальный и пятый элементы.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.05.2013, 15:30
Ответы с готовыми решениями:

Сформировать массив B, записав в него элементы массива A с нечётными индексами
Начали проходить массивы. Не получается решить данную задачу. Помогите, кто сечет фишку. ...

Сформировать массив В, записав в него элементы массива А в обратном порядке
Дан массив А состоящий с действителтных чисел. Сформировать В, записав в него элементы массива А в...

Сформировать два массива, включая в первый четные элементы исходного массива с нечетными индексами, а во второй нечетные элементы с четными индексами
Задан массив размером K. Сформировать два массива, включая в первый четные элементы исходного...

Сформировать массив, записав в него элементы с четными индексами двух массивов.
Из массивов A и B сформировать массив C, записав в него элементы массивов A и B с четными...

12
66 / 66 / 90
Регистрация: 27.02.2013
Сообщений: 156
29.05.2013, 14:50 2
Лучший ответ Сообщение было отмечено AL78 как решение

Решение

Вот:

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
k:=0;
for i:=1 to n do
  if i mod 2 <> 0 then begin
    inc(k);
    b[k]:=a[i];
  end;
write('Массив В: '); 
for i:=1 to k do
 write(b[k]:4);
writeln;
min:=b[1];
nmin:=1;
for i:=2 to k do
  if min>b[i] then nmin:=i;
max:=b[1];
nmax:=1;
for i:=2 to k do
  if max<b[i] then nmax:=i;
b[nmin]:=0; b[nmax]:=0; b[5]:=0;
write('Измененный массив В: ');
for i:=1 to k do
  write(b[i]:4);
0
Заблокирован
04.04.2022, 18:22 3
Если кому-то еще нужно)
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
program task;
var a:array of real;
    b:array of real;
    i,n,j,k:byte;
    arifm,max_b,min_b,temp:real;
 
begin
    write('Кол-во элементов: ');readln(n);
    setlength(a,n);
    setlength(b,n);
    for i:=0 to n-1 do begin
        write('a[',i,']=');readln(a[i]);
    end;
    j:=0;
    for i:=0 to n-1 do
        if(i mod 2<>0)then begin
            b[j]:=a[i];
            j:=j+1;
        end
        else continue;
    writeln('---');
    for i:=0 to j-1 do
        writeln('b[',i,']=',b[i]:1:2);
    arifm:=0;
    for i:=0 to j-1 do 
        arifm:=arifm+b[i];
    arifm:=arifm/j;
    writeln('Ср.арифм. = ',arifm:1:2);
    min_b:=b[0];
    max_b:=b[0];
    for i:=0 to j-1 do begin
        if(b[i]<min_b)then begin
            min_b:=b[i];
        end;
        if(b[i]>max_b)then begin
            max_b:=b[i];
        end;
    end;
    for i:=0 to j-1 do begin
        if(b[i]=min_b)then begin
            for k:=i to j do begin
                temp:=b[k];
                b[k]:=b[k+1];
                b[k+1]:=temp;
            end;
            j:=j-1;
        end;
        if(b[i]=max_b)then begin
            for k:=i to j do begin
                temp:=b[k];
                b[k]:=b[k+1];
                b[k+1]:=temp;
            end;
            j:=j-1;
        end;
        if(i=5)then begin
            for k:=i to j do begin
                temp:=b[k];
                b[k]:=b[k+1];
                b[k+1]:=temp;
            end;
            j:=j-1;
        end;
    end;
    writeln('---');
    for i:=0 to j-1 do 
        writeln('b[',i,']=',b[i]:1:2);
    a:=nil;
    b:=nil;
end.
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
7784 / 4610 / 2827
Регистрация: 22.11.2013
Сообщений: 13,106
Записей в блоге: 1
04.04.2022, 18:41 4
pustelekno,
слишком много ошибок: выходы за пределы массива, ненужные перестановки соседних элементов.
Кроме того, что если 5-й элемент был максимальным или минимальным?
0
Заблокирован
04.04.2022, 19:34 5
Извиняюсь, в первом варианте есть баги
Исправленный вариант:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
program task;
var a:array of real;
    b:array of real;
    i,n,j,k:byte;
    arifm,max_b,min_b,temp:real;
 
begin
    write('Кол-во элементов: ');readln(n);
    setlength(a,n);
    setlength(b,n);
    for i:=0 to n-1 do begin
        write('a[',i,']=');readln(a[i]);
    end;
    j:=0;
    for i:=0 to n-1 do
        if(i mod 2<>0)then begin
            b[j]:=a[i];
            j:=j+1;
        end
        else continue;
    writeln('---');
    for i:=0 to j-1 do
        writeln('b[',i,']=',b[i]:1:2);
    arifm:=0;
    for i:=0 to j-1 do 
        arifm:=arifm+b[i];
    arifm:=arifm/j;
    writeln('Ср.арифм. = ',arifm:1:2);
    min_b:=b[0];
    max_b:=b[0];
    for i:=1 to j-1 do begin
        if(b[i]<min_b)then begin
            min_b:=b[i];
        end;
        if(b[i]>max_b)then begin
            max_b:=b[i];
        end;
    end;
    for i:=j downto 0 do begin
        if(b[i]=min_b)then begin
            for k:=i to j do begin
                temp:=b[k];
                b[k]:=b[k+1];
                b[k+1]:=temp;
            end;
            j:=j-1;
        end;
        if(b[i]=max_b)then begin
            for k:=i to j do begin
                temp:=b[k];
                b[k]:=b[k+1];
                b[k+1]:=temp;
            end;
            j:=j-1;
        end;
        if(i=5)then begin
            for k:=i to j do begin
                temp:=b[k];
                b[k]:=b[k+1];
                b[k+1]:=temp;
            end;
            j:=j-1;
        end;
    end;
    writeln('---');
    for i:=0 to j do
        writeln('b[',i,']=',b[i]:1:2);
    a:=nil;
    b:=nil;
end.
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
7784 / 4610 / 2827
Регистрация: 22.11.2013
Сообщений: 13,106
Записей в блоге: 1
04.04.2022, 19:37 6
Во втором тоже есть. На первый взгляд, лучше не стало.
Ошибок выхода за границы массива даже добавилось.
0
Заблокирован
04.04.2022, 19:37 7
Цитата Сообщение от bormant Посмотреть сообщение
ненужные перестановки соседних элементов
Так, в этом и суть задачи - удалить элементы, а следующие перенести на 1 назад (если вы нашли эту задачу из учебника "FreePascal&Lazarus")
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
7784 / 4610 / 2827
Регистрация: 22.11.2013
Сообщений: 13,106
Записей в блоге: 1
04.04.2022, 19:43 8
Про "следующие перенести на 1 назад" в условии ничего нет. Это не требуется ни по заданию, ни по смыслу.
Даже если выполнять неэффективно удаление элемента на каждом шаге.
0
Заблокирован
04.04.2022, 19:45 9
Цитата Сообщение от bormant Посмотреть сообщение
в условии ничего нет. Это не требуется ни по заданию, ни по смыслу.
Если вы читали учебник, упомянутый мною выше, то вы бы знали, что авторы в подобных задачах удаляли элемент и последующие переносили на 1 назад
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
7784 / 4610 / 2827
Регистрация: 22.11.2013
Сообщений: 13,106
Записей в блоге: 1
04.04.2022, 20:07 10
pustelekno,
То удаление, которое вы пытаетесь написать, выглядит так:
Pascal
1
2
Dec(j);
for k:=i to j-1 do b[k]:=b[k+1];
Но главная проблема далеко не в этом.

Добавлено через 19 минут
Посмотрите внимательно на цикл 39-64.
В первом варианте за один шаг цикла могли удалить 3 элемента, во втором -- два. Посмотрите, что будет, если 5-й элемент максимальный или минимальный (будет удалён лишний элемент).
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
7784 / 4610 / 2827
Регистрация: 22.11.2013
Сообщений: 13,106
Записей в блоге: 1
05.04.2022, 10:52 11
pustelekno,
По сообщению #5
главное:
41-45, 49-53, 57-61: последний элемент b[j-1], но обращаетесь и к b[j], и к b[j+1]
40, 48, 56: такое построение условий даёт в отдельных случаях неверный результат

прочее:
10: зная, что в массиве A элементов n, не знаете, сколько элементов будет в массиве B? Странно...
12: ReadLn для каждого элемента... А как же Конвенция против пыток и других жестоких, бесчеловечных или унижающих достоинство видов обращения и наказания?
16: четность определяется по индексам от 0 или от 1? Ответ будет относиться и к строке 10. Формула нечетного числа 2i+1 (или 2i-1).
20: абсолютно бесполезная строка
32-37: То, что b[i] не может оказаться и максимальным, и минимальным одновременно (в силу 29-30), хороший повод пересмотреть условие.
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
7784 / 4610 / 2827
Регистрация: 22.11.2013
Сообщений: 13,106
Записей в блоге: 1
06.04.2022, 10:50 12
Шах расписался в полном неумении,
Вот тут его возьми и замени!
...
(q) ВСВ
pustelekno,
когда нужно удалять более одного элемента, сдвиг хвоста после каждого удаления становится "дорогим", дешевле и проще не "удалять ненужное", а "оставлять нужное":
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
const n=18; m=(n+1) div 2; D=5; W=4;
var
  a: array [0..n-1] of Integer;
  b: array [0..m-1] of Integer;
  i, k, s, mn, mx: Integer;
begin
  Randomize; {s:=0;}
  for i:=0 to n-1 do a[i]:=Random(100);
  for i:=0 to m-1 do begin
    b[i]:=a[2*i]; s:=s+b[i];
  end;
  mn:=b[0]; mx:=b[0];
  for i:=1 to m-1 do
    if      mn>b[i] then mn:=b[i]
    else if mx<b[i] then mx:=b[i];
  Write('A ='); for i:=0 to n-1 do Write(a[i]:W); WriteLn;
  WriteLn('Avg(B) = ',s/m:0:2,'  Min(B) = ',mn,'  Max(B) = ',mx,'  B[',D,'] = ',b[D-1]);
  Write('B ='); for i:=0 to m-1 do Write(b[i]:W); WriteLn;
  Write('B''='); {k:=0;}
  for i:=0 to m-1 do  { оставим подходящие }
    if not ((i=D-1) or (b[i]=mn) or (b[i]=mx)) then begin
      b[k]:=b[i]; Inc(k); Write(b[i]:W);
    end else Write('x':W);
  WriteLn;
  Write('B''='); for i:=0 to k-1 do Write(b[i]:W); WriteLn;
end.
Добавлено через 6 минут
Если не нужен отдельный вывод вектора B с отметками удаляемого "для наглядности", то:
Pascal
19
20
21
22
23
  {k:=0;}
  for i:=0 to m-1 do  { оставим подходящие }
    if not ((i=D-1) or (b[i]=mn) or (b[i]=mx)) then begin
      b[k]:=b[i]; Inc(k);
    end;
1
Заблокирован
09.04.2022, 19:34 13
Признаю, был не прав. Действительно, проще оставлять нужное, нежели удалять ненужное
0
09.04.2022, 19:34
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.04.2022, 19:34
Помогаю со студенческими работами здесь

Сформировать массив B, записав в него все элементы массива А, стоящие после минимального
Помогите пожалуйста решить задачу: Ввести одномерный целочисленный массив A. Сформировать массив...

Сформировать одномерный массив В, записав в него сначала элементы массива А, имеющие четные индексы
Сформировать одномерный массив В,записав в него сначала элементы массива А,имеющие четные...

Сформировать массив, у которого вначале расположены элементы массива А с нечетными индексами, затем с четными
Дан массив А(20). Найти максимальный элемент среди положительных элементов массива А и сформировать...

Сформировать два новых массива: . В первый массив поместить элементы с четными индексами, а во второй с нечетными
Задан числовой массив размером 10. Сформировать 2 массива размером 5. В первый массив поместить...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru