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

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) я совсем не знаю паскаль и теорию...

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

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

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

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

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