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

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

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

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


Гость






Помогите пожалуйста
Вот такая задача
Я нашел число нулевых элементов в каждом столбце(ch[j])
И теперь мне надо найти столбец в котором больше всего нулевых элементов.?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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.

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


--------------------
Доброго времени суток.
:nnn:
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






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

Чтобы это сделать одним оператором, нужно определить матрицу по-другому: FAQ: Как задать матрицу чтобы ...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






Не пойдет... У тебя это даже не скомпилируется ... Ты передаешь Num как Integer, а внутри процедуры обращаешься к нему как к массиву... Это как понять?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Новичок
*

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

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


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


Гость






Переменные, что еще? blink.gif Count считает сколько в текущем столбце нулевых элементов, indx - запоминает номер того, где их меньше... В результате в indx и остается индекс столбца с минимальным количеством нулей ...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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.

После этого только распечатать...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Новичок
*

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

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


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


Гость






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

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

"Т" у меня - буферная переменная для обмена значений...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 - "лишняя" переменная... Будь внимательнее
 К началу страницы 
+ Ответить 
сообщение
Сообщение #19


Новичок
*

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

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


А почему T лишняя? (я думал что для перестановки двух элементов всегда нужна переменная)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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

 





- Текстовая версия 15.05.2024 20:00
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name