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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.10.2012, 21:09   #1
leshaiitp
 
Регистрация: 14.10.2012
Сообщений: 7
По умолчанию Delphi - массивы

Здравствуйте.
Может кто-нибудь объяснить студенту, как можно сравнить элементы в массиве...
чтобы было более понятно, приведу пример: задан массив размерностью NxM. в нем нужно найти особый элемент, который больше, чем элементы слева и меньше, чем элементы справа. [элементы слева]<[особый массив]<[элементы справа] - по строке, не столбцу

код программы не нужен - нужно как можно более подробное объяснение, чтобы я мог написать программу.
С Уважением.
leshaiitp вне форума Ответить с цитированием
Старый 14.10.2012, 21:29   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Т.е. если я правильно понял - таких элементов будет столько, сколько строк в массиве?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.10.2012, 21:35   #3
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Матерь Божья, 1 студент, который хочет сам разобраться сам написать программу, а не получить готовый код...

Допустим дано
Код:
123
321
132
Первая строка понятно - выводим 2, а во 2 и 3 какой будет результат?
Poma][a вне форума Ответить с цитированием
Старый 14.10.2012, 21:46   #4
leshaiitp
 
Регистрация: 14.10.2012
Сообщений: 7
По умолчанию

Stilet таких элементов может не быть вообще. я установил заполнение StringGrid рандомом

Рома, в целом думаю верно с первой строкой. если брать первый элемент: слева 1, особый 1, справа 2. думаю не подходит. брать 2-ой элемент. 1<2<3 - подходит. брать 3-ий элемент. 2<3<3 - тоже не подходит. НО! с крайними элементами я не уверен. может 1 так же будет особым, если брать слева от единицы 0. я не знаю
2-ая строка. тут ни одного получается
3-ая строка. получается либо единица будет особым, либо ни одного особого

забыл добавить. важная вещь. сравнивается интервал до особого элемента. т.е. если брать последний, крайний, элемент, то с ним сравнивается вся строка до этого элемента. первая строка, 3 элемент. 1(2)<3<3. сначала сравниваем 1, потом 2. и если хоть один элемент не удовлетворяет условию, то это уже не особый массив
С Уважением.

Последний раз редактировалось leshaiitp; 14.10.2012 в 21:54. Причина: Пояснение
leshaiitp вне форума Ответить с цитированием
Старый 15.10.2012, 07:19   #5
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Не в рубаюсь я в задание....

Вот погуглил :
определите количество "особых" элементов масиива С(n,m).(Элемент считается особым, если выполняются ниже перечисленные условия: элемент больше суммы остальных элементов своего столбца. в строке слева от элемента находятся элементы, меньшие его, а справа большие). Для отладки программы исходный массив сформировать с помощью генератора случайных чисел.
(Код см. ниже)

Возможно как-то поможет....
Вложения
Тип файла: txt new 2.txt (6.8 Кб, 104 просмотров)
Poma][a вне форума Ответить с цитированием
Старый 15.10.2012, 19:39   #6
leshaiitp
 
Регистрация: 14.10.2012
Сообщений: 7
По умолчанию

Рома спасибо. хоть мне сказали, чтобы я не пытался разобраться в чужом коде, но здесь есть хоть-какое описание, что встретишь не часто - думаю справляюсь.

ничего не могу придумать...


...
объясните, как записать блок-схему:
попытаюсь подробно расписать
for j:=1 to N do
j=1 - да -> for k=2 to N do
A[i,j] < A[i,k] - да -> k=N - да -> os:=os+1 наверно конец.
(где матрица сравнивается) - да -> k=N - нет -> переход к (k=2 N)
(там где j=1) - нет -> ... тут не нужно


как написать кодом в delphi? там еще 4 таких блока. может если пойму этот, попробую описать другие

Код:
for j:=1 to N do
    if j=1 then 
      for k:=2 to N do
          if A[i,j] < A[i,k] then
           if k=N then os:=os+1;
знаю, что не так. как это исправить?
С Уважением.

Последний раз редактировалось Stilet; 18.10.2012 в 20:22.
leshaiitp вне форума Ответить с цитированием
Старый 18.10.2012, 20:07   #7
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,543
По умолчанию

Цитата:
код программы не нужен - нужно как можно более подробное объяснение, чтобы я мог написать программу.
0. перебираем строки j:=1..N
0.1 для одной строки j
1. проверяем все элементы i:=1..M
1.1. берем элемент (i, j) (см п.0)
2.0. изначально считаем его особым (isosob:=true)
2.1. проверяем все элементы левее (k=1..i-1, j) на выполнение условия <
2.2. проверяем все элементы правее (k=i+1..M, j) на >
НЕ выполнение хотя бы одного означает, это НЕ ТО что нам нужно
if not (...) then isosob:=false

1.2. в конце проверок проверяем особость (isosob) и выводим результат

2.0 изначально считаем особым
2.x проверяем все элементы строки (k=1..M) на
2.1. если (k<i) слева то проверяем на <
2.2. если (k>i) справа то проверяем на >
2.3. если (k=i) совпал то не проверяем.
не выполнено значит не то. isosob:=false
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 18.10.2012 в 20:09.
evg_m вне форума Ответить с цитированием
Старый 18.10.2012, 20:07   #8
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Код:
var
        a : array [1..10] of Integer;
        r : array [1..10] of Integer;
        m, n, i, j : Integer;
begin
        ReadLn (n);
        ReadLn (m);
        for j := 1 to m do begin
			for i := 1 to n do
					Read (a[i]);

			i := 2;
			while (i <= n-1) do
					if not ((a[i] > a[i-1]) and (a[i] < a[i+1])) then
							Inc (i)
					else begin
							r[j] := a[i];
							Break
					end;

        end;

        for i := 1 to m do
                Write (r[i], ' ')
end.
n - кол-во столбцов
m - кол-во строк
Poma][a вне форума Ответить с цитированием
Старый 18.10.2012, 22:49   #9
leshaiitp
 
Регистрация: 14.10.2012
Сообщений: 7
По умолчанию

Код:
isosob:=true;

for j:=1 to N do
for i:=1 to M do
	
проверяем первый ли элемент строки

	if j=1 then
		for k:=2 to N do // если да, проверям справа
			if A[i,j] < A[i,k] then 
				if k=N then os:=os+1; // если k равно последнему, тогда счетчик увеличивается на +1

если это не первый элемент строки
	else 
		if j=N then 
			for k=1 to N-1 do // если это последний элемент строки, то проверяем слева
				if A[i,k] < A[i,j] then 
					if k=N-1 then os:=os+1; // если Л предполсдений, тогда увелич счетчик на +1

если элемент не первый и не последний в строке
	else
		if j>1 then
			for k=1 to j-1 do
				if A[i,k] < A[i,j] then 

			...............
		for k:=j+1 to N do
			if A[i,j] < A[i,k] then 
				if k=N then os:=os+1;

evg_m боюсь, что я не совсем понял, ибо долго думал, куда и какие циклы вписать по этой схеме

Рома, на паскале код бесконечный. я не смогу его толком проконтролировать из-за ручного ввода. тот файл, что ты вкладывал был лучше в этом плане
С Уважением.
leshaiitp вне форума Ответить с цитированием
Старый 18.10.2012, 23:04   #10
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Цитата:
на паскале код бесконечный
Не совсем понимаю, как это бесконечный?

Давайте введем, то что мы уже знаем - это двухмерный массив 3 на 3
Код:
1 2 3
3 2 1
1 3 2
Перед этим введем 3 - кол-во столбцов.
и 3 - кол-во строк
Изображения
Тип файла: jpg Безымянный3.jpg (24.8 Кб, 91 просмотров)
Poma][a вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Массивы на delphi cyber922 Помощь студентам 4 06.10.2011 14:28
delphi-массивы RsGoLd Помощь студентам 7 10.12.2010 18:24
Delphi массивы world12_tk Помощь студентам 1 04.10.2010 02:29
Delphi. Массивы Len4i]{ Помощь студентам 2 06.06.2010 08:27
Массивы. Delphi gree Помощь студентам 10 11.05.2009 22:11