Форум программистов
 
О проблемах, например, с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

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

Восстановить пароль
Повторная активизация e-mail

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Ответ
 
Опции темы
Старый 24.09.2010, 09:57   #1
Dukem
 
Регистрация: 24.09.2010
Сообщений: 9
По умолчанию Работа с масивами.

Доброго времени суток. Очень нужна Ваша помощь в решении следующей задачи на Pascal:

Дана матрица. Упорядочить элементы столбцов матрицы по возрастанию, а сами столбцы по неубыванию произведения четных элементов столбцов. Использовать сортировку прямыми вставками с барьером, реализовав метод в виде подпрограммы.

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

Последний раз редактировалось Dukem; 24.09.2010 в 10:57.
Dukem вне форума Ответить с цитированием
Старый 24.09.2010, 12:28   #2
sllh_111
Форумчанин
 
Регистрация: 10.02.2010
Сообщений: 137
По умолчанию

Dukem
вот(правда несовсем то, но все-таки):
главное напиши программу, а разобраться в ее работе тебе здесь помогут

p.s. с тебя нажать на весы и добавить положительный отзыв
sllh_111 вне форума Ответить с цитированием
Старый 25.09.2010, 15:15   #3
Dukem
 
Регистрация: 24.09.2010
Сообщений: 9
По умолчанию

Вот что у меня получилось:

Program massive;
uses crt;
const nmax=10;
type mas=array[0..nmax] of integer;{îäèí ñòîëáåö, íóëåâûÿ êëåòêà äëÿ ýëåìåíòà-áàðüåðà}
matr=array[1..nmax] of mas; {ìàññèâ ñòîëáöîâ}
{ââîä ìàòðèöû ïî ñòîëáöàì}
procedure Vvod(var m:matr;var x,y:byte);
var i,j:byte;
p:integer;
begin
repeat
write('Êîëè÷åñòâî ñòðîê äî ',nmax,' =');
readln(x);
until x in [1..nmax];
repeat
write('Êîëè÷åñòâî ñòîëáöîâ äî ',nmax,' =');
readln(y);
until y in [1..nmax];
{ýëåìåíòû ìàòðèöû}
for j:=1 to y do
for i:=1 to x do
m[j,i]:=random(10)+1;
{ïðîèçâåäåíèÿ ÷åòíûõ â ñòîëáöàõ}
for j:=1 to y do
begin
p:=1;
for i:=1 to x do
if m[j,i] mod 2=0 then p:=p*m[j,i];{ñ÷èòàåì}
if p=1 then m[j,x+1]:=0{åñëè íåò ÷åòíûõ}
else m[j,x+1]:=p;{åñëè åñòü}
end;
end;
{âûâîä ìàòðèöû ïî ñòðîêàì}
procedure Vyvod(var m:matr;x,y:byte);
var i,j:byte;
begin
{ìàòðèöà}
for i:=1 to x do
begin
write(' ':6);
for j:=1 to y do
write(m[j,i]:6);
writeln;
end;
{ïðîèçâåäåíèÿ â ñòîëáöàõ}
write('Ïðîèç.');
for j:=1 to y do write(m[j,x+1]:6);
writeln;
end;
{ñîðòèðîâêà â ñòîëáöàõ ïî âîçðàñòàíèþ}
procedure SortStb(var v:mas;x:byte);
var i,j:byte;
b:integer;
begin
v[0]:=-maxint-1;{çà áàðüåð âîçüìåí ñàìîå ìàëåíüêîå ÷èñëî òèïà èíòåæåð}
for j:=2 to x do
begin
i:=j;
while v[i]<v[i-1] do
begin
b:=v[i];
v[i]:=v[i-1];
v[i-1]:=b;
i:=i-1;
end;
end;
end;
{ïåðåñòàíîâêà ñòîëáöîâ ïî óáûâàíèþ ïðîèçâåäåíèé}
procedure SortMtr(var m:matr;x,y:byte);
var i,j:byte;
b:integer;
v,t:mas;
begin
{ñäåëàåì âñïîìîãàòåëüíûé ìàññèâ äëÿ ñîðòèðîâêè}
for i:=1 to y do
v[i]:=m[i,x+1];
v[0]:=maxint;{çà áàðüåð âîçüìåì ñàìîå áîëüøîå}
for j:=2 to y do
begin
i:=j;
while v[i]>v[i-1] do
begin
b:=v[i];
t:=m[i];
v[i]:=v[i-1];{îáìåíèâàåì ýëåìåíòû âñïîìîãàòåëüíîãî ìàññèâà(ïðîèçâåäåíèÿ)}
m[i]:=m[i-1];{ïàðàëëåëüíî ñ íèì ñòîëáöû}
v[i-1]:=b;
m[i-1]:=t;
i:=i-1;
end;
end;
end;
var a:matr;
x:mas;
n,m,i:byte;
begin
clrscr;
Vvod(a,n,m);
writeln('Èñõîäíàÿ ìàòðèöà:');
Vyvod(a,n,m);
writeln('Ñîðòèðîâêà ñòîëáöîâ ïî âîçðàñòàíèþ:');
for i:=1 to m do {ñîðòèðîâêà â ñòîëáöàõ}
SortStb(a[i],n);
Vyvod(a,n,m);
writeln('Ïåðåñòàíîâêà ñòîëáöîâ ïî óáûâàíèþ ïðîèçâåäåíèé:');
SortMtr(a,n,m);{ïåðåñòàíîâêà ñòîëáöîâ}
Vyvod(a,n,m);
readkey
end.

Но при компиляции возникает ошибка несоразмерности массивов. Подскажите пожалуйста где я неправ?
Dukem вне форума Ответить с цитированием
Старый 25.09.2010, 20:43   #4
Dukem
 
Регистрация: 24.09.2010
Сообщений: 9
По умолчанию

Спасибо всем разобрался сам.
Dukem вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
робота с масивами misha25525 Помощь студентам 6 11.04.2010 12:05
Две задачки с масивами. С++ Alex1991 Помощь студентам 3 16.03.2009 22:32
проблема с масивами Холмс Общие вопросы C/C++ 2 05.11.2008 21:51
помогите с масивами tarasfx Паскаль, Turbo Pascal, PascalABC.NET 3 18.10.2007 00:58


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS
Здесь нужно купить рекламу за 7 тыс руб в месяц! )
пишите сюда - alarforum@yandex.ru
ИКС 840