• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о проекте и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Заштрихованная область

  • Автор темы Автор темы shrek=)
  • Дата начала Дата начала

shrek=)

Студент БГПУ
Почётный участник
Регистрация
6 Фев 2010
Сообщения
420
Реакции
6
Баллы
0
Заштрихованная область

Доброго времени суток!

Помогите пожалуйста, нужно составить цикл проверки заштрихованной области, а уж все остальное я сам!
 

Вложения

  • 0050.webp
    0050.webp
    51.2 KB · Просмотры: 374
Нужно уточнить, входят ли заштрихованную область диагонали, вещественные числа или еще какие элементы матрицы.
вот пример, если не входят диагонали и числа целые (на нужный язык думаю сами переведете, a -матрица, N-размерность матрицы):

Код:
int max=int.MinValue;
int min=int.MaxValue;
for (int i=0; i<N; i++)//горизонтальная ось
 for (int j=0; j<N; j++)//вертикальная ось
 {
    if ((i<j && i<N-j)||(i>j && i>N-j))
    {
       if (min>a[i][j]) min=a[i][j];
       if (max<a[i][j]) min=a[i][j];
    }
 }
 
Rossomaxa, протестировал окончательный вид программы, расчет не идет:
Код:
#include <stdlib.h>
#include <stdio.h>
using namespace std;
int main ()
{
    int n=4, a[n][n],i,j,min=1000, max=-1000;
    for (i=0;i<n;i++)
    {
    for (j=0;j<n;j++)
    {
        a[i][j]=1+rand()%10;
        printf ("%2d  ",a[i][j]);
        }
        printf ("\n");
        }
        printf ("\n\n");
        n/=n;
        for (int i=0; i<n; i++)
        for (int j=0; j<n; j++)
        {
        if ((i<j && i<n-j)||(i>j && i>n-j))
        {
       if (a[i][j]>max) max=a[i][j];
       if (a[i][j]<min) min=a[i][j];
    }
 }   
printf ("\n%5d %5d",min,max);            
system ("pause");
}
 
Последнее редактирование:
Отформатируйте код правильно и сами поймете в чем дело :) (я имею ввиду открывающие и закрывающие скобки выровнять)
 

Вложения

  • 1.webp
    1.webp
    10 KB · Просмотры: 77
Миша, хочу предложить решение об организации цикла. Проверено для N=5 (четное количество строк-столбцов; нумерация - с нуля) и для N=6 (нечетное количество). Написано на Паскале - ты уж сам перегони в С и организуй поиск максимумов/минимумов. У меня просто выделяется нужная область. Исходная матрица заполнена единицами, потом для заштрихованной области единицы заменены нулями.

Код:
CONST
 N=6;
VAR
 A:Array[0..N,0..N] of Byte;
 i,j:Byte;

BEGIN

 For i:=0 to N do
  For j:=0 to N do
   A[i,j]:=1;

 For i:=0 to N do
  begin
   For j:=0 to N do
    Write(A[i,j]:2);
   Writeln;
  end;

 Writeln;

 For j:=0 to N div 2 do
  For i:=j to N-j do
   A[i,j]:=0;

 For j:=(N div 2)+1 to N do
  For i:=N-j to j do
   A[i,j]:=0;

 For i:=0 to N do
  begin
   For j:=0 to N do
    Write(A[i,j]:2);
   Writeln;
  end;

 Readln;
END.
 

Вложения

  • Shr_1.webp
    Shr_1.webp
    5.5 KB · Просмотры: 73
  • Shr_2.webp
    Shr_2.webp
    7.1 KB · Просмотры: 79
Спасибо, большое все работает!!!
 
Понял в чем ошибка и дело совсем не в скобках!!!!
- строчка лишняя из предыдущего варианта решения.
И все равно не корректно работает!!!

Я имел ввиду если скобки расставить правильно то читабильнее код. А некорректно потому, что индексы у массива не с 1 а с 0 начинаются, а так же местами i и j поменять, иначе на 90 поворот.

Код:
int max=int.MinValue;
int min=int.MaxValue;
for (int i=0; i<N; i++)//горизонтальная ось
 for (int j=0; j<N; j++)//вертикальная ось
 {
    if ((i<j && i+1<N-j)||(i>j && i+1>N-j))
    {
       if (min>a[j][i]) min=a[j][i];
       if (max<a[j][i]) min=a[j][i];
    }
 }

P.S. дебагером пользуйтесь и тогда многие вопросы решаются сами собой
 
Назад
Сверху