![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
Определение столбца............. |
![]()
Сообщение
#1
|
Гость ![]() |
Помогите пожалуйста
Вот такая задача Я нашел число нулевых элементов в каждом столбце(ch[j]) И теперь мне надо найти столбец в котором больше всего нулевых элементов.? |
Дож |
![]()
Сообщение
#2
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 179 Пол: Мужской Репутация: ![]() ![]() ![]() |
Допустим вот так:
Var i,max,temp : integer;
.......................
.......................
i:=0{или -1, с чего начинается твой массив?}
While i<>columnNum do begin
i:=i+1;
If ch[i]>temp then begin
temp:=ch[i];
max:=i;
end;
end;
А вообще про массивы написано в FAQ. Сообщение отредактировано: Дож - -------------------- Доброго времени суток.
:nnn: |
Serega18 |
![]()
Сообщение
#3
|
Новичок ![]() Группа: Пользователи Сообщений: 26 Пол: Мужской Репутация: ![]() ![]() ![]() |
подЗадача:Поставить на первое место столбец с наименьшим количеством нулевых элементов .
Есть матрица A[i,j] и число нулевых элементов в столбце пусть num[j] Вот как сделал я Код Procedure resort(var a:matrix;var num:integer); Var i,j:integer; Begin for i:=1 to 5 do Begin For j:=1 to 5 do Begin IF num[1]>num[j] A[i,1]:=A[i,j]; A[i,j]:=A[1,1]; end; end; end; Что здесь не так? |
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
:no: Ты должен сначала определить, в каком столбце число нулевых элементов минимально, а уже потом менять этот столбец с первым...
Чтобы это сделать одним оператором, нужно определить матрицу по-другому: FAQ: Как задать матрицу чтобы ... |
Serega18 |
![]()
Сообщение
#5
|
Новичок ![]() Группа: Пользователи Сообщений: 26 Пол: Мужской Репутация: ![]() ![]() ![]() |
Faq прочел ниче не понял.
А чтобы найти столбец с наименьшим число нулевых элементов пойдет вот так: Код Procedure(var A:matrix,var num:integer); var i,j:integer; begin j:=0 for i:=1 to 5 do begin for j:=1 to 5 do begin if num[j]<min then min:=num[j]; end; end; end; |
volvo |
![]()
Сообщение
#6
|
Гость ![]() |
Не пойдет... У тебя это даже не скомпилируется ... Ты передаешь Num как Integer, а внутри процедуры обращаешься к нему как к массиву... Это как понять?
|
Serega18 |
![]()
Сообщение
#7
|
Новичок ![]() Группа: Пользователи Сообщений: 26 Пол: Мужской Репутация: ![]() ![]() ![]() |
FА если у меня num будет одномерным массивом
Код Procedure(var A:matrix,var num:odn); var i,j:integer; begin j:=0 for i:=1 to 5 do begin for j:=1 to 5 do begin if num[j]<min then min:=num[j]; end; end; end; |
volvo |
![]()
Сообщение
#8
|
Гость ![]() |
Function min_nulls(var A:matrix): integer;
var
i, j: integer;
min, indx, count: integer;
begin
min := 5;
for i := 1 to 5 do begin
count := 0;
for j := 1 to 5 do
if A[j, i] = 0 then inc(count)
if min > count then begin
min := count; indx := i
end;
end;
min_nulls := indx
end;
Эта функция возвращает номер столбца, в котором число нулевых элементов минимально... И не надо ничего делать перед этим, никаких подсчетов :P |
Serega18 |
![]()
Сообщение
#9
|
Новичок ![]() Группа: Пользователи Сообщений: 26 Пол: Мужской Репутация: ![]() ![]() ![]() |
count,indx -а что это такое?
|
volvo |
![]()
Сообщение
#10
|
Гость ![]() |
Переменные, что еще?
![]() |
Serega18 |
![]()
Сообщение
#11
|
Новичок ![]() Группа: Пользователи Сообщений: 26 Пол: Мужской Репутация: ![]() ![]() ![]() |
Значит при перестоновке поставить indx
Код Procedure resort(var a:matrix;var num:integer); Var i,j:integer; Begin for i:=1 to 5 do Begin For j:=1 to 5 do Begin IF num[1]>num[j] A[i,1]:=A[i,indx]; A[i,indx]:=A[1,1]; end; end; end; |
volvo |
![]()
Сообщение
#12
|
Гость ![]() |
Да что тебя так тянет на этот NUM?
Procedure resort(var a:matrix; indx: integer);
Var i, T:integer;
Begin
if indx <> 1 then
for i := 1 to 5 do begin
T := a[i, 1]; a[i, 1] := a[indx, 1]; a[indx, 1] := T
end;
end;
Вот и все... и вызывать вот так: begin
...
resort(A, min_nulls(A)); { это вся работа }
end.
После этого только распечатать... |
Serega18 |
![]()
Сообщение
#13
|
Новичок ![]() Группа: Пользователи Сообщений: 26 Пол: Мужской Репутация: ![]() ![]() ![]() |
Спасибо :molitva: (А как во внутренней спецификации описать Т
![]() |
volvo |
![]()
Сообщение
#14
|
Гость ![]() |
Цитата(Serega18 @ 15.05.05 23:09) А как во внутренней спецификации описать Т Во внутренней спец... чего? ![]() "Т" у меня - буферная переменная для обмена значений... |
Serega18 |
![]()
Сообщение
#15
|
Новичок ![]() Группа: Пользователи Сообщений: 26 Пол: Мужской Репутация: ![]() ![]() ![]() |
Появился еще один вопрос:
А что если после нахождения столбца с наименьшим количеством нулевых элементов мне надо менять элементы в столбце,а не менять местами столбцы, например поставить все нули в конец столбца . Мой вариант: Код Procedure t(var a:matrix; indx:integer); Var i,n:integer; Begin n:=0 for i:=1 to 5 do Begin IF A[i,indx]=0 then T:=A[5-n,indx] A[5-n,ind]:=A[i,indx]; A[i,indx]:=T; n:n+1; end; end; |
volvo |
![]()
Сообщение
#16
|
Гость ![]() |
IF A[i,indx]=0 then
T:=A[5-n,indx]
A[5-n,ind]:=A[i,indx];
A[i,indx]:=T;
n:n+1;
это не будет работать... Begin ... End забыл. Кроме этого, зачем работать со значением A[i, indx], если ты только что выяснил, что оно равно 0? ![]() |
Serega18 |
![]()
Сообщение
#17
|
Новичок ![]() Группа: Пользователи Сообщений: 26 Пол: Мужской Репутация: ![]() ![]() ![]() |
Код IF A[i,indx]=0 then T:=A[5-n,indx] A[5-n,ind]:=A[i,indx]; A[i,indx]:=T; n:=n+1; Условие-то что i-тый элемент в столбце indx =0 Затем я T -присваиваю последний элемент в столбце и меняю i-тый элемент который равен нулю с последним Цитата Кроме этого, зачем работать со значением A[i, indx], если ты только что выяснил, что оно равно 0? Я пытаюсь нулевой элемент переставить в конец,для этого A[i, indx] должен быть равен нулю |
volvo |
![]()
Сообщение
#18
|
Гость ![]() |
Вот только не говори мне, что этот код НЕ эквивалентен твоему:
IF A[i,indx]=0 then begin
A[i,indx]:=A[5-n,indx];
A[5-n,indx] := 0;
n:=n+1;
end;
T - "лишняя" переменная... Будь внимательнее |
Serega18 |
![]()
Сообщение
#19
|
Новичок ![]() Группа: Пользователи Сообщений: 26 Пол: Мужской Репутация: ![]() ![]() ![]() |
А почему T лишняя? (я думал что для перестановки двух элементов всегда нужна переменная)
|
Дож |
![]()
Сообщение
#20
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 179 Пол: Мужской Репутация: ![]() ![]() ![]() |
Естественно, нет...
Это Код k:=a; a:=b; b:=k; можно заменить на то: Код a:=a+b; b:=a-b; a:=a-b; -------------------- Доброго времени суток.
:nnn: |
![]() ![]() |
![]() |
Текстовая версия | 18.04.2025 15:03 |