通信大学の必修科目でパスカル言語を勉強し始めたのですが、
Tausch := ioZeigerEins;
ioZeigerEins := ioZeigerZwei;
ioZeigerZwei := Tausch;
のように、ioZeigerEins と ioZeigerZwei を交換するやり方は理解できたのですが、
procedure SortiereListe の中の、
Tausch := Element^.next;
Element^.next := Anfang;
Ende^.next := Tausch;
ZeigerTausch (Anfang, Element);
で、どうしてElement^.next が出てくるのかが良く理解出来ません。
長々と書いてしまいましたが、どうぞ宜しくお願い致します。
------------------------------------------------------
program TesteSortiereListe (input, output);
type
tNatZahl = 0..maxint;
tRefListe = ^tListe;
tListe = record
info : tNatZahl;
next : tRefListe;
end;
var
RefListe : tRefListe;
procedure SortiereListe (var ioRefListe : tRefListe);
{ sortiert eine lineare Liste aufsteigend }
var
Anfang,
Ende,
Tausch,
Suche,
Element : tRefListe;
function ZeigerTausch (var ioZeigerEins, ioZeigerZwei : tRefliste) : tRefListe;
begin
Tausch := ioZeigerEins;
ioZeigerEins := ioZeigerZwei;
ioZeigerZwei := Tausch;
end; { ZeigerTausch }
begin
if (ioRefListe <> nil) and (ioRefListe^.next <> nil) then
begin
Anfang := ioRefListe;
Ende := ioRefListe^.next;
if Ende^.info < Anfang^.info then
begin
Anfang^.next := Ende^.next;
Ende^.next := Anfang;
ZeigerTausch (Ende, Anfang);
end; { if-Schleife }
while Ende^.next <> nil do
begin
Element := Ende^.next;
if Element^.info > Ende^.info then
Ende := Ende^.next
else
if Element^.info < Anfang^.info then
begin
Tausch := Element^.next;
Element^.next := Anfang;
Ende^.next := Tausch;
ZeigerTausch (Anfang, Element);
end { then-Zweig }
else
begin
Suche := Anfang;
while Suche^.next^.info < Element^.info do
Suche := Suche^.next;
Tausch := Element^.next;
Element^.next := Suche^.next;
Suche^.next := Element;
Ende^.next := Tausch;
end; { else-Zweig }
end; { while-Schleife }
end; { if-Schleife }
ioRefListe := Anfang;
end; {SortiereListe }
procedure Anhaengen (var ioListe : tRefListe; inZahl : tNatZahl);
{ Haengt inZahl an ioListe an }
var Zeiger : tRefListe;
begin
Zeiger := ioListe;
if Zeiger = nil then
begin
new(ioListe);
ioListe^.info := inZahl;
ioListe^.next := nil;
end
else
begin
while Zeiger^.next <> nil do
Zeiger := Zeiger^.next;
new(Zeiger^.next);
Zeiger := Zeiger^.next;
Zeiger^.info := inZahl;
Zeiger^.next := nil;
end;
end;
procedure ListeEinlesen(var outListe : tRefListe);
{ liest eine durch Leerzeile abgeschlossene Folge von Integer-
Zahlen ein und speichert diese in der linearen Liste RefListe. }
var
Liste : tRefListe;
Zeile : string;
Zahl, Code : integer;
begin
writeln('Bitte geben Sie die zu sortierenden Zahlen ein.');
writeln('Beenden Sie Ihre Eingabe mit einer Leerzeile.');
Liste := nil;
readln(Zeile);
val(Zeile, Zahl, Code); { var konvertiert String nach Integer }
while Code=0 do
begin
Anhaengen (Liste, Zahl);
readln (Zeile);
val (Zeile, Zahl, Code);
end; { while}
outListe := Liste;
end; {ListeEinlesen}
procedure GibListeAus(inListe : tRefListe);
{ Gibt die Elemente von inListe aus }
var Zeiger : tRefListe;
begin
Zeiger := inListe;
while Zeiger <> nil do
begin
writeln(Zeiger^.info);
Zeiger := Zeiger^.next;
end; { while }
end; { GibListeAus }
begin
ListeEinlesen(RefListe);
SortiereListe(RefListe);
GibListeAus(RefListe);
end.
No.2ベストアンサー
- 回答日時:
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセル マクロ(A1:A10)までの中で一番多く出た数字をB10に表示 6 2023/04/25 17:01
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Visual Basic(VBA) VBAの繰り返し処理について教えてください。 3 2022/08/02 13:21
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- Visual Basic(VBA) 実行時エラー´5854´ 文字列型パラメーターが長すぎます。 3 2023/06/08 21:17
- Excel(エクセル) vba 「Nextに対するForが見当たりません」のエラーが発生する原因 1 2022/10/21 15:46
- Visual Basic(VBA) Excelで下記のようにマクロを作ったところ、一回目は実行できたのですが、二回目以降「実行時エラー1 1 2022/03/25 08:08
- Visual Basic(VBA) 数字が「0」の列を削除するため、下記のコードを実行しましたが、コンパイルエラーSubまたはFunct 3 2022/12/04 00:00
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Why is 77+33 not equal to 100?
-
レコードセットにnullの場合
-
verilogのcase文
-
タイムアウトする仕組みを作りたい
-
【FPGA】VHDLのprocessとevent
-
VB.NETでのイベントの途中終了
-
VBA public変数はどのようなこ...
-
VBAでcallで呼び出したsubを終...
-
C言語のサフィックスについて
-
他のフォームから別のフォーム...
-
【VB6.0】 あるフォームから他...
-
チェックボックスを操作できな...
-
エクセルVBAでテキストボッ...
-
VBAで入力数値について
-
Excel VBAでsub,dimは何の略?
-
Functionの戻り値を配列にした...
-
C#のループでtextboxに値を入れ...
-
構造体のコピー
-
プロシージャまたは関数の引数...
-
イギリス海軍のsub lieutenant...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
レコードセットにnullの場合
-
タイムアウトする仕組みを作りたい
-
subsequentとnextの違いってな...
-
verilogのcase文
-
日付の重複
-
vbsのmsgboxランダム表示について
-
リスト間のアイテム移動について
-
TreeViewのTag情報取得
-
pascalでの二分探索(バイナリ...
-
delphi
-
Pascalのプログラムです
-
C言語のプログラムで...
-
【FPGA】VHDLのprocessとevent
-
エクセルVBAついて ①if•••••the...
-
FORTRAN77でプログラミング
-
クラスモジュールの処理
-
EXCEL VBA 文字 アドレス 検...
-
パスカル言語
-
Verilog-HDLによる設計において
-
なんで? cEn-P^-1AP=P^-1(cEn-AP)
おすすめ情報