Решения к уроку 6 (Практика - 2)



1. Найдите наибольшее значение отношения трехзначного числа к сумме его цифр.
Задача решается методом перебора всех возможных вариантов. Начальное значение переменной первого цикла равно единице, а не нулю т.к. число по условия задачи трехзначное. Соответственно его минимальное значение равно 100.
var
  a,b,c: integer;
  res: real;
begin
  res := 0;
  for a := 1 to 9 do
    for b := 0 to 9 do
      for c := 0 to 9 do
      if (a*100 + b*10 + c) / (a + b + c) > res then
        res:= (a*100 + b*10 + c) / (a + b + c);
   writeln ('Результат равен ', res);
end.
     
2. Дана строка, состоящая из символов, каждый из которых является знаком «+» или цифрой, начинающаяся и заканчивающаяся цифрой. Если в строке встречается сочетание «++», то выдать сообщение об ошибке, в противном случае вычислить получившуюся сумму.
Эта задача рассчитана больше на знание языка программирования, чем  на сообразительность. Дело в  том, что в языке Turbo Pascal нет функции преобразования строки в число. Для решения задачи приходиться использовать функцию "ORD", которая позволяет получить порядковый номер любого символа согласно таблице ASCII-кодов. Например, номер сивола '0' - 48, а номер символа'1' - 49. Как вы понимаете, чтобы получить искомую цифру, необходимо отнять от номера символа 48.
const
  str = '2 + 6 + 8 + 9 + 1 + 5';
var
 i,res: integer;
begin
  for i := 1 to length(str) - 1 do
    if (str[i] = '+') and (str[i+1]= '+' ) then
      exit;
  for i := 1 to length(str) do
    if str[i] <> '+' then
     res := res + (ord(str[i]) - 48);
  writeln(res);
end.

3.  Каждый элемент квадратной матрицы размеренности NxN равен нулю, либо единице. Найдите количество «островов», образованных единицами. Под «островом» понимается группа единиц (либо одна единица), со всех сторон окруженная нулями (или краями матрицы). Единицы относятся к одному «острову», если из одной из них можно перейти к другой «наступая» на единицы, расположенные в соседних клетках. Соседними являются клетки, граничащие по горизонтали или вертикали.
При решении задачи используется стандартная процедура обхода 4-связной области. В компьютерной графике 4-связной называется клетчатая область, которую можно обойти ходом ладьи.
const
    n = 7;
  var
    mas: array [1..n, 1..n] of integer;
    i,j,res: integer;
  procedure count(i,j: integer);
    begin
     if mas[i,j] <> 1 then
       exit;
     mas[i,j] :=  0;
     count(i + 1, j);
     count(i - 1, j);
     count(i, j + 1);
     count(i, j - 1);
    end;
   begin
   {Инициализируем таймер случайных чисел, иначе некоторые компиляторы будут выдавать одно и тоже поле}
    randomize;
    res := 0;
  {Заполняем матрицу так, чтобы ее наружные клетки были заполнены нулями  иначе при выполнении процедуры "count" возможен выход за границы массива}
    for i := 2 to n-1 do
      for j := 2 to n-1 do
          mas[i,j]:=random(2);
   {Выводим матрицу на экран}
    for i := 1 to n do
      for j := 1 to n do
          begin
            write(mas[i,j],' ');
            if j = n then
              writeln;
          end;
    for i := 1 to n do
      for j := 1 to n do
        begin
          if mas[i,j] = 1 then
           {Сперва увеличиваем переменную res, а потом уже вызываем процедуру counиначе результат будет равен кол-ву клеток матрицы}
            inc(res);
            count(i,j);
        end;
    writeln(res);
  end.

Комментариев нет:

Отправить комментарий