Перейти к содержанию
СофтФорум - всё о компьютерах и не только

Turbo Pascal


Рекомендуемые сообщения

Есть задание в курсовой.

"Сформировать массив А (10х10). Подсчитать кол-во положительных элементов главной диагонали в массиве. Поменять местами строки с наибольшими и наименьшими элементами в массиве".

Может кто помочь? нужно к завтрашнему дню.. = (((

Ссылка на комментарий
Поделиться на другие сайты

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]

Изменено пользователем Тролль
Ссылка на комментарий
Поделиться на другие сайты

  • 1 месяц спустя...

я конечно извиняюсь, но решение по-моему получилось довольно громоздкое и его можно оптимизировать. например можно вывести матрицу, найти минимальный и максимальный элементы сразу при вводе (также можно в это же время с помощью ifов и с главной диагональю разобраться, хотя впринципе так, как сделано у вас - лучше).

кстати, спасибо вам за то, что написали, что можно строки двумерного массива менять местами не по элементам, а сразу (я раньше не знал и не узнал бы, если б щас прогу не разобрал :) )

Ссылка на комментарий
Поделиться на другие сайты

ignorer:

можно вывести матрицу, найти минимальный и максимальный элементы сразу при вводе (также можно в это же время с помощью ifов и с главной диагональю разобраться
Согласен :)

Совмещение действий, конечно, экономит время, но и делает программу менее понятной. Задание учебное и я старался разделить этапы выполения. Вывод данных - отдельно, обработка - отдельно. Впрочем, в более сложных программах тоже, если нет особых требований к скорости, лучше разные функции не совмещать. Котлеты - отдельно, мухи - отдельно :)

Это окупится, если к этой программе когда-нибудь придется вернуться.

По поводу строк массива - объявление a:array[0..10,1..10]of integer; - допустимый и обычно используемый сокращенный вариант записи a:array[0..10] of array[1..10] of integer; - то есть фактически тут одномерный массив одномерных массивов, а элементы массива можно присваивать друг другу :)

Ссылка на комментарий
Поделиться на другие сайты

блин, вы мне только что накинули мысль, как можно более сложные задачи решать, а то я как-то всё постоянно в 1 кучу сбиваю.

и ещё: спасибо конечно, но про то, что двумерный массив - массив из массивов я знал, но не знал, что это такие же переменные, как и строки, например, и их можно присваивать друг другу. и если не сложно, объясните, можно ли работать с массивом типа array[0..10] of array[1..10] of integer; ? я как его ни крутил, у меня ничего так и не получилось.

P.S. чёто в программировании народу маловато, вроде форум большой, да и программистов наверняка здесь толковых немало...

Ссылка на комментарий
Поделиться на другие сайты

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. 
Ссылка на комментарий
Поделиться на другие сайты

f[3,3]:=1; - вот так я пробовал и не получалось, ибо массив имеет другое кол-во размерностей (я пробовал только в PascalАВС)

f[2][2]:=5; - вот до этого-то я и не мог додуматься, перебрал все остальные варианты. ещё раз большое спасибо, потому что я б тупил ещё долго, но до такого не додумался.

и вопрос на счёт : {a:=c;} {нельзя}

просто я не понял, почему так, ведь это 2 целочисленных массива, у которых элементы пронумерованы с 1 по 10, получается, что изначально это 2 абсолютно одинаковых массива...

Ссылка на комментарий
Поделиться на другие сайты

ignorer:

Я не понял, почему "массив имеет другое кол-во размерностей". При правильном количестве размерностей все должно работать. f[3,3] - допустимое в Pascal сокращенное обозначение f[3][3], и в PascalABC.NET тоже, естественно, работает (в PascalABC я не пробовал работать).

2 целочисленных массива, у которых элементы пронумерованы с 1 по 10, получается, что изначально это 2 абсолютно одинаковых массива...
Pascal не проверяет структуру типов. Он не видит, что эти массивы одинаковые. Языки, которые проверяют типы на совпадение структуры, называются языками со структурной типизацией, а Pascal - язык с номинативной (именной) типизацией, в нем совместимость определяется именем типа. Описанию типа вроде array[1..10], при чтении описания сразу присваивается скрытое имя типа. При следующем описании, даже такого же по структуре типа, компилятор даст ему новое скрытое имя, он не сравнивает структуры типов в разных описаниях. Изменено пользователем Тролль
Ссылка на комментарий
Поделиться на другие сайты

ужас, как можно так доходчиво и понятно всё объяснять. я понял 2 вещи: 1) почему в одном случае получается присваивать 1-му массиву другой, а в другом нет. 2) я совсем не знаю паскаль и теорию...

как тут повышать репутацию?

Ссылка на комментарий
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...