Немного оффтопика: нужна помощь с программированием на Паскале

Друзья, можно немного оффтопика?

Так сложилось, что приходится получать вышку и, соответственно, делать контрольные. :) Делаю контрольную по информатике, Паскаль. Споткнулся что-то на массивах. :(

В общем: есть две задачки, которые необходимо решить, в благодарность предлагаю два любых моих шаблона бесплатно. Т.е. одно решение = один шаблон.

Вот условия задач:
1. В заданном одномерном массиве X(N) найти наименьшее из четных чисел.
2. Составить программу вычисления произведения элементов матрицы B(N,M), значения которых попадают в интервал от 1 до 10.

В комменты, плиз, решение, а в личку — шаблон и мыло, добавлю вручную в каталоге к покупателям.

11 комментариев

avatar
Паскаль не видел уже давно, так что сначала проверить потуги моей памяти

program minimum;

var a: array of integer;
var i: integer;
var n: integer;
var min: integer;

begin

    write (‘Укажите n - размер массива ’);
    readln (n);

    for i := 0 to n-1 do
    begin
       write (‘элемент массива a[‘,i,’] = ’); 
       readln (a[i]);
    end;
    
    min := a[0];

    for i := 1 to n-1 do
    begin
        if ((a[i] mod 2) = 0) then 
            if ((min > a[i]) or ((min mod 2) <> 0)) then 
                min := a[i]; 
    end; 
    if((min mod 2) = 0) then 
        writeln('Наименьшее число: ', min) 
    else 
        writeln('Четных чисел в массиве нет'); 

end.
avatar
Спасибо, немного подправил, все работает. Вот, что получилось:

program zadanie4;
type
  X=array[1..100] of integer;
var
  i,n,min: integer;
  mass: X;
begin
  write('Введите количество элементов массива: ');
  readln(n);
  
  for i:=1 to n do
    begin
      write('Введите ',i,'-й элемент массива: ');
      readln(mass[i]);
    end;
  
  min:=mass[1];
  
  for i:=2 to n do
    begin
      if (mass[i] mod 2 = 0) then
        if (min>mass[i]) or ((min mod 2)<>0) then
          min:=mass[i];
    end;
  
  if min mod 2 = 0 then
    writeln('Наименьшее четное число массива: ', min)
  else
    writeln('Четных чисел в массиве нет.');
end.


Моей проблемой было то, что не додумался прописать в условии (min mod 2)<>0 и делал костыль min:=999999999999, но не сдавать же с костылем. :)
avatar
Вторая потуга, но предупреждаю повторно — проверяйте, то что ниже написано было в блокноте челвоеком который напрочь забыл паскаль и который не уверен паскаль ли вообще это

program matrix;

var a: array of integer;
var n: integer;
var m: integer;
var i: integer;
var j: integer;
var p: integer;

begin

    write ('Укажите n - размер массива ');
    readln (n);
    
    write ('Укажите m - размер массива ');
    readln (m);

    for i := 0 to n do
        for j := 0 to m do
        begin
            write ('элемент массива a[',i ,', ',j ,'] = '); 
            readln (a[i, j]);
        end;

    p := 0;

    for i := 0 to n do
        for j := 0 to m do
        begin
        if (a[i, j] >= 1 and a[i, j] <= 10) then
            if (p = 0) then
                p = a[i, j];
            else
                p := p * a[i, j];
        end;

    writeln('Произведение: ', p);

end.
avatar
p := a[i, j];
avatar
С синтаксисом проблем вроде нет, мне больше сам алгоритм нужен.
Спасибо!
avatar
С мелкими правками синтаксиса работает. Еще раз спасибо!
avatar
p := 0;
...
if (p = 0) then
                p = a[i, j];
            else
                p := p * a[i, j];

Зачем? О.о

p := 1;
...
if (....) then p := p * a[i, j];
avatar
В первом случае, если значений из интервала от 1 до 10 нету, произведение бедет равно 0, что как бы логично.

В вашем варианте произведение будет равно 1, а это не совсем точно, так как среди значений могли быть единицы, либо вообще ничего небыло…
avatar
Хм. Да. Но в тогда и ниже надо писать:

if (p = 0) then
writeln('В матрице нет чисел в диапазоне [1..10]')
else ...
avatar
Само-собой, но это уже мелочи.
avatar
И я не помню, чтобы в паскале можно было указывать массивы динамически. По крайней мере в 7.0 нельзя было. Объявляли двумерный массив с размерностью до
sqrt(65536/(sizeof integer))

но реально, в учебных целях — хватает строгого объявления массива
var a: array [1..10] of integer ;
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.