eleshka Опубликовано 30 марта, 2010 Жалоба Поделиться Опубликовано 30 марта, 2010 Есть задание в курсовой. "Сформировать массив А (10х10). Подсчитать кол-во положительных элементов главной диагонали в массиве. Поменять местами строки с наибольшими и наименьшими элементами в массиве". Может кто помочь? нужно к завтрашнему дню.. = ((( Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 30 марта, 2010 Жалоба Поделиться Опубликовано 30 марта, 2010 (изменено) 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] Изменено 30 марта, 2010 пользователем Тролль Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
eleshka Опубликовано 30 марта, 2010 Автор Жалоба Поделиться Опубликовано 30 марта, 2010 Спасибо большое! ^__^ Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
ignorer Опубликовано 1 мая, 2010 Жалоба Поделиться Опубликовано 1 мая, 2010 я конечно извиняюсь, но решение по-моему получилось довольно громоздкое и его можно оптимизировать. например можно вывести матрицу, найти минимальный и максимальный элементы сразу при вводе (также можно в это же время с помощью ifов и с главной диагональю разобраться, хотя впринципе так, как сделано у вас - лучше). кстати, спасибо вам за то, что написали, что можно строки двумерного массива менять местами не по элементам, а сразу (я раньше не знал и не узнал бы, если б щас прогу не разобрал :) ) Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 4 мая, 2010 Жалоба Поделиться Опубликовано 4 мая, 2010 ignorer: можно вывести матрицу, найти минимальный и максимальный элементы сразу при вводе (также можно в это же время с помощью ifов и с главной диагональю разобратьсяСогласен :)Совмещение действий, конечно, экономит время, но и делает программу менее понятной. Задание учебное и я старался разделить этапы выполения. Вывод данных - отдельно, обработка - отдельно. Впрочем, в более сложных программах тоже, если нет особых требований к скорости, лучше разные функции не совмещать. Котлеты - отдельно, мухи - отдельно :) Это окупится, если к этой программе когда-нибудь придется вернуться. По поводу строк массива - объявление a:array[0..10,1..10]of integer; - допустимый и обычно используемый сокращенный вариант записи a:array[0..10] of array[1..10] of integer; - то есть фактически тут одномерный массив одномерных массивов, а элементы массива можно присваивать друг другу :) Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
ignorer Опубликовано 7 мая, 2010 Жалоба Поделиться Опубликовано 7 мая, 2010 блин, вы мне только что накинули мысль, как можно более сложные задачи решать, а то я как-то всё постоянно в 1 кучу сбиваю. и ещё: спасибо конечно, но про то, что двумерный массив - массив из массивов я знал, но не знал, что это такие же переменные, как и строки, например, и их можно присваивать друг другу. и если не сложно, объясните, можно ли работать с массивом типа array[0..10] of array[1..10] of integer; ? я как его ни крутил, у меня ничего так и не получилось. P.S. чёто в программировании народу маловато, вроде форум большой, да и программистов наверняка здесь толковых немало... Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 7 мая, 2010 Жалоба Поделиться Опубликовано 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. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
ignorer Опубликовано 9 мая, 2010 Жалоба Поделиться Опубликовано 9 мая, 2010 f[3,3]:=1; - вот так я пробовал и не получалось, ибо массив имеет другое кол-во размерностей (я пробовал только в PascalАВС) f[2][2]:=5; - вот до этого-то я и не мог додуматься, перебрал все остальные варианты. ещё раз большое спасибо, потому что я б тупил ещё долго, но до такого не додумался. и вопрос на счёт : {a:=c;} {нельзя} просто я не понял, почему так, ведь это 2 целочисленных массива, у которых элементы пронумерованы с 1 по 10, получается, что изначально это 2 абсолютно одинаковых массива... Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 9 мая, 2010 Жалоба Поделиться Опубликовано 9 мая, 2010 (изменено) ignorer: Я не понял, почему "массив имеет другое кол-во размерностей". При правильном количестве размерностей все должно работать. f[3,3] - допустимое в Pascal сокращенное обозначение f[3][3], и в PascalABC.NET тоже, естественно, работает (в PascalABC я не пробовал работать). 2 целочисленных массива, у которых элементы пронумерованы с 1 по 10, получается, что изначально это 2 абсолютно одинаковых массива...Pascal не проверяет структуру типов. Он не видит, что эти массивы одинаковые. Языки, которые проверяют типы на совпадение структуры, называются языками со структурной типизацией, а Pascal - язык с номинативной (именной) типизацией, в нем совместимость определяется именем типа. Описанию типа вроде array[1..10], при чтении описания сразу присваивается скрытое имя типа. При следующем описании, даже такого же по структуре типа, компилятор даст ему новое скрытое имя, он не сравнивает структуры типов в разных описаниях. Изменено 9 мая, 2010 пользователем Тролль Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
ignorer Опубликовано 9 мая, 2010 Жалоба Поделиться Опубликовано 9 мая, 2010 ужас, как можно так доходчиво и понятно всё объяснять. я понял 2 вещи: 1) почему в одном случае получается присваивать 1-му массиву другой, а в другом нет. 2) я совсем не знаю паскаль и теорию... как тут повышать репутацию? Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.