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

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

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

> Матрица, Поменять местами строки
Invisible
сообщение 7.11.2005 19:15
Сообщение #1


Гость






Привет. Помогите решить задачу.
Дана матрица размером 5*4. Поменять местами первую строку и строчку, в которой находится первый нулевой элемент.
Заранее спасибо!
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 9)
klem4
сообщение 7.11.2005 19:17
Сообщение #2


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

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

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


Читайте правила !

Первым дело FAQ и поиск ! Таких задача решено уйма и в FAQ они тоже есть !

FAQ : Массивы, матрицы, типичные задачи.


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


Гость






Да, читал и пробовал. Программа работает, но что-то не то... Не правильно получается.
 К началу страницы 
+ Ответить 
klem4
сообщение 7.11.2005 21:04
Сообщение #4


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

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

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


И вот это читал ? Как поменять в матрице строки или столбцы ? dry.gif


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


Гость






Ну, вот допустим программа после использования вашего FAQ:
Код
uses crt;
const
size_row = 5;
size_col = 4;

type
tvector = array[1 .. size_col] of integer;
tmatrix = array[1 .. size_row] of tvector;
procedure swap_rows(var mx: tmatrix;
        const i, j: integer);
var T: tvector;
begin
  T := mx[i]; mx[i] := mx[j]; mx[j] := T
end;

procedure print(var mx: tmatrix);
var i, j: integer;
begin
  for i := 1 to size_row do
    begin
      for j := 1 to size_col do
        write(mx[i][j]:4);
      writeln
    end;
end;

var
mx: tmatrix;
x, i, j: integer;

begin
clrscr;
for i := 1 to size_row do
  for j := 1 to size_col do
    mx[i][j] := random(20);
writeln('before:'); print(mx);
swap_rows(mx, 1, 5);
writeln('after:'); print(mx);
readln;
end.

Мне нужно поменять местами первую строку и строчку, в которой находится первый нулевой элемент. Так как мне найти этот первый нулевой элемент?
Пробовал добавить строчку
if mx[i][1]:=0 then i:=x;
И изменить
swap_rows(mx, 1, x);
Но получил ошибку с boolean. Подскажите как можно это реализовать?
 К началу страницы 
+ Ответить 
klem4
сообщение 13.11.2005 11:47
Сообщение #6


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

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

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


Найти первую строку, в которой находится 0 :

i := 1; pos := 0;
while (i<=n) and (pos=0) do begin
j := 1;
while(j<=n) and (x[i,j]<>0) do inc(j);
if j<=n then pos := i;
inc(i);
end;



Можно так :

i := 1; j := 1;
while(i<=n) and (x[i,j]<>0) do begin
j := 1;
while(j<=m) and (x[i,j] <> 0) do
inc(j);
if x[i,j] <> 0 then
inc(i);
end;

pos := 0;
if i<=n then
pos := i;


только переменную лучьше pos не называть, зарезервированное слово всетаки ... нехорошо это

Сообщение отредактировано: klem4 - 13.11.2005 12:12


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


Гость






Invisible, как вариант:
function contains_zero(var mx: tmatrix; row: integer): boolean;
var
j: integer;
found: boolean;
begin
j := 1; found := false;
while (j <= size_col) and (not found) do begin
found := (mx[row][j] = 0); inc(j)
end;
contains_zero := found;
end;

...
{ Заполнение матрицы }
i := 1;
while (i <= size_row) do
if contains_zero(mx, i) then begin
swap_rows(mx, 1, i);
i := succ(size_row);
end
else inc(i);
{ вывод результата }
...
 К началу страницы 
+ Ответить 
Guest
сообщение 13.11.2005 14:00
Сообщение #8


Гость






Хм.... Спасибо. Но что-то результат не тот:

before:
3 10 7 12
14 5 8 14
3 6 0 13
3 1 10 14
0 6 3 9
after:
3 6 0 13
14 5 8 14
3 10 7 12
3 1 10 14
0 6 3 9

Что-то тут все в перемешку.
Вот сама программа:

program seven_two;
uses crt;
const
size_row = 5;
size_col = 4;

type
tvector = array[1 .. size_col] of integer;
tmatrix = array[1 .. size_row] of tvector;
procedure swap_rows(var mx: tmatrix;
const i, j: integer);
var T: tvector;
begin
T := mx[i]; mx[i] := mx[j]; mx[j] := T
end;

procedure print(var mx: tmatrix);
var i, j: integer;
begin
for i := 1 to size_row do
begin
for j := 1 to size_col do
write(mx[i][j]:4);
writeln
end;
end;

function contains_zero(var mx: tmatrix; row: integer): boolean;
var
j:integer;
found: boolean;
begin
j:=1; found:=false;
while (j<=size_col) and (not found) do begin
found:= (mx[row][j]=0); inc(j);
end;
contains_zero:=found;
end;

var
mx: tmatrix;
i, j: integer;

begin
clrscr;
for i := 1 to size_row do
for j := 1 to size_col do
mx[i][j] := random(15);
writeln('before:'); print(mx);
i:=1;
while (i <= size_row) do
if contains_zero(mx, i) then begin
swap_rows(mx, 1, i);
i := succ(size_row);
end
else inc(i);
writeln('after:'); print(mx);
readln;
end.


Это я попробовал способом volvo. Способами klem4 тоже не получилось. Может я что-то не то делаю? Так ткните носом пожалуйста.
 К началу страницы 
+ Ответить 
volvo
сообщение 13.11.2005 14:02
Сообщение #9


Гость






Guest, а что собственно в результате не нравится? По-моему все верно: первый раз ноль встречается в 3-ей строке, она и меняется местами с первой...

Или тебе нужен первый ноль в каком-то определенном столбце?
 К началу страницы 
+ Ответить 
Invisible
сообщение 13.11.2005 14:16
Сообщение #10


Гость






О, извините. Все правильно. Меня просто зациклило в одном месте.
"поменять местами первую строку и строчку, в которой находится первый нулевой элемент". Я думал, что 0 - это первый элемент строки, а это не обязательно так, дошло.
То есть я думал, что менять должна строка, где 0 певрый стоит. Всем огромное спасибо.
 К началу страницы 
+ Ответить 

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

 



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