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

Znajdź błąd w pseudokodzie

Object Storage Arubacloud
0 głosów
734 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ź 74 wizyt
pytanie zadane 15 marca w Algorytmy przez Doge Gaduła (3,370 p.)
0 głosów
0 odpowiedzi 581 wizyt
pytanie zadane 18 marca 2017 w C i C++ przez Barteck125 Obywatel (1,120 p.)
+1 głos
1 odpowiedź 1,664 wizyt
pytanie zadane 27 stycznia 2017 w Rozwój zawodowy, nauka, praca przez koliber Początkujący (400 p.)

92,551 zapytań

141,399 odpowiedzi

319,531 komentarzy

61,937 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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy 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!

...