Технический форум

Технический форум (http://www.tehnari.ru/)
-   Delphi, Kylix and Pascal (http://www.tehnari.ru/f43/)
-   -   Помогите написать две несложные программы (http://www.tehnari.ru/f43/t263678/)

Alessandro4 03.04.2019 09:48

Помогите написать две несложные программы
 
Вложений: 2
Знаю, темы несложные, но я, видимо, проспал. Решите и объясните, пожалуйста

Vladimir_S 03.04.2019 10:32

Ладно. Вот первое задание:
Код:

Const
 N=20;

Var
 A,B:Array[1..N] of Integer;
 i,j,S,P,Ifirst,Ilast:Integer;

Begin
 Randomize;
 Writeln('Initial array:');
 for i:=1 to N do
  begin
  A[i]:=-5+Random(10);
  if (i=5) or (i=17) then A[i]:=0;
  Write(A[i]:4);
  end;
 Writeln;
 Writeln;

 P:=1;
 for i:=1 to (N div 2) do P:=P*A[2*i];
 Writeln('Product = ',P);
 Writeln;
 Writeln;

 Ifirst:=0;
 Repeat
  Inc(Ifirst);
 Until A[Ifirst]=0;
 Ilast:=N+1;
 Repeat
  Dec(Ilast);
 Until A[Ilast]=0;
 S:=0;
 for i:=Ifirst+1 to Ilast-1 do S:=S+A[i];
 Writeln('Sum = ',S);
 Writeln;
 Writeln;

 j:=0;
 for i:=1 to N do
  if A[i]>=0 then
  begin
    Inc(j);
    B[j]:=A[i];
  end;
 j:=N+1;
 for i:=N downto 1 do
  if A[i]<0 then
  begin
    Dec(j);
    B[j]:=A[i];
  end;
 Writeln('New array:');
 for i:=1 to N do Write(B[i]:4);
 Readln
End.


Vladimir_S 03.04.2019 10:57

Второе задание. Тут отмечу, что об не напортачить в методичке — и речи быть не может! Дают конкретные матрицы с n=3 и тут же заявляют, что n=8. Или нужно сгенерить свои матрицы? Как всегда, мутно.
Код:

Const
 n=3;
 m=4;

Var
 A:Array[1..n,1..m] of Real;
 B:Array[1..m] of Real;
 D:Array[1..n] of Real;
 i,k:Integer;

Begin
 A[1,1]:= 3.8; A[1,2]:= 0.1; A[1,3]:= 1.2; A[1,4]:= 2.4;
 A[2,1]:= 3.8; A[2,2]:=-1.0; A[2,3]:= 3.1; A[2,4]:= 1.5;
 A[3,1]:=-1.6; A[3,2]:= 0.4; A[3,3]:= 3.0; A[3,4]:= 1.0;
 B[1]:= 1.0;
 B[2]:= 3.2;
 B[3]:= 2.0;
 B[4]:=-2.1;

 for i:=1 to n do D[i]:=0;

 for i:=1 to n do
  for k:=1 to m do
  D[i]:=D[i]+A[i,k]*B[k];

 Writeln('Result:');
 for i:=1 to n do
  Writeln('D[',i,'] = ',D[i]:7:3);

 Readln
End.


Alessandro4 04.04.2019 14:10

А где в первом задании произведение элементов массива с четными номерами

Vladimir_S 04.04.2019 15:52

Цитата:

Сообщение от Alessandro4 (Сообщение 2640369)
А где в первом задании произведение элементов массива с четными номерами

"Имеющий глаза — да видит". Начиная со строки
P:=1;
и дальше ещё 4 строки.

Alessandro4 11.04.2019 13:55

Объясните пожалуйста остальные строки вашей первой программы

Vladimir_S 11.04.2019 19:30

Цитата:

Сообщение от Alessandro4 (Сообщение 2641780)
Объясните пожалуйста остальные строки вашей первой программы

Не буду. Программа настолько проста, что Вам было бы полезно разобраться в ней самостоятельно. Конечно, если возникнут КОНКРЕТНЫЕ вопросы, с удовольствием отвечу.
Но так, вкратце:
1. Объявляется (константой) длина массива (20).
2. Методом случайных чисел заполняется массив. После этого двум элементам принудительно присваиваются нулевые значения, чтобы нулевые элементы заведомо присутствовали.
3. Ищется произведение элементов с четными номерами.
4. Ищутся номера первого и последнего нулевых элементов. Считается сумма элементов с номерами между найденными.
5. Организуется новый массив В, в который сначала последовательно помещаются все неотрицательные элементы массива А, а потом с конца — все отрицательные элементы.

Результаты всех действий выводятся на экран.

Alessandro4 14.04.2019 05:08

Сижу, пытаюсь разбирать программу... Объясните, как работает произведение элементов массива, а именно строчку с for и сумма элементов массива особенно циклы repeat и также строчку с for

Vladimir_S 14.04.2019 09:32

Цитата:

Сообщение от Alessandro4 (Сообщение 2642390)
Объясните, как работает произведение элементов массива

Давайте разберём на примере. Пусть нам нужно найти произведение элементов массива, стоящих на ЧЕТНЫХ позициях. Зададим массив:
7 2 9 1 3 5 6, т.е. N=7.
Нам нужно найти произведение 2*1*5, т.е. произведение A[2]*A[4]*A[6].
1. Искомому произведению P изначально присваиваем значение 1.
2. Находим (N div 2), т.е результат ЦЕЛОЧИСЛЕННОГО деления N на 2, в данном случае это 3.
3. Проходим в цикле по i от 1 до 3 домножение произведения P на элементы A[2i], т.е. при изменении i от 1 до 3 номера элементов будут приобретать значения 2, 4, 6. Что нам и требуется. Всё!
Цитата:

Сообщение от Alessandro4 (Сообщение 2642390)
сумма элементов массива особенно циклы repeat и также строчку с for

Тут так. Задача: найти первый и последний нулевые элементы, и сосчитать сумму элементов между ними. Обозначим номера этих нулевых элементов, как Ifirst и Ilast соответственно. Найдём их.
Для этого:
1. Присваиваем Ifirst значение 0. Далее в цикле repeat..until прибавляем к Ifirst по единичке до тех пор, пока не выполнится условие A[Ifirst]=0. Всё, нашли номер первого нулевого элемента.
2. Присваиваем Ilast значение N+1. Далее в цикле repeat..until убавляем от Ilast по единичке до тех пор, пока не выполнится условие A[Ilast]=0. Так находим номер последнего нулевого элемента.
3. Присваиваем искомой сумме S начальное значение 0, а затем в цикле for..to прибавляем к S значения элементов с номерами между Ifirst и Ilast. Всё!

Alessandro4 14.04.2019 21:52

С суммой массива разобрался, а вот с произведением не очень. Зачем писать (N div 2), если можно сразу написать 10?

И можно подробнее об этом?
Цитата:

Проходим в цикле по i от 1 до 3 домножение произведения P на элементы A[2i], т.е. при изменении i от 1 до 3 номера элементов будут приобретать значения 2, 4, 6.


Часовой пояс GMT +4, время: 14:35.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.