Пятница, 26.04.2024, 06:09 | RSS | Приветствую Вас Гость
Главная | Регистрация | Вход
Меню сайта
Категории раздела
Разное [10]
Решения задач (студентам) [9]
PC Игры - кодинг [2]
Python [1]
PHP, Mysql [1]
HTML, CSS, Javascript [1]
Scilab [1]
Поиск
Опрос
Какой браузер вы сейчас используете?
Всего ответов: 51
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Главная » Статьи » Решения задач (студентам)

Поиск максимума в определенном участке квадратной матрицы

Задача заключается в следующем.
Дана действительная квадратная матрица порядка n. Найти наибольшее из значений элементов, расположенных в закрашенной части матрицы:

В общем-то вся соль этой задачи в том, чтобы считать элементы «нижнего треугольника» квадратной матрицы. Это просто, если учесть кое-какую закономерность. Последняя строка считывается полностью, а последующие строки вверх до середины матрицы считываются не полностью. От всех строк, начиная с предпоследней и до середины, отсекается с каждого края по 1, по 2, по 3 ... и т.д. (до n/2).

Это можно организовать следующим образом. Считываются строки массива от строки n-1 до n/2. Притом надо учесть особенности языка, на котором Вы составляете программу. Если это C-подобный язык (кроме Python), то достаточно обычного деления (так как при делении целого числа на целое результат получается без дробной части, так что про нее можно благополучно забыть). Если это Pascal или Object Pascal, то вместо деления нужно будет использовать DIV. Если же вы пишете программу на Python, то следует использовать, так же, как и в Pascal, целочисленное деление. В Python целочисленное деление записывается как // (два слэша). То есть таким образом мы считаем массив ровно до середины, не зависимо от того, четная у него размерность или не четная.
В пределах строк элементы надо считывать в интервале от k до m, которые изначально должны иметь значения 0 и n соответственно. С каждой новой строкой k должно увеличиваться на 1, а m должно уменьшаться на 1. Таким образом мы будем обрезать при считывании крайние ненужные элементы строк.

Ну и, конечно же, так как задача состояла в нахождении наибольшего элемента из элементов в «нижнем треугольнике», параллельно со считыванием элементов находим максимум. Удобнее это сделать, присвоив заранее переменной max значение самого нижнего левого элемента (так как считывать начинаем с него), а затем сравнивать каждый считанный элемент с переменной max, присваивая к ней элемент массива, если он больше нее.
Вот, собственно, и все!

Пример задачи на C

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
void main()
{
  int M[100][100]={0}, i, j, n, k, m, x, max;
  randomize();
  printf("Enter size of squre matrix (n): ");
  scanf("%d", &n);
  //заполнение и вывод матрицы n x n
  for (i=0; i<n; i++)
  {
    for (j=0; j<n; j++)
    {
      M[i][j]= random(10);
      printf("%d ", M[i][j]);
    }
    printf("\n");
  }
  printf("\n");
  //читаем элементы нижнего треугольника по строкам снизу вверх
  k=0; m=n; x=n/2; max= M[n][1];
  printf("Elements of bottom triengulare (strings bottom to top):\n");
  for (i=(n-1); i>=x; i--)
  {
    for (j=k; j<m; j++)
    {
      printf("%d ", M[i][j]);
      if (M[i][j]>max) max= M[i][j];
    }
    printf("\n");
    k=k+1; m=m-1;
  }
  printf("\n");
  printf("Maximum from these elements is %d", max);
  getch();
}

Поделиться ссылкой в соц. сетях:

Категория: Решения задач (студентам) | Добавил: =Sanek= (14.03.2011)
Просмотров: 3133 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]

© 2024 raznocoding.do.am