Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.12.2013, 23:00   #1
pitak
Пользователь
 
Регистрация: 11.12.2013
Сообщений: 17
Радость В каждом столбце матрицы D[n,m] нулевые элементы переставить в начало столбца

Возникли трудности с еще одной программой, просьба подсказать в чем ошибка. Или может быть можно сделать как-то по другому?
Код:
Program massiv;
const N=10;
const M=10;
var D:array [1..N,1..M] of real;
f,b,i,j:integer;
c:real;
flag:boolean;
begin
write('vvedite razmernost massiva f-b');
readln(f,b);
for i:=1 to f do
for j:=1 to b do
readln(D[i,j]);
for j:=1 to b do
repeat flag:=true;
for i:=1 to f-1 do
if (D[i,j]<>0) and (D[i+1,j]=0) then
begin
c:=D[i,j];
D[i,j]:=D[i+1,j];
D[j+1,j]:=c;
flag:=false;
end;
until flag;
for i:=1 to f do begin
for j:=1 to b do
write (D[i,j]:3:2);
writeln;
end;
end.
pitak вне форума Ответить с цитированием
Старый 12.12.2013, 10:16   #2
effbus
Новичок
Джуниор
 
Регистрация: 12.12.2013
Сообщений: 1
По умолчанию

У меня такая же трудность
http://effbus.ru/
effbus вне форума Ответить с цитированием
Старый 12.12.2013, 13:53   #3
Kemperh4
Пользователь
 
Регистрация: 25.05.2010
Сообщений: 16
Счастье

Код на основе твоего:

Код:
Program massiv;
const N=10;
const M=10;

var D:array [1..N,1..M] of real;
a,b,i,j,k,t,f:integer;
c:real;
begin
write('vvedite razmernost massiva a-b: ');
readln(a,b);
for i:=1 to a do
for j:=1 to b do
readln(D[i,j]);

writeln('Исходный массив:');
writeln;

for i:=1 to a do begin
for j:=1 to b do begin
write (D[i,j]:3:2);
write(' ');
end;
writeln;
end;

for i:=1 to a do begin
f:=1;
while f > 0 do begin 
f:=0;
for j:=2 to b do 
if (D[j,i]=0) and (D[j-1,i]<>0) then begin
D[j,i]:=D[j-1,i];
D[j-1,i]:=0;
inc(f);
end;
end;
end;

writeln('Конечный массив:');

for i:=1 to a do begin
for j:=1 to b do begin
write (D[i,j]:3:2);
write(' ');
end;
writeln;
end;

end.


___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE]
(кнопочка на панели форматирования с решёточкой #)
Не забывайте об этом!

Модератор.

Последний раз редактировалось Serge_Bliznykov; 12.12.2013 в 14:05.
Kemperh4 вне форума Ответить с цитированием
Старый 13.12.2013, 16:38   #4
pitak
Пользователь
 
Регистрация: 11.12.2013
Сообщений: 17
По умолчанию

Цитата:
Сообщение от Kemperh4 Посмотреть сообщение
Код на основе твоего:

Код:
Program massiv;
const N=10;
const M=10;

var D:array [1..N,1..M] of real;
a,b,i,j,k,t,f:integer;
c:real;
begin
write('vvedite razmernost massiva a-b: ');
readln(a,b);
for i:=1 to a do
for j:=1 to b do
readln(D[i,j]);

writeln('Исходный массив:');
writeln;

for i:=1 to a do begin
for j:=1 to b do begin
write (D[i,j]:3:2);
write(' ');
end;
writeln;
end;

for i:=1 to a do begin
f:=1;
while f > 0 do begin 
f:=0;
for j:=2 to b do 
if (D[j,i]=0) and (D[j-1,i]<>0) then begin
D[j,i]:=D[j-1,i];
D[j-1,i]:=0;
inc(f);
end;
end;
end;

writeln('Конечный массив:');

for i:=1 to a do begin
for j:=1 to b do begin
write (D[i,j]:3:2);
write(' ');
end;
writeln;
end;

end.


___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE]
(кнопочка на панели форматирования с решёточкой #)
Не забывайте об этом!

Модератор.
спасибо большое, а есть еще способ как можно сделать?
pitak вне форума Ответить с цитированием
Старый 13.12.2013, 21:46   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Можно так:
Код:
const N=10;
const M=10;
var D:array [1..N,1..M] of real;
f,b,i,j,k:integer;l:real;
c:real;
flag:boolean;
begin

for i:=1 to n do begin
 for j:=1 to m do begin
   D[i,j]:=random(3);
   if d[i,j]=0 then
    for k:=i-1 downto 1 do begin
      l:=d[k+1,j];
      d[k,j]:=d[k+1,j];
      d[k,j]:=l;
    end;
end;
end;

 for i:=1 to n do begin
 for j:=1 to m do begin
   write(D[i,j]:5);
end; writeln;
end;
  readln;
end;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 13.12.2013, 23:53   #6
pitak
Пользователь
 
Регистрация: 11.12.2013
Сообщений: 17
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Можно так:
Код:
const N=10;
const M=10;
var D:array [1..N,1..M] of real;
f,b,i,j,k:integer;l:real;
c:real;
flag:boolean;
begin

for i:=1 to n do begin
 for j:=1 to m do begin
   D[i,j]:=random(3);
   if d[i,j]=0 then
    for k:=i-1 downto 1 do begin
      l:=d[k+1,j];
      d[k,j]:=d[k+1,j];
      d[k,j]:=l;
    end;
end;
end;

 for i:=1 to n do begin
 for j:=1 to m do begin
   write(D[i,j]:5);
end; writeln;
end;
  readln;
end;
Спасибо, смысл вроде понял, но она не работает
pitak вне форума Ответить с цитированием
Старый 14.12.2013, 13:37   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

У меня работает. Я проверял.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 25.12.2013, 20:31   #8
pitak
Пользователь
 
Регистрация: 11.12.2013
Сообщений: 17
По умолчанию

Все равно вот по этому коду исходный и конечный массивы получаются одинаковые:
Код:
Program massiv;
const N=10;
const M=10;

var D:array [1..N,1..M] of real;
a,b,i,j,k,t,f:integer;
c:real;
begin
write('vvedite razmernost massiva a-b: ');
readln(a,b);
for i:=1 to a do
for j:=1 to b do
readln(D[i,j]);

writeln('Исходный массив:');
writeln;

for i:=1 to a do begin
for j:=1 to b do begin
write (D[i,j]:3:2);
write(' ');
end;
writeln;
end;

for i:=1 to a do begin
f:=1;
while f > 0 do begin 
f:=0;
for j:=2 to b do 
if (D[j,i]=0) and (D[j-1,i]<>0) then begin
D[j,i]:=D[j-1,i];
D[j-1,i]:=0;
inc(f);
end;
end;
end;

writeln('Конечный массив:');

for i:=1 to a do begin
for j:=1 to b do begin
write (D[i,j]:3:2);
write(' ');
end;
writeln;
end;

end.
pitak вне форума Ответить с цитированием
Старый 26.12.2013, 00:18   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от pitak Посмотреть сообщение
Все равно вот по этому коду исходный и конечный массивы получаются одинаковые:
во-первых, Вы не правы. Не одинаковые получаются.
вы же забываете, наверное, нулевые элементы вводить!

во-вторых, соглашусь, что код ваш работает криво. Логику работы вашего кода я не понимаю, отлаживать ломы. Да и зачем, если Вам Stilet дал свой код ?!

Цитата:
Код:
Исходный массив:

1.00 2.00 3.00 4.00 5.00 
6.00 7.00 8.00 9.00 0.00 
0.00 0.00 2.00 17.00 19.00 
Конечный массив:
0.00 0.00 0.00 4.00 5.00 
0.00 0.00 0.00 9.00 0.00 
0.00 0.00 3.00 17.00 19.00
Serge_Bliznykov вне форума Ответить с цитированием
Старый 29.12.2013, 01:48   #10
pitak
Пользователь
 
Регистрация: 11.12.2013
Сообщений: 17
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
во-первых, Вы не правы. Не одинаковые получаются.
вы же забываете, наверное, нулевые элементы вводить!

во-вторых, соглашусь, что код ваш работает криво. Логику работы вашего кода я не понимаю, отлаживать ломы. Да и зачем, если Вам Stilet дал свой код ?!
по коду Stilet получается примерно то же самое, разве может получаться такое количество нулей?
Изображения
Тип файла: png влож.png (1.6 Кб, 47 просмотров)

Последний раз редактировалось pitak; 29.12.2013 в 01:52.
pitak вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Преобразовать массив: в каждом столбце поменять местами максимальный и первый элементы AFI Паскаль, Turbo Pascal, PascalABC.NET 5 17.05.2013 05:40
[Delphi] В матрице обнулить все элементы, расположенные после максимального в каждом столбце Volodyajke Помощь студентам 5 17.11.2011 23:52
нулевые элементы матрицы vladizp Помощь студентам 4 28.06.2011 22:27
В прямоугольной матрице переставить столбцы так, чтобы сумма элементов столбца росла от первого столбца Aleo13 Помощь студентам 5 15.10.2008 18:34