Технический форум

Технический форум (http://www.tehnari.ru/)
-   Помощь студентам (http://www.tehnari.ru/f41/)
-   -   Заштрихованная область (http://www.tehnari.ru/f41/t59879/)

shrek=) 17.11.2011 12:16

Заштрихованная область
 
Вложений: 1
Доброго времени суток!

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

Rossomaxa 17.11.2011 13:03

Нужно уточнить, входят ли заштрихованную область диагонали, вещественные числа или еще какие элементы матрицы.
вот пример, если не входят диагонали и числа целые (на нужный язык думаю сами переведете, 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];
    }
 }


shrek=) 17.11.2011 15:23

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");
}


Rossomaxa 17.11.2011 15:35

Отформатируйте код правильно и сами поймете в чем дело :) (я имею ввиду открывающие и закрывающие скобки выровнять)

shrek=) 17.11.2011 15:41

Вложений: 1
Понял в чем ошибка и дело совсем не в скобках!!!!
Цитата:

Сообщение от shrek=) (Сообщение 619124)
n/=n;

- строчка лишняя из предыдущего варианта решения.
И все равно не корректно работает!!!

Vladimir_S 17.11.2011 16:38

Вложений: 2
Миша, хочу предложить решение об организации цикла. Проверено для 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.


shrek=) 17.11.2011 17:30

Спасибо, большое все работает!!!

Vladimir_S 17.11.2011 18:15

Цитата:

Сообщение от shrek=) (Сообщение 619224)
Спасибо, большое все работает!!!

Ну вот и славно.

Rossomaxa 17.11.2011 22:32

Цитата:

Сообщение от shrek=) (Сообщение 619144)
Понял в чем ошибка и дело совсем не в скобках!!!!
- строчка лишняя из предыдущего варианта решения.
И все равно не корректно работает!!!

Я имел ввиду если скобки расставить правильно то читабильнее код. А некорректно потому, что индексы у массива не с 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. дебагером пользуйтесь и тогда многие вопросы решаются сами собой


Часовой пояс GMT +4, время: 13:49.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.