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

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

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

 
 Ответить  Открыть новую тему 
> Задача на матрицы
сообщение
Сообщение #1





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

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


Условие задачи: "Сформировать из строк матрицы B матрицу C, расположив строки так, чтобы количество положительных элементов в строке возрастало с увеличением её порядкового номера". Помогите решить её, плз. (процедуры и функции использоваться не должны).
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Бывалый
***

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

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


var
b:array[1..100,] of integer;
i,j, s1,s2,
n {кол-во строк}
,m {кол-во столбцов}
:integer;
begin
(*вводим размерность матрицы (n*m),
затем элементы самой матрицы*)
for k:=1 to n-1 do
for i:=1 to n-k do
begin
s1:=0; {кол-во положительных элементов}
s2:=0;
for j:=1 to m do
begin
if (b[i,j]>0) then inc(s1);
if (b[i+1,j]>0) then inc(s2);
end;
if (s1>s2) then
{меняем строки b[i,j] и b[i+1,j] местами}
end;
end.

вот как то так....

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3





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

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


Немного не понял этот момент:
Цитата
for k:=1 to n-1 do
for i:=1 to n-k do

Откуда взялись какие-то "k", "n-1", "n-k" ?
Может должно быть так, если судить по Var'у:

For i:=1 to n do For j:=1 to m do


Или может я ошибаюсь, и чего-то недопонял. Поясни, если не сложно.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Бывалый
***

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

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


Цитата(RAVE @ 18.04.2007 20:49) *

Немного не понял этот момент:

Откуда взялись какие-то "k", "n-1", "n-k" ?
Может должно быть так, если судить по Var'у:

For i:=1 to n do For j:=1 to m do


Или может я ошибаюсь, и чего-то недопонял. Поясни, если не сложно.

Нет, в коде всё верно, это метод пузырьковой сортировки. Просто я забыл переменную k объявить.
в разделе объявления переменных нужно вот так написать:

var
b:array[1..100,] of integer; {наша матрица}
i,j,k, {индексы}
s1,s2, {сумма положительных элементов в двух соседних строках матрицы}
n {кол-во строк}
,m {кол-во столбцов}
:integer;

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5





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

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


А нельзя как-нибудь обойтись без "пузырьковой сортировки", а то я такого не проходил вообще...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Бывалый
***

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

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


Цитата(RAVE @ 20.04.2007 16:59) *

А нельзя как-нибудь обойтись без "пузырьковой сортировки", а то я такого не проходил вообще...

почему же нельзя, можно. Выбирай любой алгоритм: Алгоритмы сортировок
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7





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

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


Посмотрел алгоритмы и наткнулся в "Сортировке простой вставкой " на такие вещи:
Pred(i)
Succ(j)
Dec(j)
move(source, sorted, SizeOf(arrType))

Что они значат?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

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


pred(x) - предыдущее целое
succ(x) - следующее целое
dec(x) - x:=x-1


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

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


Цитата
move(source, sorted, SizeOf(arrType))


Перемещает блок данных размером SizeOf(arrType) из source в store, проще говоря копирует масств source в stored


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10





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

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


Хммм.... чёт у мя не вяжется
Вот задача на основе моих знаний +совет выше:

Program ex5;
Const m1=10;
n1=10;
Type A=array[1..m1,1..n1] of integer;
Var U:A;
i,j,s1,s2,T,k,m,n:integer;
begin
Writeln('ZADANIE MATRICI');
Readln(n,m);
For i:=1 to m do For j:=1 to n do begin
Write('Znachenie U[',i,' ',j,']=');
Readln(U[i,j]);
end;
Readln;
Writeln('Tekushaya matrica');
For i:=1 to m do begin For j:=1 to n do
Write(U[i,j],' ');
writeln;
end;
Readln; {непосредственно вычисления, чуть подправленные под мою задачу}
For k:=1 to m-1 do For i:=1 to m-k do begin
s1:=0;
s2:=0;
For j:=1 to n do begin
If (U[i,j]>0) then Inc(s1);
If (U[i+1,j]>0) then Inc(s2);
end;
If (s1>s2) then begin
T:=U[i,j];
U[i,j]:=U[i+1,j];
U[i+1,j]:=T;
end;
end;
Readln;
Writeln('Novaya Matrica'); {вывод получившейся матрицы}
For i:=1 to m do begin
For j:=1 to n do
Write(U[i,j],' ');
Writeln;
end;
Readln;
end.


Но чёт не пашет...
Подскажите, если где ошибка(и) есть

Сообщение отредактировано: RAVE -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Бывалый
***

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

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


так нужно не количества положительных элементов менять местами:

If (s1>s2) then
begin
T:=s1; {здесь ты просто меняешь местами количество положительных }
s1:=s2; {элементов в i-ой и (i+1)-ой сроках матрицы, а надо бы сами строки}
s2:=T;
end;


а строчки матрицы U[i,j] и U[i+1,j]
сделать можно вот так:

If (s1>s2) then
For j:=1 to n do
begin
T:=U[i,j];
U[i,j]:=U[i+1,j];
U[i+1,j]:=T;
end;



Сообщение отредактировано: samec -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12





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

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


Урааа.... прога заработала! good.gif Огромное СПАСИБО!

Но если не сложно, можешь мне пояснить вот этот момент
For k:=1 to m-1 do For i:=1 to m-k do begin

почему именно так? И можно ли это представить как-нить попроще\попонятней?

Сообщение отредактировано: RAVE -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Бывалый
***

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

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


Это циклы, составляющие метод сортировки "пузырьком".
Суть метода в следующем:
Для примера возьмём m=5, A=(32861), сортиовать будем по возрастанию, т.е. в конце получаем следующую последователоьность А=(12368).
1 просмотр - просмативаем последовательность 32861, сравнивая слева направо два соседних элемента и переставляя их, если надо:
1 сравнение: 32861 ---> 23861
2 сравнение: 23861
3 сравнение: 23861 ---> 23681
4 сравнение: 23681 ---> 23618
Наибольший элемент 8 "всплыл" (поэтому метод и назывется "пузырьковый":) ) в конце последовательности.

2 просмотр - просмативаем последовательность 2361, сравнивая слева направо два соседних элемента и переставляя их, если надо:
1 сравнение: 2361
2 сравнение: 2361
3 сравнение: 2361 ---> 2316
Наибольший элемент 6 "всплыл" в конце последовательности.

3 просмотр - просмативаем последовательность 231, сравнивая слева направо два соседних элемента и переставляя их, если надо:
1 сравнение: 231
2 сравнение: 231 ---> 213
Наибольший элемент 3 "всплыл" в конце последовательности.

4 просмотр - просмативаем последовательность 21, сравнивая слева направо два соседних элемента и переставляя их, если надо:
1 сравнение: 21 ---> 12
Наибольший элемент 2 "всплыл" в конце последовательности.

Итак, для последовательности из из m элементов число просмотров будет равно (m-1). В каждом k-ом просмотре производится (m-k) сравнений элементов. В результате каждого просмотра в конце текущей просматриваемой последовательности "всплывает" наибольший элемент.
Вот подробное словесное описание алгоритма:
1 просмотр. Последовательность из m элементов просматривается с лева на право. Каждые 2 соседних элемента А[i] и А[i+1] сравниваются (то есть 1-ый и 2-ой, 2-ой и 3-ий и т.д.) и, если А[i] > А[i+1], то эти элементы ереставляются. В результате наибольший элемент "всплывает" в конце рассматриваемой последовательности из m элементов.
2 просмотр. Последовательность из (m-1) первых элеентов просматривается слева направо. Каждые 2 соседних элемента А[i] и А[i+1] сравниваются (то есть 1-ый и 2-ой, 2-ой и 3-ий и т.д.) и, если А[i] > А[i+1], то эти элементы ереставляются. В результате наибольший элемент "всплывает" в конце рассматриваемой последовательности из (m-1) элементов.
...
(m-1) просмотр. Последовательность из m-(m-2)=2, то есть из 2-х элементов просматривается слева направо...

теперь стало понятнее??? smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





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