eleshka Posted March 30, 2010 Report Share Posted March 30, 2010 Есть задание в курсовой. "Сформировать массив А (10х10). Подсчитать кол-во положительных элементов главной диагонали в массиве. Поменять местами строки с наибольшими и наименьшими элементами в массиве". Может кто помочь? нужно к завтрашнему дню.. = ((( Quote Link to comment Share on other sites More sharing options...
Тролль Posted March 30, 2010 Report Share Posted March 30, 2010 (edited) eleshka: var a:array[0..10,1..10]of integer; i,j,imin,imax,min,max,s:integer;begin randomize; for i:=1 to 10 do for j:=1 to 10 do a[i,j]:=random(199)-99; for i:=1 to 10 do begin for j:=1 to 10 do write(a[i,j]:4); writeln end;s:=0; for i:=1 to 10 do if a[i,j]>0 then inc(s); writeln('S=',s); min:=a[1,1]; max:=a[1,1]; imin:=1; imax:=1; for i:=1 to 10 do for j:=1 to 10 do begin if a[i,j]<min then begin min:=a[i,j]; imin:=i end; if a[i,j]>max then begin max:=a[i,j]; imax:=i end; end;writeln('imin=',imin,' min=',min,' imax=',imax,' max=',max); writeln;a[0]:=a[imin]; a[imin]:=a[imax]; a[imax]:=a[0]; for i:=1 to 10 do begin for j:=1 to 10 do write(a[i,j]:4); writeln end;readln end. P.S. Извиняюсь, заметил у себя ошибку: в 5-й строке сверху должно быть не a[i,j], а a[i,i] Edited March 30, 2010 by Тролль Quote Link to comment Share on other sites More sharing options...
eleshka Posted March 30, 2010 Author Report Share Posted March 30, 2010 Спасибо большое! ^__^ Quote Link to comment Share on other sites More sharing options...
ignorer Posted May 1, 2010 Report Share Posted May 1, 2010 я конечно извиняюсь, но решение по-моему получилось довольно громоздкое и его можно оптимизировать. например можно вывести матрицу, найти минимальный и максимальный элементы сразу при вводе (также можно в это же время с помощью ifов и с главной диагональю разобраться, хотя впринципе так, как сделано у вас - лучше). кстати, спасибо вам за то, что написали, что можно строки двумерного массива менять местами не по элементам, а сразу (я раньше не знал и не узнал бы, если б щас прогу не разобрал :) ) Quote Link to comment Share on other sites More sharing options...
Тролль Posted May 4, 2010 Report Share Posted May 4, 2010 ignorer: можно вывести матрицу, найти минимальный и максимальный элементы сразу при вводе (также можно в это же время с помощью ifов и с главной диагональю разобратьсяСогласен :)Совмещение действий, конечно, экономит время, но и делает программу менее понятной. Задание учебное и я старался разделить этапы выполения. Вывод данных - отдельно, обработка - отдельно. Впрочем, в более сложных программах тоже, если нет особых требований к скорости, лучше разные функции не совмещать. Котлеты - отдельно, мухи - отдельно :) Это окупится, если к этой программе когда-нибудь придется вернуться. По поводу строк массива - объявление a:array[0..10,1..10]of integer; - допустимый и обычно используемый сокращенный вариант записи a:array[0..10] of array[1..10] of integer; - то есть фактически тут одномерный массив одномерных массивов, а элементы массива можно присваивать друг другу :) Quote Link to comment Share on other sites More sharing options...
ignorer Posted May 7, 2010 Report Share Posted May 7, 2010 блин, вы мне только что накинули мысль, как можно более сложные задачи решать, а то я как-то всё постоянно в 1 кучу сбиваю. и ещё: спасибо конечно, но про то, что двумерный массив - массив из массивов я знал, но не знал, что это такие же переменные, как и строки, например, и их можно присваивать друг другу. и если не сложно, объясните, можно ли работать с массивом типа array[0..10] of array[1..10] of integer; ? я как его ни крутил, у меня ничего так и не получилось. P.S. чёто в программировании народу маловато, вроде форум большой, да и программистов наверняка здесь толковых немало... Quote Link to comment Share on other sites More sharing options...
Тролль Posted May 7, 2010 Report Share Posted May 7, 2010 ignorer: можно ли работать с массивом типа array[0..10] of array[1..10] of integer; ? я как его ни крутил, у меня ничего так и не получилось Неясно, почему не получилось. Просто заменить в этой программе a:array[0..10,1..10]of integer; на a:array[0..10] of array[1..10] of integer; и всё крутится по-прежнему. Относительно массивов вообще - в Pascal в отношении присваивания массивов есть одна тонкость: совпадающими типами считаются объявленные в одном объявлении или с именем типа. Вот демонстрация разных вариантов присваивания массивов: type t=array[1..5]of integer;var a,b:array[1..10]of integer; c:array[1..10]of integer; d:t; e:t; f:array[1..7]of t;begin a:=b; {можно} {a:=c;} {нельзя} d:=e; {можно} f[3,3]:=1; f[2][2]:=5; f[5]:=f[6]; f[4]:=e;end. Quote Link to comment Share on other sites More sharing options...
ignorer Posted May 9, 2010 Report Share Posted May 9, 2010 f[3,3]:=1; - вот так я пробовал и не получалось, ибо массив имеет другое кол-во размерностей (я пробовал только в PascalАВС) f[2][2]:=5; - вот до этого-то я и не мог додуматься, перебрал все остальные варианты. ещё раз большое спасибо, потому что я б тупил ещё долго, но до такого не додумался. и вопрос на счёт : {a:=c;} {нельзя} просто я не понял, почему так, ведь это 2 целочисленных массива, у которых элементы пронумерованы с 1 по 10, получается, что изначально это 2 абсолютно одинаковых массива... Quote Link to comment Share on other sites More sharing options...
Тролль Posted May 9, 2010 Report Share Posted May 9, 2010 (edited) ignorer: Я не понял, почему "массив имеет другое кол-во размерностей". При правильном количестве размерностей все должно работать. f[3,3] - допустимое в Pascal сокращенное обозначение f[3][3], и в PascalABC.NET тоже, естественно, работает (в PascalABC я не пробовал работать). 2 целочисленных массива, у которых элементы пронумерованы с 1 по 10, получается, что изначально это 2 абсолютно одинаковых массива...Pascal не проверяет структуру типов. Он не видит, что эти массивы одинаковые. Языки, которые проверяют типы на совпадение структуры, называются языками со структурной типизацией, а Pascal - язык с номинативной (именной) типизацией, в нем совместимость определяется именем типа. Описанию типа вроде array[1..10], при чтении описания сразу присваивается скрытое имя типа. При следующем описании, даже такого же по структуре типа, компилятор даст ему новое скрытое имя, он не сравнивает структуры типов в разных описаниях. Edited May 9, 2010 by Тролль Quote Link to comment Share on other sites More sharing options...
ignorer Posted May 9, 2010 Report Share Posted May 9, 2010 ужас, как можно так доходчиво и понятно всё объяснять. я понял 2 вещи: 1) почему в одном случае получается присваивать 1-му массиву другой, а в другом нет. 2) я совсем не знаю паскаль и теорию... как тут повышать репутацию? Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.