• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Znajdź błąd w pseudokodzie

VPS Starter Arubacloud
0 głosów
685 wizyt
pytanie zadane 12 stycznia 2017 w Algorytmy przez Mariusz M Obywatel (1,640 p.)
otagowane ponownie 13 stycznia 2017 przez Mariusz M

Znajdź błędy w pseudokodzie
 

List-Insert(L,x)
	if head[L]=NIL then
		head[L]:=x; next[x]:=NIL;
	else 
		y:=head[L];z:=NIL;
		while(y!=NIL)and(key[x]>key[y]) do 
			z:=y;
			y:=next[y];
		end while
		next[x]:=y;
		next[z]:=x;
	end if

List-Del(L,x)
	if head[L]!=NIL then
		if head[L]=x then 
			head[L]:=next[x];
		else 
			y:=head[L];
			while(next[y]!=x) do 
				y:=next[y];
			end while
			next[y]:=next[x];
		end if
	end if

Próbowałem przepisać ten pseudokod na język programowania taki jak Pascal czy C
i okazało się że są w nim błędy
Ciekawy jestem gdzie one są i jak je poprawić
 

komentarz 13 stycznia 2017 przez playerony Pasjonat (15,240 p.)
To jakaś forma rozkazu czy jak ??
komentarz 13 stycznia 2017 przez operator Stary wyjadacz (10,920 p.)
bez spiny
komentarz 15 stycznia 2018 przez Patryk Kirszenstein Bywalec (2,400 p.)

@Mariusz M, Co to jest NIL ?

 

3 odpowiedzi

0 głosów
odpowiedź 13 stycznia 2017 przez morele123 Gaduła (4,790 p.)
Dziwny zapis w tym pseudokodzie stosujecie.

(key[x]>key[y]) <- tutaj jest błąd. Nie masz jeszcze tego x na liście, więc nie istnieje polecenie key[x] , bo ono jest nilem. To pierwszy błąd który napotkałem dalej nie sprawdzałem.
komentarz 13 stycznia 2017 przez Mariusz M Obywatel (1,640 p.)
edycja 13 stycznia 2017 przez Mariusz M
Błąd jest gdzie indziej to jest porównywanie pola kluczowego w węźle
który ma być wstawiony z polami kluczowymi węzłów które już są na liście
Ten fragment jest ok bo chodzi o to aby wstawić węzeł w odpowiednie miejsce
Na upartego to rzeczywiście można było dać zmienną lokalną zamiast x
a x użyć tylko do ustawienia pól z danymi w utworzonym węźle
co zrobiłem w kodzie jednak to nie o to chodziło
–1 głos
odpowiedź 13 stycznia 2017 przez Michał Gibas Pasjonat (19,610 p.)
Daj kod C albo Pascala to ci powiem co jest źle. Bo tak na podstawie pseudokodu będzie ciężko ; P
–1 głos
odpowiedź 13 stycznia 2017 przez Mariusz M Obywatel (1,640 p.)
edycja 13 stycznia 2017 przez Mariusz M

Oto kod źródłowy na podstawie tego pseudokodu

 

program listajednokierunkowa;
uses crt;
type TLine=
		record 
			number:integer;
			line:string;
		end;
		PNode=^TNode;
		TNode=
		record
			data:TLine;
			next:PNode;
		end;
procedure insertNode(var head:PNode;x:TLine);
var newNode,y,z:PNode;
begin
	new(NewNode);
	newNode^.data.number:=x.number;
	newNode^.data.line:=x.line;
	if(head=nil) then 
	begin
		head:=newNode;
		newNode^.next:=nil;
	end
	else
	begin
		y:=head;
		z:=nil;
		while((y<>nil)and(newNode^.data.line>y^.data.line) do 
		begin
			z:=y;
			y:=y^.next;
		end;
		newNode^.next:=y;
		z^.next:=newNode;
	end;
end;
		
procedure deleteNode(var head:PNode;x:PNode);
var y:PNode;
begin
	if(head<>nil) then
		if(head=x) then 
			begin
				head:=x^.next;
				dispose(x);
			end
		else
			begin
				y:=head;
				while(y^.next<>x) do 
					y:=y^.next;
				y^.next:=x^.next;
				dispose(x);
			end;
end;	

function findNode(head:PNode;x:TLine):PNode;
var p:PNode;
begin
	p:=head;
	while(p<>nil)and not((p^.data.number=x.number)and(p^.data.line=x.line)) do 
		p:=p^.next;
	findNode:=p;
end;

procedure printList(head:PNode);
var p:PNode;
begin
	p:=head;
	while(p<>nil) do 
	begin
		writeln(p^.data.number,' ',p^.data.line);
		p:=p^.next;
	end;
end;

var l:TLine;
	list:PNode;
	f:text;
	i:integer;
	path:string;
	

begin
	clrscr;
	writeln('Podaj sciezke do pliku');
	readln(path);
	assign(f,path);
	reset(f);
	i:=1;
	while not eof(f) do
	begin
		readln(f,l.line);
		l.number:=i;
		insertNode(list,l);
		i:=i+1;
	end;
    close(f);
	printList(list);
	readkey;
	while(head<>nil) do 
		deleteNode(head,head);
end.

 

 

Podobne pytania

+1 głos
1 odpowiedź 65 wizyt
pytanie zadane 15 marca w Algorytmy przez Doge Gaduła (3,320 p.)
0 głosów
0 odpowiedzi 580 wizyt
pytanie zadane 18 marca 2017 w C i C++ przez Barteck125 Obywatel (1,120 p.)
+1 głos
1 odpowiedź 1,654 wizyt
pytanie zadane 27 stycznia 2017 w Rozwój zawodowy, nauka, praca przez koliber Początkujący (400 p.)

92,451 zapytań

141,261 odpowiedzi

319,073 komentarzy

61,853 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...