Алексеевна_Валентиновна
?>

Сделать по программированию в pascal. 1. найти произведение всех элементов массива размерностью n (если элемент равен 0, то пропустить 2. найти максимальный по модулю элемент матрицы. напечатать его значение и индексы.

Информатика

Ответы

Nadirovich1317
1)
const
  N = 5;//Размерность массива

var
  m: array[1..N] of integer;

begin
  var pr := 1;
  for var i := 1 to N do
  begin
    read(m[i]);
    if m[i] <> 0 then pr := pr * m[i];
  end;
  writeln(pr);
end.

Пример:
Входные данные:
1 2 3 0 5
Выходные данные:
30

2)
const
  N = 3;//Размерность матрицы

var
  m: array[1..N, 1..N] of integer;
  i, j: integer;
  rec: record
    mmax: integer = -(maxint);
    ind: record
      i: integer;
      j: integer;
    end;
  end;

begin
  for i := 1 to N do
    for j := 1 to N do
    begin
      read(m[i, j]);
      if abs(m[i, j]) > rec.mmax then begin
        rec.mmax := abs(m[i, j]);
        rec.ind.i := i;
        rec.ind.j := j;
      end;
    end;
  writeln('Максимальный по модулю элемент матрицы ', rec.mmax, '(', rec.ind.i, ';', rec.ind.j, ')');
end.

Пример:
Входные данные:
1 2 3
4 5 -9
7 8 6
Выходные данные:
Максимальный по модулю элемент матрицы 9(2;3)
ii090758
Program znanija;
const
  PRICE_ONE_DISK = 10;
  PRICE_TEN_DISK = 90;
  EMPTY = 0;
  INPUT_MONEY = 'Введите количество денег: ';
  OUTPUT_PRICE = 'Купленно: ';
  OUTPUT_ONE_DISK = ' - по одному диску';
  OUTPUT_TEN_DISK = ' - по десять дисков';
  OUTPUT_MANEY = 'Осталось денег: ';
  CHAR_TABS = Chr(9);
var
  sumMoney : integer;
  countOneDisk : integer := 0;
  countTenDisk : integer := 0;
begin
  write(INPUT_MONEY);
  read(sumMoney);
 
  while((sumMoney - PRICE_TEN_DISK) >= EMPTY) do
  begin
    inc(countTenDisk);
    sumMoney := sumMoney - PRICE_TEN_DISK;
  end;
 
  while((sumMoney - PRICE_ONE_DISK) >= EMPTY) do
  begin
    inc(countOneDisk);
    sumMoney := sumMoney - PRICE_ONE_DISK;
  end;
 
  writeln(OUTPUT_PRICE);
  writeln(CHAR_TABS, countTenDisk, OUTPUT_TEN_DISK);
  writeln(CHAR_TABS, countOneDisk, OUTPUT_ONE_DISK);
  writeln(OUTPUT_MANEY, sumMoney);
end.
delo1005
Опишем формальную грамматику для разбора входной строки.
<символ> ::= <буква> | <знак>
<буква> ::= 'a' | 'b' | 'c' | ... | 'y' | 'z'
<знак> ::= '+' | '-'
<терм> ::= <буква> [ <терм> ]
<операнд> ::= [ <знак> ] <терм>
<строка> ::= <операнд> [ <операнд> ]

Ниже приведена программа на языке Pascal.ABC, реализующая разбор входной строки и её упрощение по правилам приведения подобных членов.

const
  n = 30; {максимальное количество операндов, я так захотел!}
  pm = ['+', '-']; {символы <знак>}
  letter = ['a'..'z'];{символы <буква>}

type
  tOper = record
    sgn: integer;
    vars: string
  end;
  tM = array[1..n] of tOper;
  taSort = array[1..n] of string;{для сортировки}

var
  s: string;
  l, p: integer;
  symb: set of char;

procedure GetSymbol(var c: string);
{
Сканирует строку s с позиции p и возвращает элемент <символ>
Продвигает курсор p к первому необработанному символу строки s
}
var
  found: boolean;

begin
  found := false;
  c := '';
  while (p <= l) and (not found) do
  begin
    if s[p] in symb then begin
      found := true;
      c := s[p]
    end;
    p := p + 1
  end
end;

procedure Sort(var a: taSort; kol: integer);
{Сортировка вставкой}
var
  i, j: integer;
  x: string;
  flag: boolean;
begin
  for i := 2 to kol do
  begin
    x := a[i];
    j := i - 1;
    flag := False;
    while (j > 0) and (not flag) do
      if x < a[j] then
      begin
        a[j + 1] := a[j];
        j := j - 1
      end
      else flag := True;
    a[j + 1] := x
  end
end;

function GetSign(c: char): integer;
begin
  case c of
    '+': Result := 1;
    '-': Result := -1;
  else Result := 0
  end
end;

procedure GetOper(var oper: tOper);
{
Строит элемент <операнд> максимально возможной длины и упорядочивает
составляющие его символы в лексикографическом порядке.
Если операнд построить невозможно, в oper.vars помещается пустая строка.
Процедура обращается к процедурам GetSymbol и Sort.
}
var
  i, n: integer;
  c, c1: string;
  ExitFlag: boolean;
  a: taSort;

begin
  c := '';
  ExitFlag := false;
  GetSymbol(c1); {попытаемся получить знак}
  if c1[1] in pm then oper.sgn := GetSign(c1[1])
  else begin
    oper.sgn := 1;
    c := c1
  end;
  repeat
    GetSymbol(c1);
    if c1 = '' then ExitFlag := true
    else if c1[1] in pm then begin
      p := p - 1;
      ExitFlag := true
    end
    else
      c := c + c1
  until ExitFlag;
  if c <> '' then
  begin
    n := Length(c);
    for i := 1 to n do a[i] := c[i];
    Sort(a, n);
    c := '';
    for i := 1 to n do c := c + a[i];
    oper.vars := c
  end
  else oper.vars := ''
end;

procedure Add2M(var a: tM; c: tOper; var pn: integer);
{
Ищет среди элементов массива a.vars элемент, совпадающий с с.vars.
При нахождении алгебраически добавляет c.sgn к a[i].sgn, в противном случае
добавляет в массив новый элемент a[i], увеличивая pn на 1.
При вызове pn - количество элементов в массиве.
}
var
  i: integer;
  c1: string;
  found: boolean;

begin
  c1 := c.vars;
  i := 1;
  while (i <= pn) and (not found) do
  begin
    found := (c1 = a[i].vars);
    if found then a[i].sgn := a[i].sgn + c.sgn
    else i := i + 1
  end;
  if not found then begin
    a[i].sgn := c.sgn;
    a[i].vars := c1;
    pn := pn + 1
  end
end;

function Convert(k: integer): string;
begin
  case k of
    -1: Result := '-';
    0: Result := '';
    1: Result := '+';
  else begin
      Str( k, Result);
      if k > 0 then Result := '+' + Result
    end
  end
end;

var
  c, cz: string;
  n1, i: integer;
  opr: tOper;
  a: tM;

begin
  symb := pm + letter;
  p := 1;
  n1 := 0;
  writeln('Введите исходное выражение');
  readln(s);
  s := LowerCase(s); {перевод символов в нижний регистр}
  l := Length(s);
  repeat
    GetOper(opr);
    Add2M(a, opr, n1)
  until p > l;
  if n1 > 0 then
  begin
    cz := Convert(a[1].sgn);
    if cz = '+' then cz := '';
    if cz = '' then c := ''
    else c := cz + a[1].vars;
    for i := 2 to n1 do
    begin
      cz := Convert(a[i].sgn);
      if cz <> '' then c := c + cz + a[i].vars
    end
  end
  else c := '';
  if c='' then c:='0';
  if c[1]='+' then c:=copy(c,2,Length(c)-1);
  writeln('Результат: ', c)
end.

Тестовое решение:

Введите исходное выражение
abc +    a+bca  -acb+abc+abc  +a 
Результат: 3abc+2a

Введите исходное выражение
ab-bca+bc+cba+abc-ba+cba+da+adb+bad-db
Результат: 2abc+bc+ad+2abd-bd

Ответить на вопрос

Поделитесь своими знаниями, ответьте на вопрос:

Сделать по программированию в pascal. 1. найти произведение всех элементов массива размерностью n (если элемент равен 0, то пропустить 2. найти максимальный по модулю элемент матрицы. напечатать его значение и индексы.
Ваше имя (никнейм)*
Email*
Комментарий*

Популярные вопросы в разделе

avdeevana
alanatan5757
vipppp19743355
borisrogovpr3407
sahar81305
fixer2006
NIKOLAI
hvostna23
krasilnikov74
ALLA1868
BrezhnevaKoidula
lk1303
Татьяна Гришаевич
toniv
viktort889841