Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 17.11.2011, 12:16   #1 (permalink)
shrek=)
Студент БГПУ
 
Аватар для shrek=)
 
Регистрация: 06.02.2010
Сообщений: 420
Записей в дневнике: 3
Сказал(а) спасибо: 1
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 470
По умолчанию Заштрихованная область

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

Помогите пожалуйста, нужно составить цикл проверки заштрихованной области, а уж все остальное я сам!
Миниатюры
0050.jpg  
shrek=) вне форума   Ответить с цитированием

Старый 17.11.2011, 12:16
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Пожалуйста, просмотрите внимательно аналогичные топики

DSL-2600U, Архангельская область
Москва и область. Прожарка видеочипа ноутбука. Ищу специалиста.
Нужен скутер! Тюменская область.
Как замазать небольшую область на видео?
Область уведомлений XP SP3

Старый 17.11.2011, 13:03   #2 (permalink)
Rossomaxa
Лесник
 
Аватар для Rossomaxa
 
Регистрация: 11.10.2011
Сообщений: 338
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 771
По умолчанию

Нужно уточнить, входят ли заштрихованную область диагонали, вещественные числа или еще какие элементы матрицы.
вот пример, если не входят диагонали и числа целые (на нужный язык думаю сами переведете, 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 вне форума   Ответить с цитированием
Старый 17.11.2011, 15:23   #3 (permalink)
shrek=)
Студент БГПУ
 
Аватар для shrek=)
 
Регистрация: 06.02.2010
Сообщений: 420
Записей в дневнике: 3
Сказал(а) спасибо: 1
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 470
По умолчанию

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

Последний раз редактировалось shrek=); 17.11.2011 в 15:28
shrek=) вне форума   Ответить с цитированием
Старый 17.11.2011, 15:35   #4 (permalink)
Rossomaxa
Лесник
 
Аватар для Rossomaxa
 
Регистрация: 11.10.2011
Сообщений: 338
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 771
По умолчанию

Отформатируйте код правильно и сами поймете в чем дело (я имею ввиду открывающие и закрывающие скобки выровнять)
Rossomaxa вне форума   Ответить с цитированием
Старый 17.11.2011, 15:41   #5 (permalink)
shrek=)
Студент БГПУ
 
Аватар для shrek=)
 
Регистрация: 06.02.2010
Сообщений: 420
Записей в дневнике: 3
Сказал(а) спасибо: 1
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 470
По умолчанию

Понял в чем ошибка и дело совсем не в скобках!!!!
Цитата:
Сообщение от shrek=) Посмотреть сообщение
n/=n;
- строчка лишняя из предыдущего варианта решения.
И все равно не корректно работает!!!
Миниатюры
1.jpg  
shrek=) вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 17.11.2011, 16:38   #6 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Миша, хочу предложить решение об организации цикла. Проверено для 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.jpg   shr_2.jpg  
Vladimir_S вне форума   Ответить с цитированием
Старый 17.11.2011, 17:30   #7 (permalink)
shrek=)
Студент БГПУ
 
Аватар для shrek=)
 
Регистрация: 06.02.2010
Сообщений: 420
Записей в дневнике: 3
Сказал(а) спасибо: 1
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 470
По умолчанию

Спасибо, большое все работает!!!
shrek=) вне форума   Ответить с цитированием
Старый 17.11.2011, 18:15   #8 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от shrek=) Посмотреть сообщение
Спасибо, большое все работает!!!
Ну вот и славно.
Vladimir_S вне форума   Ответить с цитированием
Старый 17.11.2011, 22:32   #9 (permalink)
Rossomaxa
Лесник
 
Аватар для Rossomaxa
 
Регистрация: 11.10.2011
Сообщений: 338
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 771
По умолчанию

Цитата:
Сообщение от shrek=) Посмотреть сообщение
Понял в чем ошибка и дело совсем не в скобках!!!!
- строчка лишняя из предыдущего варианта решения.
И все равно не корректно работает!!!
Я имел ввиду если скобки расставить правильно то читабильнее код. А некорректно потому, что индексы у массива не с 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. дебагером пользуйтесь и тогда многие вопросы решаются сами собой
Rossomaxa вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




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

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.