Массивы в Pascal

Комментарии

В массиве действительных

В массиве действительных чисел B[N] содержатся данные о средних скоростях движения между парами станций на участке дороги "москва-тула"
1)определить номера станций с максимальной средней скоростью на перегоне,если номера станций заданы в массиве BI[N]
2)организовать заполнение массива В[N] и BI[N] в диалоговом режиме
3) найти среднюю скорость между москвой и тулой
4) результаты вывести на экран

Данная задача неграмотно

Данная задача неграмотно сформулирована. Посмотрите на рисунок:

Во-первых, если количество станций N, то количество средних скоростей между ними N-1.

Во-вторых. Если в массиве BI станции нумеруются последовательно, то в нем отпадает необходимость, т.к. номера станций определены уже первым массивом при условии, что скорости заданы соответственно порядку станций на дороге.

Было бы логичнее, если бы массив BI содержал словесные названия станций, а не их номера.

Дан массив из 10 элеменов.

Дан массив из 10 элеменов. Первые 4 упорядочить по возрастанию, последние 4 по убыванию.

https://pas1.ru/taskarray/part

https://pas1.ru/taskarray/part-sorted

МАССИВЫ

Помогите разобраться с программой (Turbo Pascal)!
Задан массив натуральных чисел размером 30 элементов. Элементы массива могут принимать значения от1 до 30. Описать алгоритм нахождения и вывода на экран среднего арифметического квадратов чисел, входящих в самую длинную последовательность подряд идущих четных элементов массива. Если такой последовательности не существует, то программа должна вывести об этом сообщение. Если таких последовательностей несколько, то суммировать можно элементы любой из них.
Входные данные были объявлены, программа не работает.

uses crt;
const N = 30;
var M:array[1..N] of integer;
    i,k,s,kmax,reserve:integer;
    av : real;
 
begin
  for i:=1 to N do
        begin
        write ('M[',i,']= ');
        readln (M[i]);
        end;
 
     k:=0;
     s:=0;
     kmax:=0;
     reserve:=0;
     for i:=1 to N do
      if (M[i] mod 2 = 0) then
          begin
            s:= s + M[i];
            k:=k + 1;
            end
          else
          begin
             if k>kmax then
             begin
             av:=sqr(s/k);
             end;
             k:=0;
             s:=0;
          end;
 
     if (kmax>0) then
          writeln ('последовательность=', av)
     else
          writeln ('нету');
end.

Вариант решения

Мой вариант решения задачи. Возможно, код избыточен, но работает.

program mass1;
uses Crt;
 
const N = 30;
var i, L, Lmax : shortint;                
  M : array [1 .. N] of integer;
  M2 : array [1 .. N] of integer;
  sum, sum2 : integer;
  avg : real;
 
begin
ClrScr;
randomize;
 
for i := 1 to N do    {Создание массива из случайных чисел}
begin
  M[i] := random(50);
end;
 
L := 0;
Lmax := 0;
 
for i := 1 to N do
begin
  if (M[i] mod 2 = 0)
  then
    begin
     if L = 0 then sum := 0;
     sum := sum + M[i];
     M2[i] := M[i];           {Заполняем новый массив четными числами}
     inc(L);                  {Увеличиваю счетчик длины посл-ти}
    end
   else
    begin
      if L > Lmax then begin
       Lmax := L;
       sum2 := sum; {Переменная для хранения суммы самой длинной посл-ти}
      end;
      L := 0;
    end;
end;
 
if sum = 0 then writeln('Такой последовательности не существует.');
 
 
 
write('Последовательность: ');
for i := 1 to N do 
begin
if M[i] = M2[i] then 
  begin
  TextColor(Red);
  write(M[i], ' ');
  end
  else begin
    TextColor(White);
    write(M[i], ' ');
  end;
end;
 
writeln; writeln;
 
avg := sum2/Lmax;
 
TextColor(White);
writeln('Сумма членов самой длинной последовательности четных чисел = ', sum2);
writeln('В самой длинной последовательности четных чисел ', Lmax, ' элементов.');
writeln('Среднее арифметическое последовательности: ', avg:0:2);
 
readln;
end.

МАССИВЫ

var M:array[1..30] of integer;
    i:integer;
    av,k,s,sm,kmax,reserve : single;
 
begin
//заполняем массив единицами и двойками
  for i:=1 to 30 do
        begin
        m[i]:=random(2);
        if m[i]=0 then m[i]:=2;
        write (M[i],' ');
  end;
writeln();
     for i:=1 to 30 do
     begin
      if (M[i] mod 2 = 0) then
          begin
            s:= s + (M[i]*M[i]);
            k:=k + 1;
          end
          else
          begin
             if k>kmax then
             begin
               kmax:=k;
               sm:=s;
               k:=0;
               s:=0;
               av:=sm/kmax;
             end;
          end;
 
 
 
       end;
 
     if (kmax>0) then
          writeln ('последовательность=', av)
     else
          writeln ('нет');
 
end.

программа всегда выдаёт 4. Это верно. Так же проверял и с другими числами. Иногда большая дробь выходит, но про округление в задаче ничего не сказано.

Помогите

Помогите пожалуйста решить две задачи по Pascal:
1) Определить расстояние, пройденное физическим телом за время t, если тело движется с постоянным ускорением а и имеет в начальный момент времени скорость V0

2) В прямоугольной матрице размером L*М, имеющей имя МАTR содержаться целые числа. L - число строк, М – число столбцов. Ввести элементы матрицы с клавиатуры. Определить и вывести на экран сумму положительных элементов в каждой строке. Определить строку с минимальным значением этой суммы и вывести ее номер на экран.