Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Внимание! Есть замечания модератора по теме: Не злоупотребляйте ПРОПИСНЫМИ буквами, это запрещено правилами форума!
Старый 04.12.2012, 23:36   #1
kat1438
Новичок
Джуниор
 
Регистрация: 04.12.2012
Сообщений: 7
Восклицание задача про матрицу паскаль

Помогите пожалуйста! Мне нужно решить задачу.
условие:Ввести матрицу и определить, какой элемент – положительный или отрицательный – расположен ближе к началу матрицы ( к элементу А[1,1])
Программу я написала,но не уверена в правильности второй части задачи. Извиняюсь,если это полный бред))в Паскале я не очень сильна,но стараюсь постичь))
Проверьте пожалуйста
Код:
program p2;
uses crt;
type mas=array[1..30,1..30] of integer;
var
 a:mas;
 m,n,j,i:integer;
 s1,s2:integer;
 
begin
  writeln('Введите число строк матрицы , <=30');
  readln(m);
  writeln('Введите число столбцов матрицы, <=30');
  readln(n);

  for i:=1 to m do
     for j:=1 to n do
     begin
        write('A[',i,',',j,']=');
        readln(A[i,j]);
     end;

  writeln('Матрица А');
  for i:=1 to m do
  begin
     for j:=1 to n do
        write(A[i,j]:6, ' ');
        writeln;
  end;


  s1:=1;
  s2:=2;
  begin
   for i:=1 to m do
       for j:=1 to n do

         if A[s1,j]
         then begin
                s1:=s1+1;

              end
         else if A[s2,j]
              then begin
                     s2:=s2+1;
                   end;

   end;


  if A[s1,s2]<0
  then writeln('Ближе к началу матрицы отрицательный элемент=', A[s1,s2])
  else if A[s1,s2]>0
  then writeln('Ближе к началу матрицы положительный элемент=', A[s1,s2]);
  readln;
end.
kat1438 вне форума Ответить с цитированием
Старый 04.12.2012, 23:53   #2
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,309
По умолчанию

А каков критерий близости?
Если близость по расстоянию от вершины матрицы, то вроде можно сравнивать через Пифагора (a[i,j] удален на (i-1)^2+(j-1)^2.
Или тут какой то другой критерий?
И вот тут, например:
Код:
if A[s1,j] then
begin
    s1:=s1+1;
end
else
    if A[s2,j] then
    begin
       s2:=s2+1;
    end;
A[s1,j] и A[s2,j] - это ведь не логические переменные.
Вместе с тем, тут:
Код:
if A[s1,s2]<0
  then writeln('Ближе к началу матрицы отрицательный элемент=', A[s1,s2])
  else if A[s1,s2]>0
  then writeln('Ближе к началу матрицы положительный элемент=', A[s1,s2]);
Что-то тут ...
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 05.12.2012, 00:05   #3
kat1438
Новичок
Джуниор
 
Регистрация: 04.12.2012
Сообщений: 7
По умолчанию

честно,я сама не знаю по какому критерию))я уже неделю голову над этой задачей ломаю...
kat1438 вне форума Ответить с цитированием
Старый 05.12.2012, 00:19   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Код:
const
  size = 100;

type
  mas = array [1 .. size, 1 .. size] of integer;

var
  a: mas;
  m, n, j, i: integer;
  s1, s2: integer;

begin
  writeln('Введите число строк матрицы , <=', size);
  readln(n);
  writeln('Введите число столбцов матрицы, <=', size);
  readln(m);

  for i := 1 to n do
    for j := 1 to m do
    begin
      write('A[', i, ',', j, ']=');
      readln(a[i, j]);
    end;

  writeln('Матрица А');
  for i := 1 to n do
  begin
    for j := 1 to m do
      write(a[i, j]:6, ' ');
    writeln;
  end;

  s1 := n;
  s2 := m;

  for i := n downto 1 do
    for j := m downto 1 do
      if ((i <> 1) or (j <> 1)) and (a[i, j] <> 0) and
        (sqr(i - 1) + sqr(j - 1) < sqr(s1 - 1) + sqr(s2 - 1)) then
      begin
        s1 := i;
        s2 := j;
      end;

  if a[s1, s2] < 0 then
    writeln('Ближе к началу матрицы отрицательный элемент=', a[s1, s2])
  else if a[s1, s2] > 0 then
    writeln('Ближе к началу матрицы положительный элемент=', a[s1, s2]);
  readln;
end.
Если по Пифагору. Хотя получается топорное решение (перебор всех элементов).
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 05.12.2012 в 01:24.
BDA вне форума Ответить с цитированием
Старый 05.12.2012, 00:25   #5
kat1438
Новичок
Джуниор
 
Регистрация: 04.12.2012
Сообщений: 7
По умолчанию

а если не по Пифагору попробовать решить?
kat1438 вне форума Ответить с цитированием
Старый 05.12.2012, 00:38   #6
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Цитата:
а если не по Пифагору попробовать решить?
Придумайте свою меру расстояния
Можно складывать координаты, но тогда будет такая "картина":
Цитата:
2 3 4 5
3 4 5 6
4 5 6 7
В таблице указаны расстояния для матрицы 3 на 4
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 05.12.2012, 00:40   #7
kat1438
Новичок
Джуниор
 
Регистрация: 04.12.2012
Сообщений: 7
По умолчанию

ок))а как тогда это написать в Паскале?))если не трудно, подскажите пожалуйста
kat1438 вне форума Ответить с цитированием
Старый 05.12.2012, 00:48   #8
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Что написать в паскале?

Пифагор:
Код:
if ((i <> 1) or (j <> 1)) and (a[i, j] <> 0) and (sqr(i - 1) + sqr(j - 1) < sqr(s1 - 1) + sqr(s2 - 1)) then
Сложение координат:
Код:
if ((i <> 1) or (j <> 1)) and (a[i, j] <> 0) and (i + j < s1 + s2) then
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 05.12.2012 в 01:24.
BDA вне форума Ответить с цитированием
Старый 05.12.2012, 01:03   #9
kat1438
Новичок
Джуниор
 
Регистрация: 04.12.2012
Сообщений: 7
По умолчанию

мне преподаватель посоветовал использовать такую формулу в программе для того, чтобы определить ближайший элемент...
Код:
N*(I-1)+J
Я не знаю,где ее именно применить в программе. Вы не могли бы мне написать "кусок" этой программы с использованием этой формулы?
kat1438 вне форума Ответить с цитированием
Старый 05.12.2012, 01:21   #10
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Конечно можно написать:
Код:
if ((i <> 1) or (j <> 1)) and (a[i, j] <> 0) and (n * (i - 1) + j < n * (s1 - 1) + s2) then
Но лучше:
Код:
const
  size = 100;

type
  mas = array [1 .. size, 1 .. size] of integer;

var
  a: mas;
  m, n, j, i: integer;

begin
  writeln('Введите число строк матрицы , <=', size);
  readln(n);
  writeln('Введите число столбцов матрицы, <=', size);
  readln(m);

  for i := 1 to n do
    for j := 1 to m do
    begin
      write('A[', i, ',', j, ']=');
      readln(a[i, j]);
    end;

  writeln('Матрица А');
  for i := 1 to n do
  begin
    for j := 1 to m do
      write(a[i, j]:6, ' ');
    writeln;
  end;

  for i := 1 to n do
    for j := 1 to m do
      if ((i <> 1) or (j <> 1)) and (a[i, j] <> 0) then
      begin
        if a[i, j] < 0 then
          writeln('Ближе к началу матрицы отрицательный элемент=', a[i, j])
        else
          writeln('Ближе к началу матрицы положительный элемент=', a[i, j]);
        readln;
        exit;
      end;
  writeln('Все элементы - нулевые');
  readln;
end.
Эта формула (N*(I-1)+J) преобразует номер элемента в двумерном массиве в порядковый номер.
Код:
1  2  3  4
5  6  7  8
9 10 11 12
Достаточно выйти из циклов, как только найдем первый ненулевой элемент.

Кстати, допустил ошибку в проверке - исправил во всех сообщениях.
ПС Если элемент а[1, 1] тоже должен участвовать в рассмотрении, то убрать проверку ((i <> 1) or (j <> 1)).
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 05.12.2012 в 01:27.
BDA вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
задача про матрицу смежности в графе nic-nic Помощь студентам 1 07.10.2012 17:26
Задача про шары в шляпах [Паскаль] t2skler Помощь студентам 1 05.12.2010 11:13
Реальна ли Вилка :) /*Я про букмекеров, а не про матрицу :d */ Izhic Свободное общение 14 10.11.2009 13:39
Задача на матрицу [Паскаль] Ам тя Помощь студентам 7 28.10.2009 14:31
Задача на паскале про матрицу Olga O. Помощь студентам 7 18.02.2009 20:45