|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
24.09.2010, 10:57 | #1 |
Регистрация: 24.09.2010
Сообщений: 9
|
Работа с масивами.
Доброго времени суток. Очень нужна Ваша помощь в решении следующей задачи на Pascal:
Дана матрица. Упорядочить элементы столбцов матрицы по возрастанию, а сами столбцы по неубыванию произведения четных элементов столбцов. Использовать сортировку прямыми вставками с барьером, реализовав метод в виде подпрограммы. Помогите пожалуйста желательно с описание строк и объяснением работы программы. Не хочется просто увидеть листинг программы, а хочется разобраться в ее работе. Последний раз редактировалось Dukem; 24.09.2010 в 11:57. |
24.09.2010, 13:28 | #2 |
Форумчанин
Регистрация: 10.02.2010
Сообщений: 137
|
Dukem
вот(правда несовсем то, но все-таки): главное напиши программу, а разобраться в ее работе тебе здесь помогут p.s. с тебя нажать на весы и добавить положительный отзыв |
25.09.2010, 16:15 | #3 |
Регистрация: 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. Но при компиляции возникает ошибка несоразмерности массивов. Подскажите пожалуйста где я неправ? |
25.09.2010, 21:43 | #4 |
Регистрация: 24.09.2010
Сообщений: 9
|
Спасибо всем разобрался сам.
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
робота с масивами | misha25525 | Помощь студентам | 6 | 11.04.2010 13: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 01:58 |