IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

3 страниц V  1 2 3 >  
 Ответить  Открыть новую тему 
> Перестановка столбцов
Определение столбца.............
сообщение 15.05.2005 17:19
Сообщение #1


Гость






Помогите пожалуйста
Вот такая задача
Я нашел число нулевых элементов в каждом столбце(ch[j])
И теперь мне надо найти столбец в котором больше всего нулевых элементов.?
 К началу страницы 
+ Ответить 
Дож
сообщение 15.05.2005 17:40
Сообщение #2


Бывалый
***

Группа: Пользователи
Сообщений: 179
Пол: Мужской

Репутация: -  1  +


Допустим вот так:


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.

Сообщение отредактировано: Дож - 15.05.2005 22:35


--------------------
Доброго времени суток.
:nnn:
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Serega18
сообщение 15.05.2005 17:56
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 26
Пол: Мужской

Репутация: -  0  +


подЗадача:Поставить на первое место столбец с наименьшим количеством нулевых элементов .
Есть матрица 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;

Что здесь не так?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 15.05.2005 18:13
Сообщение #4


Гость






:no: Ты должен сначала определить, в каком столбце число нулевых элементов минимально, а уже потом менять этот столбец с первым...

Чтобы это сделать одним оператором, нужно определить матрицу по-другому: FAQ: Как задать матрицу чтобы ...
 К началу страницы 
+ Ответить 
Serega18
сообщение 15.05.2005 18:32
Сообщение #5


Новичок
*

Группа: Пользователи
Сообщений: 26
Пол: Мужской

Репутация: -  0  +


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;
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 15.05.2005 19:02
Сообщение #6


Гость






Не пойдет... У тебя это даже не скомпилируется ... Ты передаешь Num как Integer, а внутри процедуры обращаешься к нему как к массиву... Это как понять?
 К началу страницы 
+ Ответить 
Serega18
сообщение 15.05.2005 19:27
Сообщение #7


Новичок
*

Группа: Пользователи
Сообщений: 26
Пол: Мужской

Репутация: -  0  +


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;
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 15.05.2005 20:52
Сообщение #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
сообщение 15.05.2005 20:56
Сообщение #9


Новичок
*

Группа: Пользователи
Сообщений: 26
Пол: Мужской

Репутация: -  0  +


count,indx -а что это такое?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 15.05.2005 21:53
Сообщение #10


Гость






Переменные, что еще? blink.gif Count считает сколько в текущем столбце нулевых элементов, indx - запоминает номер того, где их меньше... В результате в indx и остается индекс столбца с минимальным количеством нулей ...
 К началу страницы 
+ Ответить 
Serega18
сообщение 15.05.2005 22:48
Сообщение #11


Новичок
*

Группа: Пользователи
Сообщений: 26
Пол: Мужской

Репутация: -  0  +


Значит при перестоновке поставить 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;
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 15.05.2005 22:52
Сообщение #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
сообщение 15.05.2005 23:09
Сообщение #13


Новичок
*

Группа: Пользователи
Сообщений: 26
Пол: Мужской

Репутация: -  0  +


Спасибо :molitva: (А как во внутренней спецификации описать Т unsure.gif )
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 15.05.2005 23:42
Сообщение #14


Гость






Цитата(Serega18 @ 15.05.05 23:09)
А как во внутренней спецификации описать Т

Во внутренней спец... чего? blink.gif Ты с кем это разговаривал в предыдущем посте? Какая еще внутренняя спецификация?

"Т" у меня - буферная переменная для обмена значений...
 К началу страницы 
+ Ответить 
Serega18
сообщение 16.05.2005 18:14
Сообщение #15


Новичок
*

Группа: Пользователи
Сообщений: 26
Пол: Мужской

Репутация: -  0  +


Появился еще один вопрос:
А что если после нахождения столбца с наименьшим количеством нулевых элементов мне надо менять элементы в столбце,а не менять местами столбцы,
например поставить все нули в конец столбца .
Мой вариант:
Код
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;
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 16.05.2005 18:47
Сообщение #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? blink.gif
 К началу страницы 
+ Ответить 
Serega18
сообщение 16.05.2005 19:07
Сообщение #17


Новичок
*

Группа: Пользователи
Сообщений: 26
Пол: Мужской

Репутация: -  0  +


Код
 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] должен быть равен нулю
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 16.05.2005 19:13
Сообщение #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
сообщение 16.05.2005 19:19
Сообщение #19


Новичок
*

Группа: Пользователи
Сообщений: 26
Пол: Мужской

Репутация: -  0  +


А почему T лишняя? (я думал что для перестановки двух элементов всегда нужна переменная)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Дож
сообщение 16.05.2005 20:04
Сообщение #20


Бывалый
***

Группа: Пользователи
Сообщений: 179
Пол: Мужской

Репутация: -  1  +


Естественно, нет...

Это
Код

k:=a;
a:=b;
b:=k;


можно заменить на то:
Код

a:=a+b;
b:=a-b;
a:=a-b;


--------------------
Доброго времени суток.
:nnn:
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

3 страниц V  1 2 3 >
 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 17.07.2025 13:20
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"