Даны три матрицы целого типа произвольной размерности(размер вводится пользователем). Для каждой матрицы отсортировать столбцы в порядке возрастания их максимальных элементов(модерницированным методом пузырька). Предусмотреть обработку ошибок и удобный интерфейс. Прошу помогите....
Добавлено через 4 мин. Программу нужно написать на языке Паскаль
Да я уже вбивал различные готовые коды, но везде какие нибудь ошибки...
volvo
14.02.2009 12:08
Цитата
везде какие нибудь ошибки...
Это где ошибки? В FAQ-е??? Покажи пальцем, где именно, в каком коде и какая ошибка у тебя возникает. А то, что ты
Цитата
уже вбивал различные готовые коды
меня как-то мало интересует. Я не телепат, чтобы знать, какие коды ты вбивал...
VovaNs
15.02.2009 12:13
Цитата(volvo @ 14.02.2009 12:08)
Это где ошибки? В FAQ-е??? Покажи пальцем, где именно, в каком коде и какая ошибка у тебя возникает. А то, что ты меня как-то мало интересует. Я не телепат, чтобы знать, какие коды ты вбивал...
Вписываю программу, у меня куча цифр на черном экране причем не в виде матрицы а просто срокой и много а в конце еррор написано....
Ozzя
16.02.2009 9:24
Вписываю программу
Тебе же ответили уже -
Покажи пальцем, где именно, в каком коде и какая ошибка у тебя возникает.
Приложи сюда свой код и данные.
VovaNs
16.02.2009 14:49
ВОТ ГОТОВАЯ ПРОГРАММА VOLVO ПО МАТРИЦАМ-
{ Обязательно отключить проверку индексов, иначе возникнет ошибка времени исполнения } {$R-} Type TType = Word; { Или любой другой тип } Type PVector = ^TVector; { Это - одна "строка" динамической матрицы } TVector = Array[1 .. 1] of TType;
PDynMatrix = ^TDynMatrix; { Сама матрица - представляется как массив указателей на "строки" } TDynMatrix = Array[1 .. 1] of PVector;
Var { Через эту переменную будет осуществляться вся работа с матрицей } mxDynamic: PDynMatrix; n, i, j: Word; - 1АЯ ОШИБКА( при присвоении Word происходит косяк с циклами....) Begin Write('n = '); ReadLn(n);
{ Выделяем память под указатели на "строки" } GetMem(mxDynamic, n * SizeOf(PVector)); { И для каждой "строки" - выделяем память для хранения данных } For i := 1 To n Do GetMem(mxDynamic^[i], n * SizeOf(TType));
(*** Работаем с матрицей ***) { Динамическая матрица представлена немного иначе, чем динамический массив, поэтому для того, чтобы обратиться к ее элементу, необходимы 2 операции разыменования указателей. Пример: } For i := 1 To n Do { Строки } For j := 1 To n Do { Столбцы (элементы строки) } mxDynamic^[I]^[J]:=I*J;
For i := 1 To n Do Begin WriteLn; For j := 1 To n Do Write(mxDynamic^[I]^[J]:4) - 2АЯ ОШИБКА ТУТ (не знаю что изменить....); End;
(*** Закончили работу с матрицей - уничтожаем ее ***)
{ Освобождаем память в обратном порядке: } { Сначала - удаляем все "строки" } For i := 1 To n Do FreeMem(mxDynamic^[i], n * SizeOf(TType)); { А теперь и указатели на них ... } FreeMem(mxDynamic, n * SizeOf(PVector)); End.
И я не знаю как написать сортировку матрицы - чтобы поменять местами столбцы. Кто нибудь может показать код?
VovaNs
28.02.2009 11:50
Мне кто - нибудь поможет????
volvo
28.02.2009 12:04
Поможет. Поиск по форуму. Я специально выкладывал пример описания типов для быстрого перемещения столбцов. Второй раз я то же самое делать не буду. А за те полмесяца, что ты ждешь ответа, можно было уже и самому давно разобраться, придумать свой алгоритм с нуля и написать...
Гость
28.02.2009 15:21
Не можете алгоритм вставить в эту темку а то я найти ничего не могу,или хотя бы ссылку на ту страницу где он приведен, лазию нигде ничего найти не могу( а с планом самому разобраться не могу, так как препод за весь курс объяснил только как работать с динамической памятью и все( приходится просто искать хоть что то работоспособное(помогите прошу оч....(
VovaNs
28.02.2009 15:36
program lab_9;
const n = 10; m = 9;
k = 5;
var a: array[1 .. n*m] of integer; b, j, t, i: integer;
begin randomize; for i := 1 to n*m do begin a[i]:=random(20)-10; write(a[i]:4); if i mod n = 0 then writeln; end; writeln;
for i:=1 to m do begin b:=a[(i-1)*n+1]; a[(i-1)*n+1]:=a[(i-1)*n+k]; a[(i-1)*n+k]:=b; end;
for i:=1 to n*m do begin write(a[i]:4); if i mod n = 0 then writeln; end; readln; end.
Вот что нашел не знаю про это вы говорили или нет? но в код я малость не понимаю...(
maksimla
1.03.2009 12:05
а про код забыл чтобы в коде надо всю программу обозначить
VovaNs
1.03.2009 12:23
Так выше прведенный код меняет столбцы или я что то не понимаю? киньте ссылку страницы на которой приведен пример перемещения столбцов динамической матрицы
VovaNs
7.03.2009 14:37
Кто- нибудь подскажет?((((((
VovaNs
9.03.2009 12:11
Ну можете скинуть ссылку на код, где меняются столбцы местами или программный код скопировать? я никак не могу найти...
VovaNs
11.03.2009 12:12
Вообщем своими усилиями сделал программу....никто так и не помог( но у меня еще вопрос, нашел готовый код внешнего интерфейса от Volvo , в процедуру вбиваю свой код программы...но...выдает ошибку...не пойму почему вот код:
{$S+} program Prog4; uses crt; Type MenuType = (Vertical, Horizontal);
var X, Y, selected, row: integer; _style: menuType;
procedure MakeMenu (optText: array of string; MaxItems: integer); var i, _X: byte; begin Y := row; _X := X; for i := 0 to MaxItems-1 do begin GoToXY (_X, Y); if i = selected then TextColor (optSelected) else TextColor (optNormal); write (optText[ i ]);
If _style = Horizontal Then inc (_X, width + 1) Else inc (Y, 2); end; end;
function MenuOption (optText: array of string; MaxItems: integer): byte; var ch: char; begin selected := 0;
If _style = Vertical Then Begin X := (80 - width) div 2; row := (25 - MaxItems) div 2; End Else Begin X := (80 - MaxItems * width) div 2; row := 2; GotoXY(1, row); ClrEol; End;
repeat MakeMenu (optText, MaxItems);
ch := readkey; if ch = #0 then ch := readkey;
case ch of #80, #77: {Down/Right} begin inc (Selected); if Selected = MaxItems then Selected := 0; MakeMenu (optText, MaxItems); end;
#72, #75: {Up/Left} begin dec (Selected); if Selected < 0 then Selected := MaxItems-1; MakeMenu (optText, MaxItems); end; end; until ch = #13; {Enter} MenuOption := Selected + 1; TextColor (optNormal); If _style = Vertical Then clrscr; end;
type atype = array [1..90,1..90] of integer; btype = array [1..90] of integer;
procedure Proc_1; var a22:atype; b22:btype; i22,j22,i1,j1,n22,max,n2,min,c22,k22,q22,o22:integer; begin {Proc_1} ClrScr; Write('Vvedite razmernost (n>0). n='); Readln(n22); writeln('Vvedite Matrisu A:'); for i22:=1 to n22 do for j22:=1 to n22 do begin Write('Vvedite element Matristy a[',i22,',',j22,']='); readln(a22[i22,j22]); end; for i22:=1 to n22 do begin for j22:=1 to n22 do write(a22[i22,j22]:3); writeln; end; Writeln;
for j22:=1 to n22 do begin max:=a22[1,j22]; for i22:=1 to n22 do if a22[i22,j22]>max then max:=a22[i22,j22]; writeln('Maximalnuj element ',j22,' stolbtsa = ',max) ; b22[j22]:=max; end;
for k22:=1 to n22-1 do for j22:=1 to n22-k22 do if (b22[j22]>b22[j22+1]) then begin for i22:=1 to n22 do begin c22:=a22[i22,j22]; a22[i22,j22]:=a22[i22,j22+1]; a22[i22,j22+1]:=c22; end; c22:=b22[j22]; b22[j22]:=b22[j22+1]; b22[j22+1]:=c22; end; Writeln; Writeln('Otsortirovannya Matrista A: '); for i22:=1 to n22 do begin for j22:=1 to n22 do write(a22[i22,j22]:3); writeln; end; ReadLn; end;
procedure Proc_2; begin ClrScr; WriteLn('#2 selected ...'); ReadLn; end;
procedure Proc_3; begin ClrScr; WriteLn('Other selected ...'); ReadLn; end;
var Option: byte;
begin _style := Vertical; repeat clrscr; Option := MenuOption (optText1, nItems); case option of 1: Proc_1; 2: Proc_2; 3: Proc_3; end; until Option = nItems; end.
Посмотрите плиз( (другие процедуры не удалял, решил оставить пока что все как есть)
VovaNs
16.03.2009 12:03
тут никого нету? удаляйте тему, если никто не может помочь....(
Lapp
17.03.2009 4:37
Цитата(VovaNs @ 16.03.2009 12:03)
тут никого нету? удаляйте тему, если никто не может помочь....(
А знаешь, почему никто не жаждет тебе помогать? Ты пишешь: "выдает ошибку". А какую именно - это тебе уже лень написать. И лень поставить тэги (хотя это сказано в Правилах). Ну, хорошо, я потратил свое время, расставил тэги (заметь, нормальный пользователь не смог бы это сделать, так что никаких отступов, если он будет пытаться запускать твои творения). Запустил твою прогу - отработала нормально, никаких ошибок. И что мне теперь делать? Встать перед тобой на колени и выпрашивать, чтоб твоя царственная особа соизволила добавить пару слов про то, какая ошибка, при каких условиях возникает?
Почему нельзя избавить тех, у кого просишь помощи, от лишней работы?
VovaNs
17.03.2009 10:01
Ошибку выдает в первой процедуре на начале(begin)- error 202:stack overflow error. (при запуске программы, а не при компиляции)
amega
17.03.2009 10:08
Цитата
error 202:stack overflow error.
error 202:stack overflow error. (Переполнения стека). Эта ошибка генерируется на входе в процедуру или функцию, скомпилированую в режиме {$S+} , если нет достаточной области для размещения локальных переменных подпограммы. Слудует увеличить размер стека , используя директиву компилятора $M. Данная ошибка может также вызиватся циклической рекурсией или процедурой на ассемблере, которая не подреживаетстек.
volvo
17.03.2009 10:10
Цитата
Ошибку выдает в первой процедуре на начале(begin)- error 202:stack overflow error.
Зайди в меню Options -> Memory Sizes, и посмотри, какой у тебя выставлен размер стека (по умолчанию - 16384)... А теперь посмотри, каков общий размер всех локальных переменных в Proc1: 1 массив типа btype, 1 матрица типа atype и 12 integer-ов = 90*90*sizeof(integer) + 90*sizeof(integer) + 12*sizeof(integer) = 16200 + 180 + 24 = 16404... Перебор. Или увеличивай размер стека, или работай с динамической памятью (можно еще описать матрицу глобально, а не локально, но это совсем не наш метод).
VovaNs
17.03.2009 12:26
все сделал...сделал динамические матрицы все заработало))))у меня еще вопросик- а как указать разрешение своей программы? и еще) есть ли ссылка или код чтобы в программе появлялась мышь)
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.