Jump to content
СофтФорум - всё о компьютерах и не только

Turbo Pascal


Recommended Posts

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

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

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

Link to comment
Share on other sites

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 by Тролль
Link to comment
Share on other sites

  • 1 month later...

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

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

Link to comment
Share on other sites

ignorer:

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

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

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

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

Link to comment
Share on other sites

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

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

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

Link to comment
Share on other sites

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. 
Link to comment
Share on other sites

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

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

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

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

Link to comment
Share on other sites

ignorer:

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

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

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

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

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...