Программа с результатами её выполнения
Реализация многомерного массива Дана целочисленная квадратная матрица. Найти в каждой строке наибольший элемент и поменять его местами с элементом главной диагонали. Program Obmen; Var N, I, J, Max,Ind, Vsp: Integer;A: Array [1..15, 1..15] Of Integer; Begin WRITE('Введите количество элементов в массиве: '); READLN(N); FOR I:= 1 TO N DO FOR J:= 1 TO N DO Begin WRITE('A[', I, ',', J, '] '); READLN(A[I, J]) End; FOR I:= 1 TO N DO Begin Max:= A[I, 1]; Ind:= 1; FOR J:= 2 TO N DO IF A[I, J] > Max THEN Begin Max:= A[I, J]; Ind:= J End; Vsp:= A[I, I]; A[I, I]:= A[I, Ind]; A[I, Ind]:= Vsp End; FOR I:= 1 TO N DO Begin WriteLn; FOR J:= 1 TO N Do Write(A[I, J]: 3); End; WriteLn End.
19. Линейный список. Реализация с использованием связных списков. Примеры применения.
Списком называется упорядоченное множество, состоящее из переменного числа элементов, к которым применимы операции включения, исключения Линейный список - это конечная последовательность однотипных элементов (узлов), возможно, с повторениями. Количество элементов в последовательности называется длиной списка, причем длина в процессе работы программы может изменяться. Линейный список F, состоящий из элементов D1,D2,...,Dn, записывают в виде последовательности значений заключенной в угловые скобки F=, или представляют графически (см.рис.12).
Например, F1=< 2,3,1>,F2=< 7,7,7,2,1,12 >, F3=< >. Длина списков F1, F2, F3 равна соответственно 3,6,0. Связный (линейный) список является структурой данных, в произвольно выбранное место которого могут включаться данные, а также изыматься оттуда. Каждая компонента списка определяется ключом. Обычно ключ - либо число, либо строка символов. Ключ располагается в поле данных компоненты, он может занимать как отдельное поле записи, так и быть частью поля записи. Основные отличия связного списка от стека и очереди следующие: · -для чтения доступна любая компонента списка; · -новые компоненты можно добавлять в любое место списка; · -при чтении компонента не удаляется из списка. Над списками выполняются следующие операции: · -начальное формирование списка (запись первой компоненты); · -добавление компоненты в конец списка; · -чтение компоненты с заданным ключом; · -вставка компоненты в заданное место списка (обычно после компоненты с заданным ключом); · -исключение компоненты с заданным ключом из списка. Для формирования списка и работы с ним необходимо иметь пять переменных типа указатель, первая из которых определяет начало списка, вторая - конец списка, остальные- вспомогательные. Текст программы. Составить программу, которая на основе заданного списка формирует два других, помещая в первый из них положительные, а во второй — отрицательные элементы исходного списка.{Программана Turbo Pascal}Program Ex_sp_1;Uses Spisok;Var S1, S2, S3, V1, V2, V3: U; A: BT; I, N: Byte; ProcedureV_Nachalo; {Процедура добавления звена в начало списка; в x содержится добавляемая информация}VarVsp: U; BeginNew(Vsp);Vsp^.Inf:= X;Vsp^.Next:= First; {То звено, что было заглавным, становится вторым по счёту}First:=Vsp; {Новое звено становится заглавным}End; ProcedureIz_Nachala; {Процедура удаления звена из начала списка;в x содержится информация из удалённого звена}VarVsp: U; BeginVsp:= First;First:=First^.Next;X:=Vsp^.Inf;Dispose(Vsp); End; ProcedureV_Spisok; {Процедура добавления звена в список после звена,на которое ссылается указатель Pred; в x содержится информация для добавления} VarVsp: U; BeginNew(Vsp);Vsp^.Inf:= X;Vsp^.Next:= Pred^.Next;Pred^.Next:= Vsp; End; ProcedureIz_Spiska; {Процедура удаления звена из списка после звена,на которое ссылается указатель Pred; в x содержится информация из удалённого звена}VarVsp: U; BeginVsp:=Pred^.Next;Pred^.Next:= Pred^.Next^.Next;X:=Vsp^.Inf;Dispose(Vsp); End; Procedure Ochistka;VarVsp: BT; Begin While Not Pust(First) Do Iz_Nachala(First, Vsp) End; Function Pust; BeginPust:= First = Nil End; Procedure Print;VarVsp: U; BeginVsp:= First; While Vsp<> Nil Do BeginWrite(Vsp^.Inf: 6);Vsp:=Vsp^.Next End; WriteLn End; Begin Randomize;N:= 1 + Random(20);S1:= Nil; A:= -100 + Random(201);V_Nachalo(S1, A); V1:= S1; For I:= 2 To N Do Begin A:= -100 + Random(201); V_Spisok(V1, A); V1:= V1^.Next End;WriteLn('Исходныйсписок: '); Print(S1);V1:= s1; S2:= Nil; S3:= Nil; While V1 <> Nil Do Begin If V1^.Inf > 0 Then If S2 = Nil Then Begin V_Nachalo(S2, V1^.Inf); V2:= S2 End Else Begin V_Spisok(V2, V1^.Inf); V2:= V2^.Next End; If V1^.Inf < 0 Then If S3 = Nil Then Begin V_Nachalo(s3, V1^.Inf); V3:= S3 End Else Begin V_Spisok(V3, V1^.Inf); V3:= V3^.Next End;V1:= V1^.NextEnd;WriteLn('Результирующий список из положительных элементов: '); Print(S2);WriteLn('Результирующий список из отрицательных элементов: '); Print(S3);Ochistka(S1); Ochistka(S2); Ochistka(S3);End.Примеры применения. Линейные списки находят широкое применение в приложениях, где непредсказуемы требования на размер памяти, необходимой для хранения данных; большое число сложных операций над данными, особенно включений и исключений. На базе линейных списков могут строится стеки, очереди и деки. Представление очереди с помощью линейного списка позволяет достаточно просто обеспечить любые желаемые дисциплины обслуживания очереди. Особенно это удобно, когда число элементов в очереди трудно предсказуемо.
20. Поиск в линейном списке. Назначение и варианты реализации.
Списком называется упорядоченное множество, состоящее из переменного числа элементов, к которым применимы операции включения, исключения Линейный список - это конечная последовательность однотипных элементов (узлов), возможно, с повторениями. Количество элементов в последовательности называется длиной списка, причем длина в процессе работы программы может изменяться. Линейный список F, состоящий из элементов D1,D2,...,Dn, записывают в виде последовательности значений заключенной в угловые скобки F=, или представляют графически (см.рис.12).
Например, F1=< 2,3,1>,F2=< 7,7,7,2,1,12 >, F3=< >. Длина списков F1, F2, F3 равна соответственно 3,6,0.
|